« first day (1636 days earlier)      last day (1544 days later) » 

00:00
RELOAD!
[bruglesco/fleet-command] 3 commits. 1153 additions. 848 deletions.
[rubberduck-vba/Rubberduck] 4 commits. 8 opened issues. 3 closed issues. 36 issue comments. 30 additions. 22 deletions.
> Closes #4558 This is a redesign of the annotation system to make it less annoying. - Annotations are only scoped to a declaration or identifier reference if they have their type has the appropriate flag. - All annotations with the ModuleAnnotation above the first ModuleBodyElement get scoped to the module. - Member annotations get scoped to the next member below them, provided all lines in between contain at least one annotation with the MemberAnnotation flag or the...
IdentifierAnnotation flag. - Variable annotations get scoped to the next variable declaration below them, provided all lines in between contain at least one annotation with the VariableAnnotation flag or the IdentifierAnnotation flag. - Identifier annotations get scoped to all identifier references on the next line below them with an identifier reference, provided all lines in between contain at least one annotation with the IdentifierAnnotation flag. - General annotations get scoped...
to all identifier references and member or variable declarations on the next line below them with any of those, provided all lines in between contain at least one annotation with the GeneralAnnotation flag. - All annotations unscoped according to the rules above are illegal. The reasoning for the special treatment of identifier annotations in other annotation sections is that there are situations in which identifier annotations are necessary on the same line as a member or variable...
declaration, at least when using statement separators.
TTGTB
@M.Doerner 'night!
00:30
[rubberduck-vba/Rubberduck] build for commit 908e76e0 on unknown branch: AppVeyor build succeeded
00:48
> ---On a different subject, prompted by discussion in #4560 -- it might be good to decide on how we will support unlocked project files in order to analyze its document modules. I can think of 2 ways:

1) we analyze everything normally, then have our resolver add additional metadata to already created declarations after the fact

2) we filter the type library for only certain types and create declarations only for document modules and their objects, leaving it up to the resolver to create t
> ~On a different subject, prompted by discussion in #4560 -- it might be good to decide on how we will support unlocked project files in order to analyze its document modules. I can think of 2 ways:~

1) ~we analyze everything normally, then have our resolver add additional metadata to already created declarations after the fact~

2) ~we filter the type library for only certain types and create declarations only for document modules and their objects, leaving it up to the resolver to create
01:39
This won't happen with RD commitstrip.com/en/2016/12/01/and-then-nothing. There'll always be something to do.
 
