« first day (1950 days earlier)      last day (1230 days later) » 
00:00 - 16:0016:00 - 00:00

12:01 AM
RELOAD!
[rubberduck-vba/Rubberduck] 31 commits. 5 closed issues. 19 issue comments. 5973 additions. 2762 deletions.
[Minesweeper] Games Played: 82, Bombs Used: 64, Moves Performed: 11244, New Users: 14
 
@M.Doerner Do you mean like a nested Dictionary -- dict(1)(1)?
Or something that returns itself from the default member?
 
12:36 AM
[rubberduck-vba/Rubberduck] MDoerner pushed commit 28039352 to next: Move ObjectWhereProcedureIsRequiredInspection into the correct folder
Introduce inspections for indexed default member accesses

There are three versions: IndexedDefaultMemberAccessInspection for ordinary default member accesses, IndexedRecursiveDefaultMemberAccessInspection for those requiring a recursive default member resolution and IndexedUnboundDefaultMemberAccessInspection for those on Object and Variant variables.
Extend ExpandDefaultMember to indexed default member access inspections

Specifically, IndexedDefaultMemberAccessInspection and IndexedRecursiveDefaultMemberAccessInspection can be fixed using this quick fix now.
Add inspections for implicit default member accesses

These do not cover procedure coercions, which are covered separately.
In particular, we have ImplicitDefaultMemberAccessInspection for ordinary not parameterized ones, ImplicitRecursiveDefaultMemberAccessInspection for not parameterized ones that require a resolution via a chain of default members and ImplicitUnboundDefaultMemberAccessInspection for unbound not paramterized ones.
[rubberduck-vba/Rubberduck] MDoerner pushed commit b7d295cf to next: Make ExpandDefaultMemberAccessQuickFix fix implicit default member inspection results
Remove ImplicitDefaultMemberAssignmentInspection

This is superseded by the new implicit default member access inspections.
[rubberduck-vba/Rubberduck] MDoerner pushed commit ff60090e to next: Improve example for implicit default member access
[rubberduck-vba/Rubberduck] MDoerner pushed commit 7223c41c to next: Improve meta for default member inspections
Merge branch 'next' into DefaultMemberAccessInspections

# Conflicts:
# Rubberduck.CodeAnalysis/Inspections/Concrete/ImplicitDefaultMemberAssignmentInspection.cs
Merge pull request #5166 from MDoerner/DefaultMemberAccessInspections

Default member access inspections
 
@Duga it would be nice if you could pick up the PR review comment in addition to the code comment....
 
[rubberduck-vba/Rubberduck] BZngr pushed commit b1d5661a to next: Incorporated InspectionTestsBase and test cases
[rubberduck-vba/Rubberduck] BZngr pushed commit 864734c1 to next: Added eval of annotated-only interface classes
[rubberduck-vba/Rubberduck] BZngr pushed commit 5583bcb8 to next: A little better leveraging of InspectionTestsBase
[rubberduck-vba/Rubberduck] BZngr pushed commit cc2a0adb to next: Merge branch 'rubberduck-vba/next' into 5143_FalseNegative
[rubberduck-vba/Rubberduck] BZngr pushed commit 728c627b to next: Modified Annotation predicate
Merge pull request #5193 from BZngr/5143_FalseNegative

ImplementedInterfaceMemberInspection evals Annotated-only and implemented interfaces
[rubberduck-vba/Rubberduck] build for commit 2774943c on next: AppVeyor build succeeded
 
 
2 hours later…
3:03 AM
> I've modified the logger message per the suggestion above in addition to throwing an `OperationCanceledException` using the `RefactorFailure_BaseMessage` resource.

I wrote the Suspend-Parser code for `RenameRefactoring` based on what I found in the `ExtractInterfaceRefactoring`. The above comments would apply to the `ExtractInterfaceRefactoring` as well. So, I've modified its Suspend-Parser code in the same manner.
 
@Duga @M.Doerner looking inside the Exceptions folder, there doesn't seem to be anything for suspension failure. Would using RefactoringAbortedException be appropriate? Not sure if a failure to suspend should cause an operation cancellation.
I also wonder why the generic exception classes doesn't use the base message resource as its default placeholder.
 
