« first day (1012 days earlier)      last day (2168 days later) » 
00:00 - 10:0010:00 - 00:00

12:00 AM
I'd still love to pass a VBA class to RD, and have RD execute a method the way @Comintern did by calculating the vtable (but without caveats)... It must be possible, as it can be done with MSXML's OnReadyStateChanged property, where you assign the property an instance of the class, and MSXML is able to call the default member. msdn.microsoft.com/en-us/library/ms757030(v=vs.85).aspx
 
RELOAD!
[Hosch250/CheckersUI] 1 commit. 6 additions. 1 deletion.
[retailcoder/Rubberduck] 129 commits. 92675 additions. 140069 deletions.
[rubberduck-vba/Rubberduck] 7 opened issues. 1 closed issue. 28 issue comments.
 
@ThunderFrame Huh. Now that I think about it, we only really need an IUnknown or IDispatch. We could just discover the interface the old-school COM way.
 
@Comintern What is that XMLHttpRequest.OnReadyStateChange = MyOnReadyStateWrapper statement actually assigning, if it's not using Set? The address of the default procedure?
 
I'm not sure. What library was that again?
 
MSXML
Microsoft XMl V6.0
 
12:08 AM
Oh, I meant the dll name
 
msxml6.dll in System32
 
[id(0x0000000e), propput, helpstring("Register a complete event handler")]
HRESULT onreadystatechange([in] IDispatch* rhs);
WTH is the rhs annotation?
 
@Comintern good question... ask @Vogel612? I suppose it made it easier to return multiple values
 
@Comintern that's the name of the argument?
 
Since we only use the actual filename in Application.Run, the length of the string should usually not be the problem. Say 40 characters for the filename, 40 for the project, and 31 for the module leave 144 charcters for the name of the test method.
 
12:11 AM
@Mat'sMug Figured it out - it changes the input parameters to allow passing through to the base method. That's actually a bug.
@ThunderFrame LOL. So yes, it takes an Object.
 
so WTH isn't there a Set?
 
Yeah, I'm kind of perplexed by that.
 
> Rubberduck.Setup.2.0.13.0.exe (5.83 MiB) - Downloaded 76 times.
Last updated on 2017-03-12
@Comintern or a Variant?
 
@Comintern Oh wait, it's MS Documentation... They're deliberately misleading us?
 
lol
 
12:13 AM
Nope, that's a hard IDispatch.
Oh f%ck. PermissiveAssertClass has another bug.
AssertClass has the same bug.
String comparisons need to take the Option Compare into account.
 
hmm IIRC that was deliberately left out
 
@Comintern Does COM not enforce the difference between a Let and a Set?
 
Nope. It could care less. A Set takes an interface pointer - a Let takes a value type.
 
12:38 AM
'HelperClass
Private dispObject As Object

Public Property Let PropLet(o As Object)
  Set dispObject = o
End Property

Public Property Set PropSet(o As Object)
  Set dispObject = o
End Property

Public Sub Execute(Arg1 As String)
  dispObject = Arg1
End Sub

Public Function CallAMethod(MethodName As String, Arg1 As String) As String
  CallAMethod = CallByName(dispObject, MethodName, VbMethod, Arg1)
End Function
'CallBackClass
'Can't seem to pass arguments to the default member if it is a procedure, but can pass an argument if it is a property
'@DefaultMember
Public Property Let FooBar(Arg1 As String)
  Debug.Print "Default Member", Arg1
End Property

Public Function DoSomething(Arg1 As String) As String
  DoSomething = "DoSomething did " & Arg1
End Function
'Module1
Sub test()

  Dim arrange As HelperClass
  Set arrange = New HelperClass
  Dim callBack As CallBackClass
  Set callBack = New CallBackClass
  Dim result As String

  arrange.PropLet = callBack
  arrange.Execute "PropLetArgument"
  result = arrange.CallAMethod("DoSomething", "Foo")

  Set arrange.PropSet = callBack
  arrange.Execute "PropSetArgument"
  result = arrange.CallAMethod("DoSomething", "Foo")