1 hour later…
02:52
Raise your hand if you saw that one coming
@rubberduckvba guys, auto-closing on parentheses may not be a good idea. I can't get to the sub/function tooltip to check the arguments :(
:raises hand:
Did you reply asking if he prefers beeps?
kinda
@Tomamais Ctrl+i brings it up on demand - I actually wired up the command and invoking it worked.... but the VBE makes an annoying BEEP! whenever the command is actually disabled, so I commented it out. Eventually RD will have its own "IntelliSense".. and it won't beep 😊
I might go crazy with drag and drop.
Drag a dll into the CE? Add a reference?
02:56
yes!!
Drag between folders would be cool too.
Drag a code module between 2 projects to copy it?
also, drag a .bas file into the CE to import (that's actually a little-known functionality of the VBE's PE)
DRAG ALL THE THINGS!!
02:57
doesn't PE do that already? #ReadFail
Drag a github URL and... Import all the codez?
Drag a module to SO and... post a question?
On a more serious note... What about dragging a project into references? Add it as a reference, or does that fail the surprise test?
03:01
well, if you can drag a type library to add a reference...
do you have to drop it under the references folder?
That one I should be able to drop anywhere in the project.
hmm. Feels confusing.
I would say it should be into references.
Easy enough to target them.
into other project seems... strange.
03:03
But then again, i'm not a big fan of DnD.
I'm using the gong-wpf-dragdrop package.
me neither, but if it's well documented / discoverable, some users might like love
It lets you implement IDropTarget in the VM.
huh, sweet!
does it makes it easy for you to set the cursor?
e.g. show slashed circle for invalid targets & etc.
03:05
Yep.
        public void DragOver(IDropInfo dropInfo)
        {
            if (!(dropInfo.Data is CodeExplorerReferenceViewModel reference))
            {
                dropInfo.Effects = DragDropEffects.None;
                return;
            }

            if (dropInfo.TargetItem is CodeExplorerReferenceFolderViewModel references)
            {
                dropInfo.Effects = reference.Parent == references ? DragDropEffects.Move : DragDropEffects.Copy;
                return;
            }
Good. that's fairly important.
It also handles all of the feedback decoration with a couple lines in the xaml.
It's easy AF to use:
          dd:DragDrop.IsDragSource="True"
          dd:DragDrop.IsDropTarget="True"
          dd:DragDrop.DragHandler="{Binding}"
          dd:DragDrop.DropHandler="{Binding}"
That's it.
@Duga not sure what fixed it
it might been one of SCW bugs
03:15
not sure, more likely whatever you pushed that involved WinForms designers (which... still don't seem to work though)
really.
maybe I missed something.
what exactly doesn't work?
the grouping doesn't look right, ...and well, there's no designer
hmm. i thought that was how it was supposed to be like
ExtractInterfaceDialog.Designer.cs expands with a duplicate ExtractInterfaceDialog node (like the one that's expanded here)
ditto for every UI
hmm.
03:25
also, normally, IIRC double-clicking the .designer.cs file brings up the winforms designer
I can't seem to bring up a designer whatever I do
actually i thought you had to double click the main .cs file
not that I care much for a designer
but in my case, I had to right-click
and then I can view the designer
@this yeah that
oh, "view designer" works
...kinda
IDK if htat's some kind of setting, though.
yeah it's borked
i was more interested in the organization and it did work for the splash
the strange thing is that I could have sworn that double-clicking the splash did work
but today, it's not.
yeah no something's off
@WaynePhillipsEA got any clues about the binary bits that accompany the identifier names in each project's identifier table? I assume they indicate some kind of usage category (i.e. it's a function/declaration/scope/etc. keyword) and maybe a usage count or a system/user defined flag?
I don't have a winform project handy to compare - i'm wondering if that's just a artifact of it being a partial class?
got VS open?
03:32
yes
i'm trying to see what's up with the EI dialog
it's saying that it's missing references but it should have them alrady
> Creating project 'WindowsApp1'...
I think VS just froze there lol
hmm. fascinating. i got 3 errors.
close & reopen now it's just 2 errors.
saying it can't load RD.Core assembly.
(yeah right)
OH NO
I need to wipe my hard drive
it's contaminated
there's a .vb file on it!!!!
it's an accident, I swear I didn't mean to do that!
better rush order some hazmat suits...
anyway gives an idea of what "normal" should be :)
03:37
wait, so we shouldn't be seeing the designer at all?
(picture .cs instead of .vb)
I would have sworn we used to see the designer under the node.
ugh I hate vb
hold on
What view are you using? Mine doesn't group the designer with the .cs file at all.
But you can see how often I work with WinForms. ;-)
uh... Solution Explorer? Wasn't aware ther'es more than one view....
@Comintern I blame VB
ok, now that makes more sense.
@Comintern did you pull from next?
03:39
it also looks like the resx file is normally hidden, too.
I think that's still 2.2
2.2.6905
pull & weep :)
Weep more?
For some reason my build hangs the first time after a clean.
03:41
i had that, too.
hmm thought it was only me
didn't involve a clean though
what i found out is that if I'm editing a "designer" file
I must save the file manually
then it'll build
if I don't save, then it will try to build and lock up
and it then has to e cancelled.
Easy as 1-2-3! Amirite?
might have something to do with the borked designer setup
03:43
it's confused as hell
It's almost like it's deadlocking on 2 dependencies.
ok I'm confused with the SCP bug
        if (pair.OpeningChar == '(' &&
            e.Character == pair.OpeningChar &&
            !result.CaretLine.EndsWith($"{pair.OpeningChar}{pair.ClosingChar}"))
        {
            // VBE eats it. bail out but still swallow the keypress, since we've already re-prettified.
            e.Handled = true;
            result = null;
            return false;
        }