[rubberduck-vba/Rubberduck] build for commit d4ec435f on unknown branch: AppVeyor build succeeded
 
3:27 AM
@this I looked at using RefactoringAbortedException but was hesitant to modify the exception class (I wanted a ctor that took a message). I'll go back and modify the RefactoringAbortedException class and re-sync...unless you would rather I leave it as-is for now.
 
3:58 AM
TBH I am not 100% sure myself, hence the question to Max. let’s see what he has to say. :). thanks for the PR!
 
 
3 hours later…
6:49 AM
AFAIR, the RefactoringAbortedException is meant to facilitate voluntary aborting an exception, i.e. when the user chooses to cancel on any confirmation. Because of that it is never reported.
The reason to use an exception for flow control here it that it is otherwise very complicated to abort from inside the UI part.
If you want an exception for suspension failure, please add another exception.
IIRC, the refactoring commands only report on subclasses of RefactoringException and rethriw everything else except the RefactoringAbortedExceprion.
 
7:08 AM
When you add a new RefactoringException you will also want to update the failure notifies of the refactorings in which you use the new exception.
 
@ZevSpitz What I meant is a class with a default member returning an object with a default member returning a value, both without parameters.
I am only aware of an example in which the second default member has a parameter, namely ADODB.Recordset.
 
7:57 AM
> So far, we only have one refactoring command in the CE. This is why no `CodeExplorerRefactoringCommandBase` has been introduced so far, in analogy to the other ones for refactorings. Since we will soon have another refactoring command in the CE, we should add that base class.

Unfortunately, this will not be able th inherit from `RefactoringCommandBase` because it already has to inherit from `CideExplorerCommandBase`.
 
 
2 hours later…
10:17 AM
Codelesscode cases are so good: thecodelesscode.com/case/30
 
