« first day (2510 days earlier)      last day (24 days later) » 

12:01 AM
@IvenBach hmm something's wrong
 
I've looked at the test and from what I can tell the extern modifier is calling docs.microsoft.com/en-us/windows/win32/api/oleauto/…. Is there a way to provide another argument to specify the return type?
 
RELOAD!
[rubberduck-vba/Rubberduck] 12 commits. 1 opened issue. 1 closed issue. 9 issue comments. 3000 additions. 4371 deletions.
[Minesweeper] Games Played: 103, Bombs Used: 78, Moves Performed: 14771, New Users: 18
 
if you do the test in your VBA, what is the output?
 
How do I test in VBA?
 
I assume you are using en-US, albeit with customized date format
?CDate("1899-12-31 11:00:00")
 
12:04 AM
?CDate("1899-12-31 11:00:00")
1899-12-31 11:00:00 AM
 
supposed to return 12/31/1899 11:00:00 AM....
 
Supposed to.
 
hmm it's the separator that's the problem
 
This is me we're talking about.
 
you are using -, not / as the separator, right?
I guess the LCID does not account for separator....
just as a test, change your format to be YYYY/MM/DD temporarily. Does it pass?
 
12:06 AM
yyyy-MM-dd produces 1899-12-31 11:00:00 AM
yyyy/MM/dd produces 1899/12/31 11:00:00 AM
 
<rant>What is the point of letting me specify the LCID if it doesn't do diddy for the separator?</rant>
 
yeah if you look, the 2nd argument specify en-US
 
correct.
or de-DE
But it's only the en-US which are failing.
 
12:09 AM
So the argument en-US should-in-theory return a non-separator dependent version?
Yeah. The second one suffixed with ex is being called.
 
no, in theory, it should return 1899/12/31 regardless of the current window formats
but that assumption is obviously violated
because you have the freedom of changing the separators, that still applies even if I explicitly specify that the LCID be en-US
So, I think that test is junk
thank you, Mr. Gates!
 
@this this means that en-US should always return YYYY/MM/DD with the / as separators regardless of whatever I happen-to-choose as my separators?
 
Yes, that was what I expected
but that assumption is not true
as you just proved
which is also why the de-DE test passes even though you are obviously not on a german computer.
 
Lack of tests is evidence of no coverage. Evidence of tests does not indicate accurate coverage.
As proved by changing one thing.
 
Note that de-DE even uses . as the separator
 
12:13 AM
Ah...
 
so it's bizarre. It seems to respect the other locale's different separator but unless the user has customized it to be something else, then....
Mr. Gates, you're a piece of work!
 
I'll make a mental note that these 3 tests will fail.
Work time done. Heading home.
 
those tests will have to be revised . can't have it blowing up on our contributors' preferred formats.
may have to be made Explicit or something, IDK.
 