End Sub
so CallByName works (as you'd expect), but so does calling the default member.
 
> This and that: 1) Slightly more safety for long procedure names in Excel. (If > 255 chars, drop the filename.) 2) Catching and logging of COMExceptions thrown during running the unit tests. (Application.Run might not like what we are feeding it.) Exception gets logged and test gets set to Inconclusive - Unexpected COM error. 3) Small refactoring of SyncCOMReferences in the ParseCoordinator. Now, the setup for parallelism gets only performed if there is actually soemthing to load.
 
@Comintern but both Let and Set produce the same outcome
 
So Let with an object as a parameter is just the pointer?
 
I'm on a work PC - Does RD get an inspection result for assigning an Object to a property Let?
 
[rubberduck-vba/Rubberduck] build for commit 29c403af on unknown branch: AppVeyor build succeeded
 
12:43 AM
I would doubt it. I'll check as soon as my test run completes.
WTH? Why is GivenField_NamedUnambiguously_InStatementFieldCallResolvesToFieldDeclaration failing?
 
@ThunderFrame you mean defining a Property Let member with an object return type? that would be a good one to have!
@Comintern lemme guess - name too long?
 
@Mat'sMug Defining a property let with an Object parameter.
 
LOL. No, that's one of the new tests @Hosch250 put in a couple days ago.
 
 Public Property Let Foo(ByVal value As Object)
 End Property
^ definitely deserves an inspection result
 
12:45 AM
^
 
look, a pine tree
 
Now I want to see if I can use it to break something.
2
GivenField_NamedUnambiguously_InStatementFieldCallResolvesToFieldDeclaration is doing the weird intermittent failure thing.
 
related inspection for usage of a reference declaration that accepts an Object as its Parameter... i.e.onreadystatechange
 
It ambiguously passes.
 
12:47 AM
huh, think I just setup CI for my fork on rubberduckvba.visualstudio
stops clicking new buttons in VS2015
 
I'd turn it off.
It'll really eat up system resources.
 
so that's like MS-hub
@Comintern ? it's remote
 
I guess that assignment ambiguity is the same thing we discussed around assigning a Connection to a Command Object without using Set
 
@Mat'sMug Maybe I'm thinking of the CodeLens one.
 
12:52 AM
looks like MS wired their own "hub" to VS 2015
it's literally GitHub, MS-flavored
reeks of TFS
 
Sh!tHub?
 
[rubberduck-vba/Rubberduck] build for commit 194aa1c2 on unknown branch: AppVeyor build succeeded
 
> Deleting project "Rubberduck"
 
ok. at least rubberduckvba.visualstudio.com is reserved lol
 
12:54 AM
lol
You want to take a quick scan over the permissive SequenceEquals really quick? It's also untestable.
 
That's basically what RD does.
 
@Comintern calling class members by MemID?
 
> Consider the following stub class:
```
'ObjectLet.cls
Public Property Let Test(foo As Object)
Debug.Print TypeName(foo)
End Property
```

This is perfect legal in VBA, but defeats the normal reference assignment semantics:

```
Sub ThisWorks()
Dim x As ObjectLet
Set x = New ObjectLet
x.Test = ThisWorkbook
End Sub
```
Normally, that type of assignment would attempt to call the default member of `ThisWorkbook`. In the case above, the `Debug.Print` is "ThisWorkbo
 
@ThunderFrame Well, not explicitly - the RCW marshals the delegate as a function pointer and handles the dispatch requests.
 
hmm, the example looked like the author was executing instance members by ID as opposed to by name.
 
Is it good to put in a test for an assumption?
 
@Comintern just change the NotImplementedException to a NotSupportedException and that PR is good to go
 
@IvenBach it's good to put in tests that satisfy and that don't satisfy the assumption
 
@IvenBach in a dream world, tests document the entire program's specifications - so yes, absolutely!
 
1:21 AM
So if I'm assuming that a goalseek is going to have both cells on the same sheet I should test for that?
 