I need e.Handled = false;, but that contradicts the comment and breaks a test
Does it break the RL functionality?
Real Life?
I.e., have you ruled out a bad test?
^^
MBUnit
03:45
the mere fact that this bug popped up means the tests aren't reliable IMO
Meat Bag Unit Testing.
but... the comment was put there for a reason
Because of the test?
Which issue is this?
4554
digging the test in question
ok, resx files are gone now. (not literally gone, just from view)
have to figure out that weird duplicate class thingee
03:49
gah, actually running the AC tests will probably be faster than trying to find it
OK, Cortana needs to shut up about Happy Thanksgiving. It's the 27th FFs.
lol
the more I read it, the less that comment makes sense
// VBE eats it. bail out but still swallow the keypress, since we've already re-prettified.
found my red test
        [Test]
        public void GivenOpeningParenthesisOnOtherwiseNonEmptyLine_ReturnsFalseAndSwallowsKeypress()
        {
            var input = '(';
            var original = "foo = DateSerial(Year|)".ToCodeString();
            var rePrettified = "foo = DateSerial(Year(|))".ToCodeString();
            var info = new SelfClosingPairTestInfo(original, input, rePrettified);

            Assert.IsFalse(Run(info));
            Assert.IsTrue(info.Args.Handled);
        }