12:40 AM
        var qualifier = base.GetQualifier(reference, finder);
        var document = (Declaration.GetModuleParent(reference.ParentNonScoping) as DocumentModuleDeclaration);
        if (document != null)
        {
            if (document.SupertypeNames.Contains("Workbook"))
            {
                // inside a workbook module: result if unqualified.
                return qualifier == null;
            }
            // inside a worksheet module: no result; result anywhere else.
            return !document.SupertypeNames.Contains("Worksheet");
note to self: stick to "no LINQ in inspections" rule-of-thumb, it's a good rule.
now base.GetQualifier probably belongs ...elsewhere..
argh still 2 tests failing
 
12:51 AM
oh I'm an idiot
    protected override bool IsResultReference(IdentifierReference reference, DeclarationFinder finder)
    {
        var qualifier = base.GetQualifier(reference, finder);
        var document = (Declaration.GetModuleParent(reference.ParentNonScoping) as DocumentModuleDeclaration);
        return qualifier == null || (document?.SupertypeNames.Contains("Workbook") ?? false);
    }
simple as that
hopes they're all green
build ducky build
1 red
hm that should be working
I think we have a winner
        var qualifier = base.GetQualifier(reference, finder);
        var document = Declaration.GetModuleParent(reference.ParentNonScoping) as DocumentModuleDeclaration;
        var isWorkbook = document?.SupertypeNames.Contains("Workbook") ?? false;
        return !isWorkbook && qualifier == null;
ok, missing the Application qualifier case
        return !isWorkbook && qualifier == null || qualifier.SupertypeNames.Contains("Application");
re-runs tests
looks so right it can't be wrong
build ducky, build
ok it needs to be host workbook aware
        var qualifier = base.GetQualifier(reference, finder) as ClassModuleDeclaration;
        var document = Declaration.GetModuleParent(reference.ParentNonScoping) as DocumentModuleDeclaration;
        var isHostWorkbook = (document?.IdentifierName.Equals("ThisWorkbook", System.StringComparison.InvariantCultureIgnoreCase) ?? false)
            && (document?.SupertypeNames.Contains("Workbook") ?? false)
            && (document?.ProjectId.Equals(reference.QualifiedModuleName.ProjectId) ?? false);
still clear I think
now remove the assumption about the host workbook name
hm, NRE
        var qualifier = base.GetQualifier(reference, finder) as ClassModuleDeclaration;
        var document = Declaration.GetModuleParent(reference.ParentNonScoping) as DocumentModuleDeclaration;
        var isHostWorkbook = (document?.SupertypeNames.Contains("Workbook") ?? false)
            && (document?.ProjectId?.Equals(reference.QualifiedModuleName.ProjectId) ?? false);
        return !isHostWorkbook && qualifier == null || (qualifier?.SupertypeNames.Contains("Application") ?? false);
attempt #78542
build ducky, build
#nogood
clearly I'm doing it wrong.
 
1:28 AM
What are you working on Mug?
 
Fixing the ImplicitActiveSheet inspection that I broke lol
 
1:56 AM
 
 
1 hour later…
3:08 AM
want thoughts on whether this seems a sensible thing to. I'm writing a visitor for type API to abstract out the mechanics of collecting information from type infos so that we can re-use the information for different purposes. A type info can have an implemented type info that may need to be visited in turn, so I have this:
public interface ITypeInfoVisitor
{
    ...
    void VisitTypeImplementedTypeInfo(int href, ITypeInfo implementedTypeInfo, out bool visit);
    ...
}
basically the consumers get to decide whether they want to visit the implemented type info:
            ExecuteVisit(v =>
            {
                v.VisitTypeImplementedTypeInfo(href, implementedTypeInfo, out var visit);
                if (visit)
                {
                    new TypeInfoWalker().Accept(_typeLib, _index, implementedTypeInfo, Visitors);
                }
            });
wondering now why can't it just return a bool instead of out var bool.
 
3:36 AM
perhaps ITypeInfoVisitor<T> and return T?
not seeing why the interface method must be void?
whether it's in the return type or in an out parameter, it's still in the contract
 
4:03 AM
yes I think I was following the example too rigidly. in the examples, visitors usually have void methods
furthermore, the examples usually imply that visitors don't get to decide how they will visit; they just are visited. In this case, I don't want to visit something if they don't care for it.
also, I'm actually inclined to leave it as a out because this is a side-effect, not a direct result of the VisitImplementedTypeInfo -- what does returning false means to a VisitImplementedTypeInfo ? ShouldVisitImplementedTypeInfo also sounds silly and doesn't address the fact that information about the implemented type info are returned independently of the type info (because they pertain to the containing type info)
 
tbh I haven't played enough with visitors to fully even grasp how they work
hoping that compiler dragon book will help with that :)
 
I'm just winging it, man!
 
:)
ugh still 1 test failing
that inspection is testing me
wait, is this a soviet russia joke
 
that can work as one, too.
 
4:26 AM
been playing "fix one, break three" for a few hours now
I feel like a slot machine junkie watching my tests turn green green green RED
gah again
 
whats the test?
 
the one that expects no result when the qualifier is Application in a workbook module
 
this is an obvious question but... does the test project have a referenced excel library and the Application is declared as a global variable?
 