@IvenBach depends what you consider part of the specification (your requirements) vs what you consider part of implementation details
 
If it's part of my classes implementation, that both cells will be on the same sheet, then I should test for it?
 
wtf my internet just died out of nowhere
 
1:25 AM
@Mat'sMug I was reconsidering whether that should throw.
 
if obj.GetHashCode() isn't reliable, I'd make it throw
 
Yeah, you're probably right - it should return different hashes than the Equals method.
 
1:33 AM
@ThunderFrame Not angry so much as distressed
 
Can you, by default, with VBA test if firstCell.Parent is secondCell.Parent?
 
why not?
Debug.Print firstCell.Parent = secondCell.Parent
Debug.Print ObjPtr(firstCell.Parent) = ObjPtr(secondCell.Parent)
 
Doesn't the parent property default down to .Name?
 
yeah. use ObjPtr to compare the actual object pointer
 
1:42 AM
I've never had to do this kind of thinking let alone testing.
 
Debug.print firstCell.Parent Is secondcell.Parent
 
it's the difference between "ugh. vba." and "huh, it's vba!"
@ThunderFrame that's actually more idiomatic I think (and more elegant too)
I always forget about Is and resort to undocumented pointer-level checks lol
 
Why look in the manual when you can have much more fun under the hood?
 
=)
 
1:46 AM
> I'd go one of two routes on this. On the one hand, we could just use the current `AssertClass` code and compare strings as if `Option Compare Binary` was set. The problem with this is that if `Option Compare Text` is defined in the module, the comparisons would not match the semantics of the `Assert` - i.e.:
```
Option Compare Text
'...
'@TestMethod
Public Sub TestMethod1() 'TODO Rename test
On Error GoTo TestFail

Debug.Print "FOO" = "foo" 'True
Assert.AreEqua
 
@Mat'sMug That can be dangerous. ObjPtr returns the interface pointer, so if you have the same object with variables pointing to different interfaces, the comparison fails.
 
> Determining the setting for the module shouldn't be too hard actually. I think the most elegant solution would be to honor the Option Compare statement - the big question mark is what do we do with Option Compare Database?
 
@Comintern TIL
 
Is compares the reference pointers.
 
I need to remember that
 
1:57 AM
> Hmmm... Option Compare Database is only supported in Access. If we're honoring the setting, we'd need to ask the host for the DBE's internationalization settings.
> That one predates version 1.0 I think. Module options aren't *declarations*, and `DeclarationType.ModuleOption` is used in 12 places in the solution:

- In `API.Declaration` - it should die here too
- In `Symbols.Declaration` - it's part of the declaration types we exclude as "never array" (duh!)
- In `Symbols.DeclarationFinder` - where it's special-cased so as to return the parent module when it's selected.
- In `Symbols.DeclarationSymbolsListener` - which creates the module option "
> We're going to need the DAO Interop anyway, but once we have that, the collation is available with CurrentDB.CollatingOrder
> Would a helper function be, um, helpful?

Ignoring Access, for now....

```vb
Function ModuleCompareType() As VbCompareMethod

If StrComp("A", "a") = 0 Then
ModuleCompareType = vbTextCompare
Else
ModuleCompareType = vbBinaryCompare
End If