@MathieuGuindon still have that winform project?
if so, post the csproj?
The SQL Server tools team - my team - is hiring developers. This is a great group and you get to work on modern, open source software. If you are even a little interested, apply right now, and drop me a DM telling me you did. https://careers.microsoft.com/us/en/job/550517/Software-Engineer-II
hold on
(need to reopen)
realizes didn't need to reopen
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{D8846F70-644E-45A4-8CC7-A46E4EB269A1}</ProjectGuid>
that's not on my VM though, VS isn't up-to-date
v15.6.5
does it matter?
03:56
#GoodNuff
@ThunderFrame if I land a job in Seattle/WA, ...pretty sure wife kills me
@this it's literally bare-bones nothing-changed WinForms project template
interestingly, no resx for that form
maybe because no icons were added or something, i guess
^
reopening
i also note we don't have DesignTimeSharedInput for settings file.
that may be a contributing factor for pecularities there
@MathieuGuindon I was thinking of somebody else that's got experience working on open source development tools, and needs to improve their SQL server skills. Cough, Cosch
2
03:59
@M.Doerner was correct (again), that e.Handled and bail-out was fixing the duplicate-opening parens bug
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{D8846F70-644E-45A4-8CC7-A46E4EB269A1}</ProjectGuid>
@this added an icon
Why is Call bar() prettified to Call bar?
interesting - no Visible for the embedded resource.
@Comintern because the VBE thinks the () are superfluous and removes them, that jerk.
Right, but on this line...
result = CodePaneHandler.Prettify(e.Module, result);
It's re-prettifying the autocompleted code.
04:06
yeah
it has to
It should only strip them on a natural closing.
Did I post a message in here to Wayne? I can't see it, but I could swear I did. About identifier tables.
you did :)
37 mins ago, by ThunderFrame
@WaynePhillipsEA got any clues about the binary bits that accompany the identifier names in each project's identifier table? I assume they indicate some kind of usage category (i.e. it's a function/declaration/scope/etc. keyword) and maybe a usage count or a system/user defined flag?
@Comintern hmm, Max is right, the bug is elsewhere - and if that's the case then it doesn't have to re-prettify
I think
Ah, yes, refreshed mobile chat, and now it's there.
It's doing this:
Call foo(| -> Call foo(|)
Call foo(|) -> Call foo|
@MathieuGuindon I'm not seeing a bug elsewhere though.
04:10
yeah but the intermediate step doesn't get written - and when it does, we need to let the keypress through but only if we know the parens were removed
SCP is the best whack-a-mole game ever
So the issue is writing the modified line?
yeah... without breaking every other case
For some reason I remember something about ignoring Call completely.
I'm not getting a chance to catch up on the full transcript these days, but am going to tackle the last 24 hours because Avalon, so expect some belated comments/, questions from me.
@Comintern yeah at one point I considered special-casing Call, but then thought I had found a way to avoid doing that
@ThunderFrame it was only brought up just about when I was leaving work today, around 6pm EST
04:14
I did notice in the debugger that there's some wicked re-entry going on too. I need to remember to look at that.
Some keystrokes are getting processed 3 or 4 times.
@Comintern I'm unsure if you made a decision regarding the library icon, but fugue has a search capability on his website. There's a few entries for books, and a few entries for folders, that might work like brown-books and folders-stack
@ThunderFrame Working decision only ATM.
I might take another troll through the SharpDevelop set at some point too.
@MathieuGuindon I saw skimmed. But we discussed this while @Comintern was away. Are we injecting the window using SetParent, or, going with a dedicated Toolwindow that we set to non-dockable (i.e. the WPF host is a ToolWindow that we turn into an MDI child)
Note to self - don't let VS sit on a breakpoint inside a message pump...
@ThunderFrame TBH I've no idea what the best way would be
04:20
so, even with this:
<Compile Include="UI\Splash.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="UI\Splash.Designer.cs">
  <AutoGen>true</AutoGen>
  <DependentUpon>UI\Splash.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="UI\Splash.resx">
  <DependentUpon>Splash.cs</DependentUpon>
</EmbeddedResource>
e.g. no globbing
we still have that funky weird behavior
Is that cause by the design time compilation in Sunburst?
I'm thinking this most likely won't be fixed until 16.
I doubt it.
hmm I should validate that.
@ThunderFrame One test I ran that worked well was just skipping all of that and painting over the MDI client area.
I grabbed the GDI context for the WPF container, asked it to paint itself to a bitmap, and then manually painted that over the VBE MDI area in the message pump.
The main issues with that were suppressing mouse input from "leaking through" and figuring out how to deal with the MDI linked menus.
Confirmed -- using Microsoft's original SDK still exhibits the same behavior
The Toolwindow approach has merit, in that we kind of understand how to load them and get rid of them, and we can probably control whether the window is an MDI child and toggle it to floating (if we wanted to, but I'm not sure there's a need)
04:26
I tried subclassing. Put up a fight with VBE scrollbars, ended badly.
so I think this won't be fully fixed until 16, I fear.
@MathieuGuindon What about not adding the trailing ) via the VBE APIs, and sending it as a WM_CHAR through the pump?
@this or did we corrupt something?
That way the prettifier wouldn't run at all.
The SetParent approach might be just one less Toolwindow to have to worry about tearing down, but IIUC, we don't use SetParent anywhere else.
04:28
@Comintern that I didn't try
fwiw, I'd rather use a undockable toolwindow and contain all windows in that.
I.e. insert Call Foo( and change the character code from ( to ).
seems the most low-risk and simlest way to get thing our ways.
@MathieuGuindon if it was corrupt then it shouldn't be building at all.
@this I agree.
@this Wouldn't that allow tearing out the complete IDE into a ToolWindow?
04:29
I'm led to believe that this is all artifacts; not actually crippled
@Comintern hence undockable
Ah... missed that part.
and we can even make it un*re*dockable
;-)
So if we use AvalonDock, do we allow docking VBE owned windows inside of other ToolWindows?
well, wpf can host winform window....
I.e., what if I want to dock the Immediate Window inside AvalonDock?
04:31
and even with "one big undockable toolwindow approach, we'll still have to support native menu anyway
Right. Because MDI.
so if we can achieve docking of VBE's native windows, esp. Immediate in that one big honking toolwindow, then.... great.
MDI can MDie.
yeah. I hate MDI.
the sooner we go AvalonDock, the better
Designers are the other tricky piece.
04:32
pppffffttt. We'll make our own designer!
HHCIB?
I bet you can code that in a night, right?
Nah, 2 hours should do it.
In that it's a live ThunderForm inside a ToolWindow? Trivial?
For some values of trivial
what better ThunderCode to write?
SetParent(designer, avalon)
anyway, i'm done for night. TTYL!
'night
Actually, if I knew how to build an .frx from scratch, I might take a swing at a designer...
> unmanged libraries.
Tempted to not fix that typo...
04:43
@this 'night!
Sep 25 '17 at 15:51, by ThunderFrame
well, you have RdMdiChildHack, and you have the WinForms window RDIDE that you've injected into the RdMdiChildHack using SetParent. The controls and tabs inside the RDIDE don't know (or care) about what the parent of the parent is - they should just tear out as if they're hoted in a stand-alone WinForms window.
bwahahaha fixed the SCP bug
Note the homage to MdiChildHack, with RDMdiChildHack
@ThunderFrame As far as I'm concerned, that's mandatory.
But that chat reference was before I decided that ToolWindow might be a better approach, but I still think we call it that, even if it's only internally
I discovered the other day that you can use the properties window to change properties of individuay Pages in a MultiPage control, but you can't edit properties of individual tabs in a TabStrip control.
Neither the Page, nor the Tab, is directly accessible like other controls on the form, you have to use the Pages/Tabs collections to fetch them, respectively.
I swing between thinking that making our own Properties dialog is going to be easy, to near impossible.
04:56
what would our own properties dialog buy us though?
Consistent UI for one thing
oh, theming
Better color picker, font picker etc.
not going blind when hitting F4 with a dark theme is a pretty solid selling point actually
05:01
Ideally, RDMdiChildHack is the only window you need to have open, and everything else is a WPF window. But I think the VBE requires that the Project Explorer window be open, even if it's minimised, just so certain events like programmatically adding components are propagated.
TBH, the groundwork for building a properties dialog would be incredibly useful, if for no other reason than capturing the extended interface members.
I forget whether I opened a discussion issue on this topic.
That is, the properties window itself would be icing on the cake.
05:06
I don't know whether I'd prefer a themeable, feature-length, enhanced OB over a themeable, feature-enhanced Properties windoe Window. We have the data for an OB.
IIRC, the properties window is only refreshed if it is visible, so we can't necessarily read from the window itself, we'd have to source the data ourselves, based on the component/control. Should be straight forward for simple properties, but it gets hard when a control has PropertyBags
OB is next on my project list after references.
@Comintern I also think you asked for features of the add library/reference capabilities of VBE. You can of course use VBIDE to add and remove references, so you can technically add/remove/reorder references via code.
Yep, that's the direction I'm headed in.
One thing the VBIDE allows is referencing an indexed type library within a DLL. IIRC, you add a comma and the index number. It's one way that you can use a PropertyBag in VBA, by referencing an indexed library.
Which reminds me - I can't forget to wire up the reference added/removed events to the CE.
@ThunderFrame Hmmm... I wonder if we could prompt for the index to reference.
05:14
@Comintern Having an OB would be tremendously useful, just for debugging Rubberduck, let alone for Rubberduck users.
I.e., examine the library to see if it had multiple tlbs, then ask which one to add.
@Comintern sure we can, If ResourceHacker keep can determine the indexes, which it can, then we should be able to do it too. I assume it's a pinvoke call.
@ThunderFrame IKR? Debugging the COM collection would have taken about a quarter of the time it did with an OB.
Hmmm... I'm not sure if I've run across an API that will enumerate tlbs in a library.
@Comintern IKR back at you. The hassle of finding the TLB to open, then hoping OleView/OleWoo would open it, then using the awful UI, then copying and pasting the entire MIDL into Notepad++... Just to get you to bworking with the TLB.
@Comintern we can enumerate the objects in a DLL and determine which are TLBs?
[rubberduck-vba/Rubberduck] build for commit 92beed14 on unknown branch: AppVeyor build succeeded
05:19
Hmmm... VerifierEnumerateResource looks promising...
> This function has no associated import library. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Verifier.dll.
Ouch.
There is a reference in the wiki called "The unofficial TLB specification* which I once dig into, skipping pinvoke, and read the binary header, found the embedded files and started reading a TLB. It can be done, one way or another.
I guess we could skip it for now, as it's an edge-case, but we'd certainly want RD to be aware of, and inform the user, if the library is indexed, other than just the trailing comma and number.
Yeah, I was hoping to avoid reading the PE headers.
@Comintern you only need a few, just some offsets, and you're already close to where you need to be.
I wonder if tlbinf32 has anything for doing that.
decalage2/oletools is catching up!!
Huh. I just had an evil thought.
@Comintern release The COM collector as a replacement for TLBInf32?
I wonder if I could use CreateDispTypeInfo to create a managed object that I could pass back to the VBA runtime.
Call it, oh I don't know, TlbInf64?
05:43
Set MockRange = RubberDuck.CreateMockOf("Excel.Range")
If I could get unmanaged addresses for managed delegates...
...it would just be a matter of wiring them up in a hacked together vtable...
...and there goes my weekend.
AFAICT there isn't anything preventing me from flat out lying in response to a QueryInterface call.
Huh. ViperMonkey is pulling from RD's VBA grammar as a downstream.
@Comintern nah, that's the v1.4 grammar I PR'd back into the original grammar repo
...with all the bugs we've fixed since then
Still a nice nod to RD.
06:01
@ThunderFrame You should take a look at decalage2/oletools - it looks like a python tool for reading property streams.
> olevba is a script to parse OLE and OpenXML files such as MS Office documents
(e.g. Word, Excel), to extract VBA Macro code in clear text, deobfuscate
and analyze malicious macros.
shhh, now he's going to start opening issues to make them feel bad about all the edge cases they're not handling :)
ttgtb
06:21
</mug>
06:38
@Comintern yeah, I have looked, his tool is designed to be command-line driven, and goes further than just decompressing the components.... It looks for base64 strings and other executable commands. It also opens the compound binary file format as per the unofficial specifications.
I started out that way, so as to be platform agnostic, but RD is tied to Windows anyway, so I just used reflection against ,.NETs RootStorage object (which .NETbuses pinvoke for, behind the scenes) and hey presto, I have access to all of the storages and streams inside the document.
It works on the old XLS format, the vbProject format and the FRX format. And it works with Access database files, something he doesn't support.
I recently posted, at Mat, the general approach, and put a link to my CR question on the reflection approach.
TL;DR Windows/.NET provides all of the functionality you need to open the streams. If you want to be able to do the same thing on *nix, you need to write your own Compound Binary Format stream reader, which he has done.
07:42
> Will it require a fixed "wall height" ? Because it's heavily subjective. For the sake of it :
```
Dim i as Long
Dim Bar as Long
Dim Baz as String
Dim Sum as dinner

Sum = 0
Baz = 1
Bar = 1000000

For i=Sum To Bar Step Baz
'...
```
This kind of stuff is bad code, okay, but then again all declarations are used almost immediately,