yep. no the problem is that I'm breaking my teeth trying to get the qualifying declaration
Application only has 660 matches :)
so I figured hey not so bad, I know it's qualified if there's any matching candidate
and that worked
but then Application is special-cased
so I needed a way to both resolve the qualifier and ...dammit
so now it's green
and it's the Names test that's red
and that's been the dance
I don't understand why the Names test is red but the Sheets test is green
and that should be a clue
names is lhs, sheets is rhs
 
hmm should we be special casing? I think I asked about that before given that it's an appobject so therefore resolver should provide a global variable declaration for it automatically
 
4:41 AM
bug is that I'm returning 600+ declarations when Names matches so it's treated as qualified, but it really isn't
 
one more possibly nutty question... if names is on lhs, is it somehow getting caught by the modifications you made to the resolve to find the ancestor and thus the 600+?
 
no no I didn't touch the resolver
I think I'm just missing a condition
 
5:11 AM
preliminary "bingo"
builds
one [other] test fails
 
5:37 AM
OMG THEY'RE ALL GREEN
 
implementation cannot be right though, it just doesn't look right
but I'll take it over a bunch of failing tests
bed time now
 
6:02 AM
[rubberduck-vba/Rubberduck] build for commit ae9e8070 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
 
1 hour later…
7:30 AM
[rubberduck-vba/Rubberduck] build for commit 50d5e5a6 on unknown branch: AppVeyor build succeeded
 
 
1 hour later…
8:43 AM
Just discovered twinBasic thanks to last post on RD blog. Incredible...! The only thing I am a bit disappointed is I cannot test own dll's (unfortunately Office x64 here) :(
I wanted show some new possibilities using twinBasic on main Excel's internet board in my country, but it seems I must switch to x32 first
 
8:56 AM
@this I misremembered how we treat with blocks in the resolver. It should be easy to put the qualifying qualified selection on identifier references. Then, one can get the corresponding reference can be acquired from the declaration finder.
If the with block variable is an expression, one has to be a bit cautious, though.
That is actually also true for member access expressions.
@MathieuGuindon Does your fix for the inspection work for access on user-defined functions and properties returning a worksheet?
 
9:23 AM
Btw, I would like to say that what they have done to rust is amazing. They have const generics for integral types now, i.e. you can define types generic over a concrete integer. E.g. one can define an n-dimensional vector generic on n.
 
 
1 hour later…
10:36 AM
 
11:09 AM
@IvenBach You're in Californistan, yet you're allowed into the office???
 
11:55 AM
@M.Doerner it should but I don't want to say "yes" without a test for it, the implementation is rather frail tbh.. Should be recursive but currently isn't.
 
 
1 hour later…
@M.Doerner it does, yes :)
 
1:47 PM
Good
Before we release, we should do a round of translations, I guess.
 
oh shoot, I forgot those
you're right, we should
 
[rubberduck-vba/Rubberduck] build for commit ad162f1a on unknown branch: AppVeyor build succeeded
 
wait... isn't the version up to 2.5.2 from 2.5.1 as of yesterday(?) but you're still talking release? Isn't it a bit late to shut that gate? ;)
 
preview build is bumped yeah
users that don't have "check for new pre-release builds" enabled won't be notified of 2.5.2 until it's merged into [main]
@SonGokussj4 FYI we'll be releasing soon-ish, no more new resource keys are being merged in for v2.5.2; do you think you can have a translation PR soon?
 
ah, gotcha. What is this main of which you speak? :)
 
2:01 PM
@FreeMan fka. master
 
Oh... "fka"... took a sec...
 
2:17 PM
[rubberduck-vba/Rubberduck] build for commit 16fb51c4 on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] retailcoder pushed commit 9bdeb605 to next: Merge branch 'next' of git://github.com/rubberduck-vba/Rubberduck into fixStringSheet
[rubberduck-vba/Rubberduck] retailcoder pushed commit ce58c142 to next: updated installer resources
[rubberduck-vba/Rubberduck] retailcoder pushed commit 7a08ff03 to next: removed ducky icon from item groups
[rubberduck-vba/Rubberduck] retailcoder pushed commit 1a09a8da to next: added test and ensured document module supertypes are loaded
[rubberduck-vba/Rubberduck] retailcoder pushed commit b589d880 to next: fixes broken ContainingSheet/Workbook implicit reference inspections.
[rubberduck-vba/Rubberduck] retailcoder pushed commit ae9e8070 to next: all green?
[rubberduck-vba/Rubberduck] retailcoder pushed commit 50d5e5a6 to next: all green.
[rubberduck-vba/Rubberduck] retailcoder pushed commit ad162f1a to next: added more tests
[rubberduck-vba/Rubberduck] retailcoder pushed commit 16fb51c4 to next: added more tests
Merge pull request #5737 from retailcoder/fixStringSheet