End Function
```
 
@Duga I never removed the Emitter hack - we could emit that function and retrieve its result
Just make a new member to get that function body, and call Emitter.ExecuteWithResult<int>(Emitter.GetOptionCompareSetting())
Could be a last-resort option
I know it works. Not sure it helps make RD stable though
 
2:15 AM
@Mat'sMug - I forgot to reply to your comment about being able to trigger a compile, but not being able to determine if it did compile....
I'm pretty sure you can check the state of the CommandBarButton to see if it was successful or is currently compiled
 
OK. Crash time.
public long MocksageBox(string prompt, long buttons, string title, string helpfile, long context)
{
    Debug.WriteLine("MsgBox called from VBA.");
    return 0;
}
 
MocksageBox lol!
DuckedMsgBox
MsgBoxDuck
oh there's something
mock duck
QuackBox has a ring, too
 
Heading home to test and see if I can reproduce the error I was having earlier.
Thanks again for answering all my questions.
 
make sure you sync! :)
 
gah - I'm writing classes (and enumerable collections) for entities I am delivered in Excel files.... Open the file, read the range into an array, create a class instance for each row, and add the class to my custom collection. Works well. But the project owner keeps giving me new files (that reflect new type of objects). It's almost like I need a class-builder given a table with headers.
 
2:23 AM
Mmmm... Mock duck. It's really tasty.
 
LOL!
 
Rubber MockDuckFace
 
Fried up in a coconut curry, Massaman style with some chopped peanuts...
 
@Comintern That looks truly disgusting.
 
2:27 AM
It's kind of like tofu, but with more oil and a chewier.
 
pictures fatcat in a 44-gallon hat saying "Let's can this Sh!t and see if somebody buys it"
which was also the M&A strategy of Yahoo
 
lol
Hmmm... dll not loaded by current process...
 
^
time for AccessViolationException-party?
 
I'm just moving up another level and hooking vbe7.dll directly instead. The runtime apparently doesn't load unless code is running.
Oh, crap. Wrong signature.
 
huh, this is going to work!?
 
2:41 AM
It should. I just need to figure out the calling convention for rtcMsgBox.
It apparently isn't delegate int MessageBoxDelegate(string prompt, int buttons, string title, string helpfile, int context);
 
> @ThunderFrame that's a real possibility:

[Emitter.cs](https://github.com/rubberduck-vba/Rubberduck/blob/next/Rubberduck.Parsing/Emitter.cs) was written to make an API exactly for this. We're not using it, but it can be used as a last resort: we insert a new standard module, inject the code, execute it, retrieve the result if we need one, and then discard the module - it's kinda disruptive, and it only works in hosts that can run RD tests... hmmm....

The `GetTypeName` helper function is b
> Something wrong with just calling Application.CurrentDb.CollatingOrder?
 
@Ducka, I meant for helper usage in the VBA test. Wouldn't RD already know the compare method having parsed the file?
 
Ah - inside the test.
Access defaults to Binary, doesn't it?
 
> @ThunderFrame that's a real possibility:

[Emitter.cs](https://github.com/rubberduck-vba/Rubberduck/blob/next/Rubberduck.Parsing/Emitter.cs) was written to make an API exactly for this. We're not using it, but it can be used as a last resort: we insert a new standard module, inject the code, execute it, retrieve the result if we need one, and then discard the module - it's kinda disruptive, and it only works in hosts that can run RD tests... hmmm....

The `GetTypeName` helper function is b
 
You think rtcMsgBox takes the arguments as string pointers?
 
@Duga @ThunderFrame see edit :)
@Comintern straight-up strings won't do?
(I've no idea)
1
Q: Windows API hooking python to msvbvm60.dll (rtcMsgBox)

AlbertoI want to intercept the API calls of a process to know when a process call to the API rtcMsgBox of the msvbvm60 dll. I have tried it with this code but it seems not to work: from winappdbg import Debug, EventHandler import sys import os class MyEventHandler( EventHandler ): # Add the APIs ...

 
Either that or I'm missing a step in initializing the hook.
 
4th hit for "rtcMsgBox" is "CRACKiNG TUTORiAL"
 
Could hook the kernel call to MessageBoxIndirectA instead...
 
@Comintern Modules default to binary, although Access defaults to including Option Compare Database at the top of a module, so I guess you could say Access Modules want to be Binary, but the VBE gets in the way
the Immediate Window has its own setting
 
3:02 AM
All your MsgBox are belong to us!
3
 
ok what's going on here?
what's the reach of that?
 
OK, so I just sink a hook in vbe7.dll and intercept all calls to _rtcMsgBox.
 
how hard would it be to INTERCEPT ALL THE THINGS!! ? (profiler?)
 
I returned a vbMsgBoxResultWTF and didn't pass the call to the runtime.
Pretty much any function that the vbe7.dll supports would be easy.
The host might be a little more dangerous - I'd guess that most of the functions aren't in the export table.
Could probably figure out UserForm loads.
 
@Comintern so... we have an actual mock engine?!!?
wait no
 
3:05 AM
Yup. msvbvm60 might be a bit more work - we can't set the hook until the code is executing.
 
well
that's sick
 
We'd need to explicitly support functionality for the most part.
This is literally all the code that happened there:
        public void OnStartupComplete(ref Array custom)
        {
            //CreateTestMenu();

            var address = EasyHook.LocalHook.GetProcAddress("vbe7.dll", "rtcMsgBox");

            _hook = EasyHook.LocalHook.Create(address, new MessageBoxDelegate(MocksageBox), null);
            _hook.ThreadACL.SetInclusiveACL(new int[] { 0 });
        }

        [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true)]
        delegate int MessageBoxDelegate(IntPtr prompt, int buttons, IntPtr title, IntPtr helpfile, int context);
 
    RDTest.Mocking.MsgBox.Returns vbCancel
    sut.Run

    RDTest.Mocking.MsgBox.Verify It.IsAny("String"), vbOkCancel).Once
 
Yep.
InputBox too.
Environ
Dir
 
Open
Close
?
 
3:14 AM
Beep <--LOL
rtcFileAttributes	0x101bee23	0x001bee23	555 (0x22b)	VBE7.DLL	C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA7.1\VBE7.DLL	Exported Function
rtcFileCopy	0x100db204	0x000db204	576 (0x240)	VBE7.DLL	C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA7.1\VBE7.DLL	Exported Function
rtcFileDateTime	0x100db379	0x000db379	577 (0x241)	VBE7.DLL	C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA7.1\VBE7.DLL	Exported Function
rtcFileLen	0x100db453	0x000db453	578 (0x242)	VBE7.DLL	C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA7.1\VBE7.DLL	Exported Function
 
> May I propose an alternative?

Instead of dealing with all "what is this?", refactor by adding the compile flag and rewrite code as accordingly:

Private Sub DoIt()
#If LateBind Then
Dim xlApp As Object 'Excel.Application
#Else
Dim xlApp As Excel.Application
#End If

Set xlApp = CreateObject("Excel.Application")

....

End If

That way, the refactor is now a cut'n'paste affair; just replace the original early-binding line, and i
 
Date and Time.
Timer
Input
 
Wow.
 
@Duga not crazy at all
 
Rnd and Randomize
SendKeys
Shell
 
3:17 AM
oh wow
 
mmm, Shell
 
^^
 
DoEvents
 
^ Shell - My favorite breakout of a Citrix session
 
> May I propose an alternative?

Instead of dealing with all "what is this?", refactor by adding the compile flag and rewrite code as accordingly:

Private Sub DoIt()
#If LateBind Then
Dim xlApp As Object 'Excel.Application
#Else
Dim xlApp As Excel.Application
#End If

Set xlApp = CreateObject("Excel.Application")

....

End If

That way, the refactor is now a cut'n'paste affair; just replace the original early-binding line, and i
 
3:20 AM
Huh. _ErrObject::Raise. How does Assert.ErrorRaised(6, "Overflow not raised") sound?
On Error Resume Rubberduck
OK, I need to make a list.
 
Just tested github.com/rubberduck-vba/Rubberduck/issues/2854 and I get identical results.
 
Oh hai, rtcCreateObject...
^^That's how you mock host objects.
 
holy crap
@Comintern you just cracked open Pandora's box!
 
:-D
 
so how can we mock a Range?
Application.Calculation
uh, doesn't that ultimately amount to... re-implementing VBA?
 
3:25 AM
Uh yeah, more or less.
These would be more like Fakes instead of Mocks though.
 
right
 
Heh. DllVbeTerm.
 
huh
wait that's The Terminator?
 
Oh hai, DllGetClassObject. What do you do.
2
 
4 mins ago, by Mat's Mug
@Comintern you just cracked open Pandora's box!
 
3:28 AM
OK, time to try newing me up some VBA object...
Oh wait. DllGetClassObject should only return the VBE instance. That's part of the OLE harness.
 
something tells me RD might eventually be running its tests off VBA class modules...
huh?
we have that already
:(
 
The one I really need is VBEGlobal::Load.
Let's see if it will find the entry point...
 
I wonder if some of these addresses match up with the pointers in the treeview lParams.
 
Hmmm... What about hooking CoGetClassObject?
I can restrict the hook to specific threads.
Apparently EasyHook supports hooking in COM vtables.
 
3:47 AM
wah
 
> Just tested it at home and results are identical. I can reproduce it every time.
> @bclothier the grammar cannot deal with `#` preprocessor instructions *and* actual VBA syntax at once; what we do, is that we preprocess the VBA code to pick up the "live" and the "dead" code; during that phase we replace the "dead" code in each module content strings with whitespace that preserves the line position of everything, and the resulting string is what we feed our actual VBA parser: Rubberduck knows nothing of the "dead" code in the module.