> One possible option is to make RefactoringCommandBase a protected backing field and delegate work to it. If the field needs to be extended, we might consider creating a nested type deriving from `RefactoringCommandBase‘ and use it for the backing field and hopefully minimize code duplication this way.
 
 
2 hours later…
12:23 PM
@Vogel612 whooosh the sound that one made while going over my head
@IvenBach Wow! FUD - the police's job is done. OMG! OMG! OMG!!! SOMETHING BAD IS HAPPENING!!!! Where is it? We can't tell you What's the situation? We won't tell you Why won't you tell us anything? Just sit there and be terrified "the government" will protect you.
 
12:44 PM
@FreeMan consider numbers
 
I presume the index out of bounds was index = zero and the array is 1-1000. the rest, not so much
 
1:06 PM
@FreeMan No.
The largest value a byte can hold is 255.
If you ask for the item at index 256, what happens?
Sometimes, it'll wrap around to 0 (or -255, if you have a signed byte).
Sometimes it'll throw an exception value-too-large.
 
ah, gotcha. makes sense now.
 
Wait, I made a mistake there.
An unsigned byte goes to 512, I think, so that's a signed byte, and would wrap to -256.
I forgot the -0 value shift :)
 
1:21 PM
Um, no. A byte is 8 bits. That's 2^8 = 256 possible values. A byte by default is unsigned, unlike all other integers which are signed by default. Were it signed, it would be -128 to 127.
Makes me wonder why the little inconsistency of not considering byte signed. We get uint, ulong, but sbyte because of that.
 
LOL.
Shows how often I use a byte.
I honestly don't think I've ever used one.
> A byte by default is unsigned, unlike all other integers which are signed by default.
I did remember that bit.
 
I don't think I either. I've heard that using a byte actually can be less effective than just using an int, but never actually tested the claim.
 
@this I'm sure it's something to do with backwards compatibility, and bytes being used extensively at the hardware level.
 
@Duga The RefactoringCommandBase just unifies the commands and forces the subtypes to have the dependencies expected for the general setup.
 
Probably an abstraction over some hardware thing that can't actually go negative.
And then the higher-level languages came along and just treat it as another number.
 
1:30 PM
Yeah. There's an answer on SO that goes along the similar lines:
10
A: Why bytes in c# are named byte and sbyte unlike other integral types?

supercatThe reason a type "byte", without any other adjective, is often unsigned while a type "int", without any other adjective, is often signed, is that unsigned 8-bit values are often more practical (and thus widely used) than signed bytes, but signed integers of larger types are often more practical ...

(technically that's not really a C# question, since that's a convention that existed before the C# but the answer linked does include historical info)
 
> I use the TODO-List very much.

But I have the problem with getting it. It seems to be the only way for getting the TODO-List is clicking on Pending/Refresh.

Pending/Refresh creates not only the TODO-List but also the code-database.

So there is my problem:
As rubberduck uses excessive amounds of RAM when creating the code-database ms-access usually crashes soon after clicking "Pending/Refresh" because of "Out of memory".

As I can see it there are several solutions to my problem:
 
@this Huh, who'd've guessed?
See, this is why having at least a rough knowledge of the broader field helps :D
 
@M.Doerner Right. I was thinking more about managing the future changes that may be necessary to the RefactorCommandBase. If the CodeExplorerRefactorCommandBase does not use the RefactorCommandBase, it would miss out on the future changes. It might be unnecessarily complicating things, though.
@Hosch250 Yep! All those tidbits contributes to the hockey stick.
@Duga is a annotation-only parsing really practical?
 
FWIW, I was thinking over the problem of RD parsing.
I think I figured out how to parse at the proc level.
Kind of...
I still haven't figured out calculating the selections based on the file locations from the "updated, but not updated" parse tree.
Although, I think we could do like Roslyn does and just figure it out based on the offsets.
 
Isn't that basically what ANTLR has as Interval?
I can't remember, however, whether the rewriter updates the interval.
 
1:43 PM
Yeah, and no, it doesn't.
It doesn't affect the unchanged nodes.
It's basically an insert/removal operation.
Basically, my idea is we listen for the typing.
The VBE API, IIRC, tells us which proc they are typing in (or we can use the API to get it, or something).
I forgot how exactly that works.
Anyway, we grab the text for just that proc from the VBE and get a parse using just that, and instead of asking for the root node, we go up to the next level node.
And then we get the updated parse node and replace it in the existing tree.
And then we remove that node and its children from the declarations and resolve declarations on that node.
And then the same for the references.
Remove any references in that location, and re-calculate references just for that block.
There's one piece that could be a little bit problematic.
That's references to a declaration in that block.
 
Yeah that would work. I'm more concerned about references, though. Right now, they are module to module references and I think we only resolve them at module level.
 
As in, they manually rename the sub, we'd have to 1) check if we can re-resolve the reference back.
And then 2) if we can't, mark it as unresolved.
Yeah.
But really, we need to change that sooner rather than later anyway, if we want to go this route eventually with Avalon
 
Yeah. Changing the signature would be other case. That means we need to detect changes made to the certain elements and mark it as module change rather than procedure change.
IMO, procedure changes should be limited to only inside the body
which is the most typical case (I hope)
Avalon or no avalon, we do need it to be more granular.
 
There's only two further problems here, LOL.
#1, I can't work on RD at the moment, and #2, I'm scared to touch that resolver :D
 
RE: #2 you're not the only one.
RE: #1, as a workaround, you could exclude the build task and build it by hand
By hand, meaning doing a tlbexp.exe on the Rubberduck.dll manually
 
1:53 PM
I suppose.
 
The generated type library will be missing some features, and you won't get any custom code analyzers running, but that should not prevent you from developing on RD.
I wish I had a easy and quick solution to the build but I don't. :(
 
I swear, though. If I got this actually working, I bet MS would hire me to maintain/update VBA if I asked, LOL.
 
LOL
 
HHCIB? :P
 
I once saw a boy biked his bicycle over trees in front of a full moon, so surely that is doable.
 
1:56 PM
Must've been a little tree.
 
2:18 PM
> If we don't parse the code, we don't know what todo markers are in it...
 
@Duga That's another thing I've been thinking about.
It wouldn't be an issue if we ran out of process, like you are investigating.
And #2, a Mongo DB might lend itself well to this.
 
does it run in memory?
 
If you could run it in-memory.
I don't know if you can, though. That's the problem.
 
If it involves disk I/O, it would be bad, I think.
 
But it would lend itself to it well just by structure/querying.
 
2:20 PM
Last time I researched it, nothing really meets the requirement very well
the one that comes closest is WhiteDB which is too rough around the edge.
 
You can run MongoDB 3 with in memory storageEngine: mongod --dbpath path_to_folder --storageEngine=inMemoryExperiment — Gerardo Hernandez Jul 13 '15 at 16:57
 
experiment?
 
Note that's a 5yo comment.
Well, 4.5.
 
Ah, one more important consideration.... you must be able to use it in userland
if it requires its own install, that's a no go
 
Oh, yeah, it probably would :(
> Does immunity to fear prevent a mummy's Dreadful Glare from paralyzing a character?
 
2:24 PM
It has to be those things: 1) in-memory, 2) zero-install, 3) can be run in-process
 
The pun...
 
LOL
Technically #3 isn't a strict requirement but having that feature helps avoid the overhead of IPC.
And frankly the list of database software that meets those 3 requirements are.... meager.
 
@Duga tempted to reply "feel free to use MZ-Tools, they have an indenter and a todo list too"
putting 99% of our work behind a kill switch that cripples RD is not going to happen
 
@MathieuGuindon would it change things if we were to have the CE parse off the typelib API then benefit from the annotation-only parsing?
In this scenario, we need @Folder and @Interface, which are fortunately context-free and sufficient for CE's needs.
The TODO markers are similarly context free (we only need to store the selection for navigation)
 
I don't think the solution to our memory issues is to introduce a "lame duck mode"
 
2:33 PM
No, no.
That can't be a solution.
We do need LSP or whatever.
However, the CE situation would be a separate solution, no?
 
so, yes - let's definitely look into making the CE work better & faster -- but that's not the proposal here
OP wants a free MZ-Tools
 
Yeah. I'm not sure if CE really wants annotation-only parsing. Implementing LSP means that CE simply just picks up the additional data asynchronously
heck, we can just pick up the @Folder and @Interface using VBIDE API.
IDK if todo markers are as easy. I think that's best done by the parser.
 
@this and then we'd have gone full circle back to v1.0
 
I was considering instant-loading the CE which seems less work than reorganizing the tree once we get folders data?
 
absolutely
apparently OP isn't using the CE though
 
2:39 PM
Yeah, he couldn't even if he wanted to.
 
@this Phone home, your movie wants to hear from you
 
speed dials Barrymore
 
> If we don't parse the code, we don't know what todo markers are in it... also, the last couple of indenter bugs still present, will be *much* easier to address when the indenter uses the parse trees, as is the plan.

So basically, the proposal/request here is to put 99% of our work behind a *kill switch* to essentially cripple the add-in by disabling all the navigation tooling, code inspections, refactorings, ...everything.

I very much understand that memory consumption is an issue (c.f.
> Also -- in case you missed it, [github.com/rubberduck-vba/Rubberduck/issues/5176](there is a open case) to address the memory consumption. You also are more than welcome to help and contribute a PR to address the memory & performance issues.
 
@Duga "#5176" is all you need to link to a GH issue
 
doh, yes. #needMoarCaffeine
 
2:51 PM
hey @Vityata
 
> Also -- in case you missed it, there is a open case ( #5176 ) to address the memory consumption. You also are more than welcome to help and contribute a PR to address the memory & performance issues.
 
83 files changed over 77 commits...
 
@Duga or, feel free to fork the project and cripple your own duck
 
Squashed it down to 1 commit and PRed it just now.
My other new feature, which basically shows aggregate results, is being blocked by the architects.
Apparently new features need to go through them, even if they follow their (highly stupid) "best practices."
 
@MathieuGuindon PETA may not like it.
 
2:55 PM
so be it
ugh. "your tool doesn't work with my 927-forms VBA project" isn't how I was planning to start my day
 
Well, if the ducky is meant to help people out of the legacy quagmire, it'll have to handle those hairy projects.
We shall rise and overcome!
After all, a thousand mile journey begins with a single small step!
We, who are about to quack, salute the emperor!
got plenty of pithy sayings to mangle
 
yes, but it'll have to handle these projects with inspections and nav tools enabled
 
@this LOL, that would make a great sarcastic remark.
Like, immediately giving a quack that's heard around the world and killing the emperor with pure noise.
 
At least we have solutions to explore. It'll take us time but it can be solved.
@Hosch250 LOL. Death by quack has a new meaning now
 
hm, why is #4606 still happening? we are correctly resolving the function call...
 
3:08 PM
@MathieuGuindon Hi :)
 
@Vityata Hi.
What's up?
 
Public Enum Foo
  Apple = 1
  [_Min] = 1
End Enum
Is that legal?
 
why?
 
why not?
 
3:21 PM
why would you want two different names for the same value?
 
note [_Min] is hidden
it's kind of a meta value
 
@Hosch250 pretty much nothing. How are you doing? :)
 
Fine.
 
fair enough, and I suppose that [_min] and [_max] are reasonable values to have as hidden within your enum, but how about:
Public Enum Foo
  Apple = 1
  Banana = 1
End Enum
What's the point? Where would that be legitimately useful?
Just because you can...
 
Just in a weird place of having a new job, not being able to tell my coworkers for another week (because I'm finishing a big project at work and don't want to give notice just yet), and being crazy busy with said project and a couple others that got thrown on me quick.
 
3:23 PM
@FreeMan nope
 
Everything is done, my boss knows I'm on my way out, so they aren't putting any more on, because they know this one has to go right, because we deploy Thursday, I leave Friday, and start my next job Monday, and the project is pretty high impact.
That's why they tossed a couple projects on me quick, though, just to get them done finally.
 
@MathieuGuindon whachamean "nope"?
 
@FreeMan IDK if that ever happened in VBA projects but in Win32 API, it has been the case where there was a value that used to do something but now is moot, so they make it 0x0.
 
@FreeMan nope as in, that's pointless and confusing
 
So now there are multiple deprecated enums all with a value of 0x0?
@MathieuGuindon well, that's what I thought, too.
3 mins ago, by FreeMan
Just because you can...
 
3:26 PM
Note WS_CHILD and WS_CHILDWINDOW have same value
Ditto for WS_TILED and WS_OVERLAPPED
I'm pretty sure that in Windows 9x days there used to be a difference between the WS_TILED and WS_OVERLAPPED but since then they said, "that's dumb" and made it the same
but they can't drop the constant because there might be some application out there compiled against the old header file blah blah blah
Anyway, so that's a problem w/ Win32 API. Is it with VBA projects? I can't imagine it being so.
 
@Hosch250 Hurry and squeeze the last bit of effort out of him while he's still here.
 
Maybe for an add-in that has long history....
 
I was reading through 3424 and that hit me from ThunderFrame's code example.
 
I've used [_Min] and [_Max] now and then.
 
TL;DR: While legal, there's no legit reason to write it that way from scratch. You may end up there over time, though...
 
3:31 PM
Yeah... consider this....
Public Enum Foo
 A,
 B,
 C = A Or B
 D,
 E = C Or D
End Enum
later, after some time, I remove the A from the enum and redfine C as C = B
Oh, my! what a mess!
Pop quiz: what is the value of E before and after?
 
and this is why you don't implement logic in enum types
 
@Duga we're not going to make todo markers work off VBIDE API. not gonna happen.
 
@MathieuGuindon Agreed
 
3:46 PM
FWIW I find this post massively disrespectful for everything we've done, and now I need some nicotine and fresh air.
 
Breathe Mug.
@this Before = 3, After = 1.
 
@IvenBach 3 / 1 of what?
still hasn't his cup of tea yet
 
@this Regarding the enum value.
 
weird - it was highlighting the duga message before
hence my confusion
but now I see it's linking to the correct message
 
How'd I do on my quiz?
 
3:57 PM
I don't think it's right but don't have VBIDE ATM to verify
Just verified - you're right.
I did expected it to be 7 before, 4 after but nope.
ah yes because A (originally) is 0
Yay for one off errors!
 
23 mins ago, by Mathieu Guindon
and this is why you don't implement logic in enum types
 
^^^^^
But I do see lot of people doing that.
Another variant is to add +1 to each step
(which is kind of redundant?)
 
00:00 - 16:0016:00 - 00:00

« first day (1950 days earlier)      last day (1230 days later) »