Updates installer resources, adds more tests for implicit active/containing worksheet/workbook Excel-specific inspections.
 
Loving the commit notes!
 
3:17 PM
looks good!
 
indeed!
 
need The Preened Edition™ in there
also like the softer background as well! Nice job, @MathieuGuindon!
 
3:39 PM
hm, UnassignedVariableUsage only looks at variables that are never assigned
we have nothing that picks this up:
0
Q: if statement where object variable or with block variable not set

jimbo10583getting above error at line : If lst.ListColumns("ExecBroker") = "ABCD" then .. not sure how to set or use the dimension correctly.. thanks in advance for any help. Sub processPershingManual() Dim lst As Excel.ListObject Dim lstRow As Excel.ListRow Dim ListColumns As String Dim rngHedgeServeTe...

(being skipped because used as a For Each loop variable)
 
Isn't that technically a use of uninitialized variable?
 
IIRC it's waiting on the code path analysis work that I started in... checks notes ...gosh it's just as old as the Moq PR
 
which also leads to question about whether we should flag the use of uninitialized primitive variables, too, I guess.
 
Dim l As Long : Debug.Print l <== is l "uninitalized" ?
0 may be a desired value but that's too implicit and thus could be smelly.
 
3:43 PM
I like
 
that's not the case with an object variable since Nothing is definitely not a value you want to be working with.
 
with proper CPA it could also flag Boolean functions that return False because lack of return value assignment in all code paths
 
so I guess that needs to be 2 separate inspections with different severity.
Yes!
I have made that boneheaded mistake way too many times...
 
@this Love the fixed font. I read that as Dim (ell) as Long : Debug.Print (one)
l (ell) 1 (one)
That, right there, is precisely the bug that had my dad running in circles for 3 weeks trying to track it down. (Way back when he was working on his Master's degree in the 70s)
 
it’s a slippery eel, that one.
 
3:53 PM
slippery as ell!
3296 3297 tabs open!
:D
 
i wonder why it’s even an idiom. did someone actually try to grab an eel with bare hands?
and possibly got electrocuted in the process but it didn’t make ut to the idiom. the idiot, maybe.
 
slime eels and electric eels aren't the same thing. I don't think...
 
they all look the same tome.
 
they look like books?
 
Very heavy, large ones at that
 
4:10 PM
@FreeMan please don’t become another Skiwi. We will intervene.
 
@IvenBach but was Skiwi intervened?
 
he was too far gone ;)
 
Kaz
4:24 PM
@Vogel612 Actually, I think Skiwi is only around 1,000 tabs right now...
 
4:37 PM
@IvenBach nah, that was just my way of welcoming him today. I'm pushing it to have 40-50 tabs open, especially now that Firefox has banned all the decent tab managers.
(well, I haven't looked lately, but my favorites went by the wayside a while back when their internal changes eliminated a lot of my preferred extensions)
It's just that nobody noticed that my comment appeared immediately after his avatar dropped into the list. ;)
 
5:31 PM
Uhhhh..... Any reason why VS would start considering every file to be a binary file?
 
#drunkVS
 
:derp: #Words... I meant Git.
 
#WordsAreHard
 
5:55 PM
looks like having a different revision# in the version number is having an effect on what version people are downloading: past 2 hours saw 5 downloads of 2.5.2, 0 of 2.5.1
wondering whether or not we should version-bump [next] preemtively
 
> First, you’ll use this technique to solve one of the most annoying problems known to humanity: version-controlling Microsoft Word documents. Everyone knows that Word is the most horrific editor around, but oddly, everyone still uses it.
2
 
@MathieuGuindon wouldn't that be the pre-release download?
 
yep
usually the pre-release downloads are much slower than the not-pre downloads
the .2 seems to stick out and trigger some "hey this version is much newer than the other download" response that doesn't happen with the build numbers alone (or the actual release dates lol)
gosh I need to redo that home page. I can't stand that damn carousel anymore
 
@MathieuGuindon Hi Mat, yeah, I've accidentally seen your Twitter post just now and checked the StackExchange site for notifications (which I periodically forget to visit).
 
I'm always accidentally on Twitter too :)
@SonGokussj4 please don't feel rushed or obligated, but your contributions are very much appreciated!
 
6:11 PM
Would it be possible to notify me in any other way? email/messenger/github/anything. :) StackExchange is not a reliable way.
 