So the "dead" branch(es) don't even get
> @bclothier the grammar cannot deal with `#` preprocessor instructions *and* actual VBA syntax at once; what we do, is that we preprocess the VBA code to pick up the "live" and the "dead" code; during that phase we replace the "dead" code in each module content strings with whitespace that preserves the line position of everything, and the resulting string is what we feed our actual VBA parser: Rubberduck knows nothing of the "dead" code in the module.

So the "dead" branch(es) don't even get
> Is there another project in the VBE with a test module named the same as the one you're in?
 
4:11 AM
    Private Sub cmdButtonClick() '@Handles cmdButtonCancel.Click, cmdButtonCancel.Click
        Me.Hide
    End Sub

'Rubberduck generated code:
    Private Sub cmdButtonCancel_Click()
        cmdButtonClick
    End Sub

    Private Sub cmdOkCancel_Click()
        cmdButtonClick
    End Sub
#idea
with annotation intellisense, of course
when the methods exist, the annotation is dimmed; when they don't, it's squiggly-underlined and you bring up a little in-place drop-down to add the missing methods
 
That would come in handy. When does the code building happen?
 
ON-THE-FLY!
 
Woot!
You know that user class base object that declares the Initialize and Terminate events?
 
ClassClass?
classy
 
4:16 AM
^ I'm trying to hook that interface.
 