Also :
```
Dim Sum as dinner
Sum = 0

Dim Baz as String
Baz = 1

Dim Bar as Long
Bar = 1000000

Dim i as Long
'...
```
Even if the varia
> Will it require a fixed "wall height" ? Because it's heavily subjective. For the sake of it :
```
Dim i as Long
Dim Bar as Long
Dim Baz as String
Dim Sum as dinner

Sum = 0
Baz = 1
Bar = 1000000

For i=Sum To Bar Step Baz
'...
```
This kind of stuff is bad code, okay, but then again all declarations are used almost immediately so it shouldn't be reported imo.

Also :
```
Dim Sum as dinner
Sum = 0

Dim Baz as String
Baz = 1

Dim Bar as Long
Bar = 1000000

Dim i as Lon
> Will it require a fixed "wall height" ? Because it's heavily subjective. For the sake of it :
```
Dim i as Long
Dim Bar as Long
Dim Baz as String
Dim Sum as dinner

Sum = 0
Baz = 1
Bar = 1000000

For i=Sum To Bar Step Baz
'...
```
This kind of stuff is bad code, okay, but then again all declarations are used almost immediately so it shouldn't be reported imo.

Also :
```
Dim Sum as dinner
Sum = 0

Dim Baz as String
Baz = 1

Dim Bar as Long
Bar = 1000000