sure.. SE chat ping is just me being lazy!
 
why not translators@github.com DL? (I vaguely remember github having groups which can be also an email)
 
Don't tell me not to rush. That's really dangerous :-D Quite the opposite is working better.
I don't have VS installed (because last time I couldn't build RD with it.) So will try to install today and start with translations.
 
@SonGokussj4 note that you should have 2019
 
2019 downloading right now.
Should I install some .NET components or stuff, or just default installation?
 
6:17 PM
IIRC just C# desktop should be sufficient
but TBH, I have too much.. I also have C++ and some other stuff....
 
There is .NET desktop development pack. Oki, how that suffice.
 
yeah, using package is easier.
 
@IvenBach Reading forum.uipath.com/t/xaml-files-are-recognized-as-binary-by-git/… indicates .git/info/attributes file was somehow modified and contained *.json binary and *.xaml binary. ¿How that happened? NFI. It's fixed apparently.
 
installing by components will take you ages.
 
@MathieuGuindon So what's your preferred way?
 
6:21 PM
well SE chat is very easy for me, since that browser tab is pretty much locked in place. I'll ping you on GitHub next time :)
 
@MathieuGuindon I've downloaded two .2.x builds
 
Nice. Thanks. That should notify me through my mail.
 
7:07 PM
[rubberduck-vba/Rubberduck] build for commit 9679d9c2 on unknown branch: AppVeyor build succeeded
 
 
1 hour later…
8:31 PM
Would it be ok to add a QualifyingSelection to IdentifierReference even though it is only ever set for member and with member accesses?
 
I would think so - unless you intend to expand IdentifierReference into an inheritance hierarchy?
guts think member access accounts for a lot of the identifier references anyway... wouldn't they
 
It is only the selection, but that is a struct holding onto a QMN.
You will have to use the DeclarationFinder to actually get the qualifying reference, if there is any. (The member access might be on an expression.)
 
that's fair enough
we can't store the Declaration because it's not resolved yet at that stage?
 
Let's see whether I can get the right selection.
It is, but that comes with other problems.
For one, there might not be a declaration.
 
cache invalidation
 
8:37 PM
Second, ^
Actually, getting the declaration would be complicated since there might not be a reference yet.
 
I might have missed it but how does having the selection help with finding the related reference?
 
there's a finder method to locate things by selection
 
The DeclarationFinder stores identifier references by qualified selection.
 
aha, and that way we avoid the need to resolve the related declaration
 
You just have to be cautious because you will get multiple if the selection points to an expression.
You get all contained references.
 
8:40 PM
would be nice to just get the immediate parent though
 
That is the selection I am aiming at.
 
other than the translations, do we have any blockers for 2.5.2?
 
member accesses should not be too hard; with member accesses might be a bit more involved regarding the final parent.
I do not think so.
 
I agree. I skimmed through PR quickly and they all look like new features rather than bug fixes
 
the blog post is already drafted
 
8:44 PM
I very much appreciate that we will release soon.
 
I'll start the translation (FR) PR tonight
 
Then, I can finally update my ducky at work.
I want my dnd for folders.
 
sorry for rushing sloppy commits lately btw
 
at least you weren't corrupting VBA projects. ;-)
 
It's ok. Just give people the opportunity to review.
 
8:49 PM
@M.Doerner yeah about that... did you eyeball the base method I put in the base reference inspection class? It's (poorly) doing essentially what you're about to do
 