you found it?
how about Activate, Deactivate, QueryClose?
 
Apparently the method that EasyHook uses to find the vtable entries requires newing up an instance via the native APIs.
 
but that information alone doesn't tell us the type being created, does it?
 
No, but we get the object instance I think.
 
huh
jaw drops
 
4:17 AM
The thing that sucks about requiring it to new something up is that only public creatable GUIDs will yield a vtable.
 
> No. I tested it on a new workbook with only TestModule1 and the code from my original post. I get the same results.
 
I'm gonna break this thing.
 
@Duga ok I've no idea wtf is going on there
 
I thought I'd replicated it earlier, but I realized that I'd copied a test, and hit the add method and pasted it manually into the middle of something with ctrl-v. Ooops.
 
Is there any code you want me to look it in VS?
 
4:20 AM
@IvenBach I'm stumped
 
^
I'm going to open a feature issue for RD fakes.
2
 
4:45 AM
Ok.
Early bed time. Sleep! That's where I'm a viking!
 
'night!
 
> Linking #1550
> Thanks for the explanation.

Yes, project-level constants will be a big issue and like you, I've been forced to settle for that silly "pop open the dialog to automate setting the const".

One lame workaround is to support some kind of project-level annotation so that RD can read that instead of trying to pop open the dialog. But that means it can get out of sync, etc. etc. This wouldn't be so lame if you had a means of reliably detecting and trapping whenever the user has opened the proj
> > *This wouldn't be so lame if you had a means of reliably detecting and trapping whenever the user has opened the project properties so that you can inspect the changes, and suffer flicker only once for a new VBA project.*

