« first day (1735 days earlier)      last day (962 days later) » 

12:01 AM
[banane-io/PDB] 1 commit. 79 additions. 3 deletions.
[rubberduck-vba/Rubberduck] 1 issue comment.
[Zomis/minesweeper-flags-client] 6 commits. 175 additions. 83 deletions.
Now that I look at it again, you may be right. The tests there are extremely convoluted.
The mix of declaration type and component type checks is probably what's throwing me off.
the name OtherComponentTypeShadowingRelations is a bit misleading.
I first thought about types of VBComponents ony.
However, it covers all types of declarations.
Is this even possible?
originalDeclaration.DeclarationType != DeclarationType.ClassModule && originalDeclarationComponentType == ComponentType.ClassModule
The next 2 tests are similar, but for documents and userforms.
!= and == against a DeclarationType looks risky... should be a flag check, esp. for userforms and documents
That's what I thought too, but shouldn't anything with a ComponentType.ClassModule be DeclarationType.ClassModule?
12:14 AM
but the inverse isn't necessarily true
*for some values of "be"
I'm probably full of ol' dumbs but I really don't like that there's lot of overlaps between the declaration types and component types
Right - I think there are 7 or 8 DeclarationTypes that have that flag set.
@this there's a handful component types, and ~30 declaration types... we create a Declaration for every module (even for the project), so we need a declaration type for them
I know. The overlap isn't 100% but if you have places where we look at component types and other places where we are looking at declaration types, that kind of smells.
12:18 AM
In VBA there are 4 ComponentTypes IIR. VB6 adds a bunch more.
I would have less of a problem if everywhere in the codeanalysis project was looking at declaration types exclusively
(or something like that)
@this that should be doable
I'd personally prefer everything be a subclass of Declaration.
5 actually
12:20 AM
That would be a big win now that we have pattern matching.
though I'm not sure if we ever see "ActiveXDesigner" in use anywhere....
@this Is there some Access specific one I'm forgetting?
No, not even Access uses that.
remember that in VBA world, they know only about documents
My guess is that the VB6 specific ones are largely non-working in much of the code base.
Might be a relic of Office dev edition circa Office 2000
12:21 AM
^ seems the most likely
@mansellan would be able to confirm if it works there. I have no idea what it's for.
Can't you create one in VB6? Or am I thinking of something else?
ActiveX UserControl?
vbext_ct_ActiveXDesigner? Hmm Not sure if that's the same thing as an ActiveX project.
hmm lemme see
fires up VB6
@MathieuGuindon Ah, that's it.
12:23 AM
But, I don't think VBA lists component types from VB6 that it doesn't have support for
What I'd like to do is write a sort comparer for accessibility.
so if it lists the ActiveXDesigner, it had to had support it at one point
hence the relic hypothesis =)
Should be careful using the word "relic" around the VBE. It might get angry.
the key is to have a bag of sand weighted exactly the same
(and quick'n'nimble hands helps, too)
12:25 AM
Throw me the VBE, I'll throw you the whip.
This makes my head hurt...
            if ((originalDeclaration.DeclarationType == DeclarationType.Variable || originalDeclaration.DeclarationType == DeclarationType.Constant) &&
                return false;

            if (userDeclaration.DeclarationType == DeclarationType.Variable || userDeclaration.DeclarationType == DeclarationType.Constant)
                return DeclarationIsLocal(userDeclaration);
@Comintern The check is against originalComponentType not originalDeclaration.ComponentType.
var originalDeclarationComponentType = originalDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
Isn't that the same thing?
Oh, no - it's not.
It's the naming that's throwing me off.
It is the component type of the enclosing module.
Btw, I had the same first impression.
It was the comment I deleted.
OK. Time to rename some stuff.
12:50 AM
@this Yep, ODE can add ActiveX designers for Standalone projects. The Add-in designer is one, in fact.
Cool, makes sense.
It greys out the menu option when you have an embedded (normal) VBA project selected.
BTW, I didn't figure out how to use VBIDE in VB6. I suck.
Oh, it's non-trivial...
but I could see that the vb_ext_ct flags are much more extensive there than in VBA which only has those 5
Oh, really?
all I want to do is just query the component type of a user control I made.
was that too much to ask from VB6's IDE?
12:52 AM
hmm, i may be thinking of something else
in VBA, we usually can get to VBIDE via the Application
but the VB6 does not have an Application, nor does the App expose the VBE
yep I was thinking of the time I went to enumerate the command bar controls. had to jump through many hoops - i think I had to make an addin
I think its along the same lines
use the IDTExtensibility onconnect to get the vbe :/
rooty tooty
also, this made me LOL:
btw, a point in favour of using modules for project info is that MS went there first:
Attribute VB_Name = "VSSODE"
Option Explicit
' SCC = This is a Source Code Control file
' Designed for the Microsoft Office 2000 Developer VSS Add-in
' Do Not Remove!

' SCC_Project_Name =$/VBAProject
' SCC_Aux_Path=C:\Program Files (x86)\Microsoft Visual Studio\VSS\srcsafe.ini
' SCC_Short_Path=C:\PROGRA~2\MICROS~3\VSS\srcsafe.ini
'SCC_GUID = {3007A8DC-B380-4DE3-A698-C46808AF209D}
@mansellan rocking it old skool with the source control, I see.
12:56 AM
interestingly, its hidden from the PE
Mug. Your answer for codereview.stackexchange.com/questions/214349/… is another I'll come back to a few times. The allCars.FilterBy(New FooBarPredicate, "FooBar") is a trick I'll save for late use.
It's too bad that git wasn't a thing a decade earlier. I think people would have took source control more serious if they didn't make it so complicated with the old check in/out model
@this heh, funny you should say that... one of my colleagues at work decries Git's "complexity" and yearns to return to TFS (VSS with a server, imho...)
12:58 AM
I guess paradigm shift is just too much
tbf some things could be easier. diffing between branches grinds his gears.
I just keep 2 locals if I need to do that often
We used to use TFS. Do not miss it.
finding some interesting stuff in ODE.... Mostly, "WTF was this priced so much higher than other SKUs? There's hardly much here". But I think there might be some nuggets.
and they're wondering why ODE failed?
Most of my colleagues refuse to consider working with any SCM unless from inside VS.
Which I find odd
1:01 AM
Microsoft was definitely still in "nickel'n'dime" mindset WRT development tools back then.
yeah it shows
The checkout model makes working in any decently sized team excruciating.
@Comintern and wtf was "non-exclusive checkout"?!?
Something along the lines of "oooo, check out that code".
1:04 AM
so... you realised that exclusive was a bad idea, but you couldn't let go of the word, huh
@Comintern especially when people left stuff checked out then went on vacation....
We used Burton TLIB internally until like 6 months ago. It makes VSS look really upscale.
Sorry, your checkout is getting nuked by my VSS Admin account. Too bad sucka.
> 10-Apr-2018: Note our new phone number: 919-481-2183 (Also, we've discontinued the fax line.)
@Comintern Their website sure does make me wanna buy!
How delightfully modern
1:06 AM
It was painful.
Why is it even a thing?
Oh, the GUI is completely worthless.
@mansellan the whole graphic works, esp. with clip arts and huge buttons really grates my nerve. I don't know how I survived the 90s.
1:09 AM
I especially like the "text that looks like a link but really isn't" on their features page!
> Upgrade from TLIB for OS/2+NT to TLIB combo edition
huh, I guess there's still few running OS/2 and NT after all.
I like how they used strike-through on the address and phone number.
Again... Why. Is. It. A. Thing?!?
It's quite possible we were their last user.
(other than the web site).
> Software Development Magazine
"simple, yet powerful... [TLIB is] the People's Choice"
1:11 AM
uh, last update 2002... dafuq?
that's actually older than VSS last update
makes me think good ol' Burton has retired and is just living off the dwindling returns.
Is Software Development Magazine still around?
is that Dr. Dobb's?
Have no idea who's SDM, TBH.
No clue.
1:13 AM
"convoluted, yet toy-like... [TLIB is] the Idiot's Choice"
Totally doesn't make my eyes bleed
@this ewww
and I like how they have yellow for "big change"
Everyone at work except documentation used WinDiff instead.
so, uh, why were you using it till 6 months ago?
1:14 AM
Tech debt?
I really have no idea.
wait wait wait
> ISO 9001 Support
"Promote" between project levels, for ISO 9001-style staged development on large projects.
The really messed up thing is that everything was file based.
@Comintern so, uh, VSS then
because that worked really well for VSS
1:16 AM
So if you "commited" changes to 10 files, there was nothing to tie them together at all.
Rolling back was not an option.
So.... not a SCC, then.
It also lends itself to cramming everything into one huge source file so you could make changes "atomic".
@Comintern fun times!
1:17 AM
@Comintern Hmm. I wonder if that's why source code from 90s are like that?
Very well could be - directory based "source control" has the same problem.
I suspect that TFS carried over way more from VSS than they'd like to admit, esp early on. Never saw a TFS DB, but suspect it was just a VSS filesystem in a SQL server...
As Mat like to say, it's about the tooling - if the tooling encourages you to do something, then you're going to do it even if it's The Wrong Thing™.
Bad habits die hard though, we still have about a tenth the source files that we should.
1:19 AM
That didn't parse - if you only have 1/10 the size, isn't that an improvement?
A tenth the files - not LoC.
oh, duh. You need to split more files
There's no reason to have a 10K LoC .cs file with 15 or 20 classes in it.
I can't do quotes it seems
1:20 AM
@mansellan need the colon in front
@Comintern test
you must be rocking it seriously old school at work @Comintern
huh. Can't just "quote" without a text
It drives my boss nuts when I split things out into a bunch of source files.
@mansellan Nah, I do my own thing. I'm a department of one.
1:21 AM
My boss doesn't use VS. He uses CodeWright. For DOS.
I can see why, though - if you're in the old habits, it seems easier to find the thing you need in same file
Again, tooling matters.
if he doesn't want IDE, that's cool. He can use Notepad++. That can search in directories, you know?
Ah, I guess it is Windows. Only looks like DOS.
> Borland is no longer renewing support contracts and is no longer engaging in new development.[1]

CodeWright was acquired by Embarcadero Technologies as part CodeGear from Borland in 2008. CodeWright is currently sold by Embarcadero Technologies.
that's under section "End of Life" on wiki.
Procurement checklist: Vendor must have a website written in HTML 1: Check.
1:26 AM
@Comintern ironically, it links Wikipedia
I'm guessing the checklist is simply "Vendor must think they can sell this ancient POS."
ttgtb, night all
Oh hell, it was bought by the same company that owns InterBase. That explains a lot.
@mansellan night.
1:42 AM
> This is basically just a stub ATM, and is intended to house document specific functionality (mainly to allow caching of properties).

Closes #4724
WTF? I specifically based that off of upstream/next, not origin/next.
Is #4838 good to merge, or should I rebase #4844?
[rubberduck-vba/Rubberduck] comintern pushed commit b2f644f2 to next: Fix declaration matching for ambiguous QMNs. Ref #4814
[rubberduck-vba/Rubberduck] comintern pushed commit ef1b2c6d to next: Fix missed localization.
[rubberduck-vba/Rubberduck] comintern pushed commit 1e6e40d3 to next: correct handling of statement separators and newlines in single line if statements
Merge pull request #4838 from comintern/next

Misc. fixes
> Closed to flatten.
[rubberduck-vba/Rubberduck] build for commit a23f1b3f on unknown branch: AppVeyor build cancelled
> This is basically just a stub ATM, and is intended to house document specific functionality (mainly to allow caching of properties).

Closes #4724
@Comintern do we have a documentation saying that a document must be a class?
I assume it's the case but want to be sure that there won't be a weird host that has a document that's not a class
I has to implement IDispatch, no?
If it doesn't, it's already busted.
I assume that a document must be a class - just wanted to be sure that is a requirement and not merely a convention.
1:53 AM
I'm seeing what I can dig up on it.
after all, it's conceivable that it could implement only the IUnknown and the host document interface.
(meaning it's only good early-bound)
I'm pretty sure the terminology "document" refers to the same thing that an MFC "document" does, but I'm not 100% sure on that.
> Host-implemented Automation objects can be extended through VBA. VBA provides a class module for the host object so that VBA developers can add properties, methods, and events to the object's interface. Host classes can allow multiple instances of the extended object to be created at run time using the New operator. Extensible host classes that can be instantiated more than once at run time are referred to as multi-instance host items.

Multi-instance host items are powerful features. For example, consider a reporting tool that produces textual reports along with charts to enhance the rep
Yeah, that has a distinctly MFC ring to it.
Also note that the MFC standard library functions for OLEDates don't include any ms handling what-so-ever: docs.microsoft.com/en-us/cpp/atl-mfc-shared/reference/…
> Private Sub object_CreateInstance (Instance As Object)

Occurs when a new instance of a host class is created.
2:05 AM
I think that shows that the document class must have IDispatch in order to handle being cast to Object
A early-binding-only object would not be castable to Object.
Is that in the ATL spec?
no, that's from VBA SDK
(that's where I got the quote above as well)
OK, that makes sense. VBA is as much a beast of MFC/ATL as it is of COM.
2:07 AM
not exactly a specification but I think that's pretty compelling case for expecting that documents must be classes.
Of course, having said that.... a clown is going to slather in and report that Rubberduck is malfunctioning because he's running some weird VBA host that makes non-class modules "documents".
Is there a link to the SDK on the wiki?
hm, no.
at least I don't know.
I got SDK via my MSDN
I don't think it has ever been publicly documented.
Doesn't appear to be published.
Remember, that's from MSFT's "nickel'n'dime the developers" days.
Ugh. I might have to break down and install the stupid thing.
2:11 AM
I'll try to remember and ask someone at MSFT if we can share
simply sharing the SDK documentation should not be a problem.
The worst thing they'll do is say no because they won't re-license the SDK documentation or something.
That would be awesome. I really don't want to dig through the CD pile ever again.
on a different subject - now that we're splitting the class from document declarations --- are we incurring any kind of performance penalty with all the extra concat'ing?
The concat itself shouldn't be a hit - the only real performance penalty is on the second lookup into the declaration type dictionary, and that's minimal in that it only has 30 some keys.
A Union would be a different story.
TBH, I don't like this....
: base(qualifiedName,
what's what?
The whole namespace is like that.
2:17 AM
though arguably most of those should go away when we have a proper type hierarchy
Probably not - the resolver is shoving a crapload of information into those classes.
however, with the fact that we have 5 boolean arguments, I think it's in our best interests to use named arguments.
because eyeballing it, I have no idea what's what.
Ctrl, Alt, Space
i'm not in VS
i'm looking at it on GH
No, it's Ctrl, Shift, Space.
2:19 AM
on VS, it's a bit less of a problem but still.
In GH, it's middle-click to open a new tab. :-P
#EnableMyLazy, man!
The ctor argument passing is a hell-hole all the way around.
oh yeah. this won't be fixed in single PR. That's why I think named argument would be a good bandaid until then
Dividing it out into subclasses for everything would actually make most of those go away though.
The majority could simply be hard-coded.
That's a crap-load of work though.
2:22 AM
I'm missing something - we aren't setting the DeclarationType.Document?
It's still in the class ctor.
It has to stay that way until we have a UserFormDeclaration.
ah ok
At that point, they simply turn into public override DeclarationType => DeclarationType.Document, etc.
the PR looks fine to me, other than the named arguments nitpick
It's an OCD thing. They get dimmed in VS because they're not required.
2:25 AM
yeah I know.
in my case, though, it has helped a lot when dealing with silly methods that wants 10 parameters and you never ever use the third to ninth parameters
[rubberduck-vba/Rubberduck] build for commit a23f1b3f on unknown branch: AppVeyor build succeeded
because skipping it with commas is too easy to mess up and it just end up running... either maybe a RTE or maybe a weird bug
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4845?src=pr&el=h1) Report
> Merging [#4845](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4845?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/1e3e615cc1426c9817e1349ac6f27ee5678fca56?src=pr&el=desc) will **increase** coverage by `0.03%`.
> The diff coverage is `94.9%`.

@@ Coverage Diff @@
## next #4845 +/- ##
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4845?src=pr&el=h1) Report
> Merging [#4845](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4845?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/1e3e615cc1426c9817e1349ac6f27ee5678fca56?src=pr&el=desc) will **increase** coverage by `0.03%`.
> The diff coverage is `94.9%`.

@@ Coverage Diff @@
## next #4845 +/- ##
[rubberduck-vba/Rubberduck] build for commit a23f1b3f on unknown branch: 64.46% (target 0%)
WTH does that tag twice?
it's a double coverage?
2:28 AM
Ahhh.... it adds the comment, then edits it.
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4845?src=pr&el=h1) Report
> Merging [#4845](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4845?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/1e3e615cc1426c9817e1349ac6f27ee5678fca56?src=pr&el=desc) will **increase** coverage by `0.03%`.
> The diff coverage is `94.9%`.

@@ Coverage Diff @@
## next #4845 +/- ##
Again? Really?
but what is the edit?
3:09 AM
> The key to get this to work is the CoTreatAsClass API that adds a TreatAs key to the original key with a value that points to the alternate CLSID. This is all-or-nothing proposition, though: there’s no way to redirect certain requests only, but any COM activation request (such as through CoCreateInstance) are redirected to the TreatAs CLSID instead.
> This mechanism provides a way to redirect one CLSID to another CLSID. The MSDN documentation calls this ability "emulation", as one class can (try) to emulate another. This opens up the possibility to redirect one class to another without any need for injection and method-based hooking.
I have a feeling I'm about to break some sh!t.
I want rename events for Worksheets and Workbooks...
from the Excel's side?
that woudl be useful from Access, too.
It should be possible to get a ICallInterceptor attached, then register as a sink.
That would let RD listen in on all the host COM traffic.
and thus back to host independence
3:17 AM
There's ~0 documentation of the APIs though.
@MathieuGuindon did you reimplement the ShowIntellisenseCommand somewhere else?
trying to remember which case causes the quick info to not show
it's the rewriting of the line being edited that does this
ah, Msgbox(
3:19 AM
Huh. That's the API set that Moq uses.
link to moq's usage?
It's in CastleProxyFactory.cs.
Rather, it was.
It looks like they re-implemented it.
/// <inheritdoc />
public object CreateProxy(Type mockType, ICallInterceptor interceptor, Type[] interfaces, object[] arguments)
	if (mockType.IsInterface) {
		return generator.CreateInterfaceProxyWithoutTarget(mockType, interfaces, proxyOptions, new Interceptor(interceptor));

		return generator.CreateClassProxy(mockType, interfaces, proxyOptions, arguments, new Interceptor(interceptor));
	catch (TypeLoadException e)
		throw new ArgumentException(Resources.InvalidMockClass, e);
FWIW, I don't think that's Moq
but rather their implementation of Castle's DynamicProxy
so might be worthwhile checking out the dynamicproxy
#TIL MdiChildHack does not like being spied upon.
3:34 AM
Hmmm... most of that looks like managed code.
I'm not seeing how to get the call frames.
Might have to pull the repo - tracing it on GH is not fun.
3:49 AM
Huh. EasyHook already has me covered.
hmm didn't we discuss about EasyHook + COM?
Not that I remember.
Possibly in the context of fakes.
I'm more interested in just inspecting traffic.
Mar 14 '17 at 3:37, by Comintern
Hmmm... What about hooking CoGetClassObject?
We're already getting those events (albeit indirectly) from the host. I'm more interested in being able to raise events when properties are changed.
That would (among other things) let us do a killer Properties window.
I was looking at #4789 in particular.
Right now, when a document name changes, we don't pick it up until the reparse.
(the Name name, not the CodeName)
Ok, I'm doing something stupid, I think. I'm trying to get the firehose going; i had symbols defined but it still doesn't light up the #if block.

« first day (1735 days earlier)      last day (962 days later) »