No, I have not looked at it so far.
In the resolver, I actually already have everything right there in the for of a resolved lExpression. I just have to record the data.
 
Makes sense
 
9:07 PM
just wondering - I want to allow ability to visit only a specific type info or a entire type library, so I'm making a ITypeLibVisitor and ITypeInfoVisitor. However, when visiting the type library, it might be the case that it wants to visit the type infos. That is an implementation detail that should be delegated to the visitor class, right? I'm thinking of having this:
public interface ITypeLibVisitor
{
    ...
    void ProvideTypeInfoVisitors(IEnumerable<ITypeInfoVisitor> visitors);
    ...
}
if they are provided, the TypeLibWalker will then create the TypeInfoWalker and proceed to visit them via the 2nd walker.
 
9:32 PM
Hm, adding the selection is much more annoying than I thought. It is not really clear to me what is the correct selection in quite a few cases. E.g. what to use for an index expression parent?
Is there a real benefit to getting the declaration, except easier cache invalidation?
Adding the qualifying declaration is super easy.
 
@M.Doerner token index?
oh
 
Argh, I meant to getting the selection/identifier reference.
 
I know this is not in the scope but having declarations/references instead of selection means that rewriting wouldn't necessarily require invalidating the parser cache just because the offsets in the module change.
 
big if true
:)
 
Nah, you always have to rewrite if the selection changes.
The point is that the qualifying identifier reference is always in the same module.
 
9:39 PM
expression/statement, even
 
[rubberduck-vba/Rubberduck] build for commit 34dc9f48 on unknown branch: AppVeyor build succeeded
 
I'm thinking of the rewrites where new lines are added or lines removed above the expression and thus do not change the contents of that particular expression. Right now, we have to invalidate the entire module if there's been a rewrite even if it's only one character change.
 
It would be possible with a bit of rework (not problematic) to get an identifier reference or its selection if the immediate parent has one.
However, that does not solve the problem for expressions.
We will have to reparse entire modules until we ditch Antlr.
 
or fork it to make token positions mutable lol
yikes no
 
fwiw, ANTLR is on 4.9.2 We're on 4.6.4....
 
9:44 PM
@M.Doerner depending on how much extensibility Wayne is giving twinBASIC, Rubberduck could actually potentially, eventually, ...do exactly that
> Powered by twinBASIC
 
Sharwell's is now on 4.6.6
 
we'd become a ..front-end lol
actually the end game would be ducky becomes a giant "open in VSC" button
dayum
so 4.6.6 to our 4.6.4 then, no?
 
I think the ducky should stay in the VBE. Otherwise, there is nothing anymore for business users.
Business users typically are not allowed to install VSC.
 
what's stopping us from providing a twinBASIC VBIDE add-in?
But to be realistic, though, that probably won't happen until next year or so. tB needs to grow some more before it can start building solutions on par with C#, I think.
 
9:48 PM
Well, and then I guess there is no equal substitute for WPF.
 
well you could implement it in tB.... :)
should be easy, right?
 
I was kidding, but basically when twinBASIC compiler matures, it could become our LSP
assuming full-on extensibility & lots of other things, but...
we'd probably need #AvalonEdit first
 
Comming back to the references, unless one does obscure trickery, the qualifying bit of a member access in VBA can really only be a simple name expression, an index expression or a member access expression, right?
In these cases, I can get the corresponding reference and attach it to the one for the accessed member.
BTW, the obscure thing I was thinking about is a parenthesized expression containing something representing an object with an object returning default member.
 
UDT and Enum member accesses are also member access expressions, yeah?
 
Yes, they are.
After binding, with member accesses are also ordinary member access expressions.
The lExpression just lives somewhere else in the module.
Hm, I guess I can also have dictionary access expressions, but I can get the reference for those as well.
I think I will give it a try tomorrow.
Now, TTGTB.
 
10:37 PM
'night!
 
10:55 PM
#FunFact the 10th and last listed article on the news page is the release announcement for 2.5.1, so the announcement for 2.5.2 will bump it off the list
 

« first day (2510 days earlier)      last day (24 days later) »