You're onto something here. It wouldn't need to flicker - project-level preprocessor constants are empty by default no? And at this point we can certainly hook up the project properties dialog and detect it opening and closing... hmm...
> I like the Private Fakes As New Rubberduck.FakesProvider approach - it's in line with the spirit of the current API. Although... I like how Private Ducks As New Rubberduck.DuckProvider is similar to Private Mocks As New Rubberduck.MockProvider 🙄
> Picking up change events from the Properties dialog is trivial with the WinEvents APIs - the only issue is that it only receives update events when it's visible. It's also really easy to subclass now (too easy as it turned out - I think at one point it was accidentally subclassed) so tracking its state is also trivial. Just thought I'd throw that out there...
 
5:06 AM
@Duga so there's another solution then!
 
@Duga @Mat'sMug - wouldn't fake ducks be something like a Geese?
 
ooooh lol
 
Or UglyDuck - it's really a Swan.
 
Duck, duck, mock duck runs
 
ducks
 
5:07 AM
lol
 
people simply won't believe 3.0
> wait, you guys coded an IDE?
nope. that is the VBE.
 
...under there somewhere...
 
a mock framework. that hijacks the runtime and intercepts everything. that's.... wah
 
It's OK, you can still end a Property with End Function - we didn't move your cheese
3
 
LOL
 
5:11 AM
[rubberduck-vba/Rubberduck] build for commit 9c8ba72a on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] MDoerner pushed commit c4ee5cda to next: Additional safety for long procedure names in Excel.
> The flicker is necessary in the case where you have an existing VBA project with project-level compilation constants already blank. Perhaps when RD is first started on parsing a new VBA project, and it detects it has no project-level annotations, it should flicker to inspect the current setting. That would be one-time only and subsequent parsing can just refer to the project-level annotations. That would reduce the need to define the #Const constant (which I really dislike using - it's more
[retailcoder/Rubberduck] MDoerner pushed commit c4ee5cda to rd-next: Additional safety for long procedure names in Excel.
[retailcoder/Rubberduck] MDoerner pushed commit 88545576 to rd-next: Wrapped test Execution in try catch to catch COMExceptions and log them.
> The flicker is necessary in the case where you have an existing VBA project with project-level compilation constants already blank. Perhaps when RD is first started on parsing a new VBA project, and it detects it has no project-level annotations, it should flicker to inspect the current setting. That would be one-time only and subsequent parsing can just refer to the project-level annotations. That would reduce the need to define the #Const constant (which I really dislike using - it's more
[rubberduck-vba/Rubberduck] build for commit 4c5de3d4 on next: AppVeyor build succeeded
 
5:44 AM
> Top Follower followed by 1.52M people

Murray Newlands
@MurrayNewlands FOLLOWS YOU
 
preference for x = -y, or x = -1 * y
 
x = y * -1
 
me too
inspection for readability?
  Debug.Print - _
  x
FFS
 
NUKE ALL THE LINE CONTINUATIONS!!!
2
 
  Debug.Print -- _
  -- _
  x
 
6:12 AM
why do tests take half a century to run in VS2015?
 
[retailcoder/Rubberduck] retailcoder pushed commit ccac5f32 to rd-next: implemented rewriter methods. need an easier way to insert in the declarations section and appending members. Some failing tests fail because of extra whitespace/lines left blank,
 
TTGTB
</mug>
rewriter is starting to get tests passing again
 
6:37 AM
> Each member of FakeProvider could be a factory method that returns an object that's responsible for setting up & tearing down its own hooks... could we use the destructor for this or that would be too late?
 
 
3 hours later…
9:53 AM
> Parsing seemed much faster in 2.0.12 but now it takes longer again,
While it is Parsing, Indent shows Procedure and Project enabled but Module greyed out. If it's not ready shouldn't they all be greyed out?

When in Ready state:
Indent Current Project does nothing.
Indent Current Module works.
 
00:00 - 10:0010:00 - 00:00

« first day (1012 days earlier)      last day (2168 days later) »