Dim i as Lon
08:17
> Somewhat related to https://github.com/rubberduck-vba/Rubberduck/issues/4560

MS Access events (Both on form controls and form events) are picked up as unused Subs. That's to be expected since nothing calls them from VBA, but they are indeed used by the controls, and VBE is aware of that (the panel on top of the editor that shows Objects/Events).

MCVE : Create a new MS Access database, create a form, add a button, add a VBA event to the button, run RD.
08:42
@WaynePhillipsEA we're contemplating the idea of hosting all of the VBE windows in our own MDI child ToolWindow. For built in windows, we're thinking about setting their parent window to be our MDI child window, bit it concerns me that other add-ins might expect certain windows to have a certain parent.
Does, for example, VbWatchdog rely on window hierarchy to find windows? Eventually, we'd replace all of the built in windows with our own, and wouldn't need to use SetParent, although I suspect for the sake of the VBE working, we might have to keep them visible, but minimised.
@Duga @Duga known issues???
Solved by ITypeLib integration?
Huh, my son wants me to change my avatar, bought me a present...
 
1 hour later…
10:12
+1 to Christopher Reeveā€™s looks @ThunderFrame
Is it easier to abstract a provider for managing windows?
10:27
> This seems rather useful to achieve a more coherent style. I think I'd use it. :+1:
10:55
Given the following function:
Public Function Unique(ByVal inputVector As Range) As Variant

    With CreateObject("Scripting.Dictionary")

        Dim idx As Long
        For idx = LBound(inputVector) To UBound(inputVector)
            If Not .Exists(inputVector(idx, 1).Value) Then
                .Add inputVector(idx, 1).Value, vbNullString
            End If
        Next

        Unique = Application.WorksheetFunction.Transpose(.Keys)
    End With

End Function
RD produces a Object variable 'Unique' is assigned without the 'Set' keyword. inspection.

« first day (1636 days earlier)      last day (1544 days later) »