« first day (1530 days earlier)      last day (1650 days later) » 

12:00 AM
@IvenBach System.Globalization IIR.
 
I wasn't even close...
 
RELOAD!
[rubberduck-vba/Rubberduck] 8 issue comments.
 
        if (character == default(char))
        {
            Key = (Keys)wParam;
        }
        else
        {
            IsCharacter = true;
        }
found it
@Comintern wait, the lParam?
 
WM_KEYDOWN, right?
 
yeah
for the Keys
but you don't get a char out of {backspace}
 
12:04 AM
In VBA F7 is to return to the coding pane. Is there an equivalent key for VS?
 
so I handled KEYDOWN as well
dang I keep mixing them up for some reason
 
Gimme a sec. I key getting the params mixed up too. Think wParam is the right one.
I may have mis-remembered that. The lParam is getting the scan code, so you'd have to track state of the the modifier keys.
 
so I did leave the modifier down in the basement
 
@Comintern Thanks for the assistance.
 
Checking on that the wParam is a vKey.
 
12:12 AM
if that message doesn't provide modifier (and I seem to recall from previous conversation, it doesn't), it might be time to consider low level keyboard hook.
 
It does. You just need to track the state independently because the modifiers will be sending their own keyup and keydown messages.
@this Office screws with LL keyboard hooks.
 
Right, so multiple messages which means keeping a state. Was thinking would be nice to avoid that.
 
I tried LL hooks for the hotkeys at one point.
 
make a new window message: YO_MICROSOFT_STOP_SCREWING_AROUND?
 
Actually, I seem to remember trying to feed the hotkeys from the subclasses once to introduce chord support.
Tracking modifier state independently does have some advantages.
 
12:21 AM
it does mean that we are going to introduce a new hot path, though.
(or rather make a already hot path, hotter)
 
Why is that path hot?
 
isn't it by definition?
it's listening to a message pump...
 
LOL
The only COM surface that touches is getting the code pane from the window that has focus. WM != COM.
 
IOW, if we do something moronic, users see it as painfully slow
I'm not talking about COM....
Don't you have to return quickly from the message loop for it to keep processing?
 
Oh, right. Definitely don't want to do anything in the pump with a ton of latency. Hotkeys just fire off an asyc command though.
 
12:42 AM
Does a VBA interface implementation require that the parameter names match?
That's the only possible rationale behind this code:
 
NAFAIK
 
        private void RenameParameter()
        {
            if (_model.Target.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Property))
            {
                var parameters = _state.DeclarationFinder.MatchName(_model.Target.IdentifierName).Where(param =>
                   param.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Property)
                   && param.DeclarationType == DeclarationType.Parameter);

                foreach (var param in parameters)
                {
Do we want to rename the parameter for all the concrete implementations?
 
the types must line up though
 
AFAICT we shouldn't really care about the types in that refactoring - I thought it was purely identifier based.
A parameter shouldn't need to rename anything outside of its own scope unless we want to make concrete interface implementations match the new name.
 
that code ensures the index parameter of an index Property Get is renamed in all Let and Set members too
Public Property Get Foo(ByVal oldName As Long) As Long
End Property

Public Property Let Foo(ByVal newName As Long, ByVal value As Long)
End Property
 
12:49 AM
Hmmm... That's tricky.
That section is the root cause of #4202. That expression wildly over-selects.
 
it means to get all Property members going by the name of the target [in that module], and rename their parameter (ideally iif their name matches the oldname)
 
Except it's matching the parameter name instead of the property name. Should be an easy fix. It also needs to match the scope of the module - that catches everything in the project at the very least.
 
2:11 AM
> Found this in the log file posted on #4202:

```
2018-07-17 16:24:49.7148;ERROR-2.2.0.3508;Rubberduck.UI.Command.Refactorings.FormDesignerRefactorRenameCommand;System.Runtime.InteropServices.COMException (0x800A09A3): Exception from HRESULT: 0x800A09A3
at Microsoft.Vbe.Interop._VBComponent.get_Designer()
at Rubberduck.VBEditor.SafeComWrappers.VBA.VBComponent.get_HasDesigner() in C:\projects\rubberduck\Rubberduck.VBEditor.VBA\SafeComWrappers\VB\VBComponent.cs:line 85
at Rubberduc
> The RS issue appears to be unrelated to the rename parameter issue. See #4273.
> FYI the `The expression you entered refers to an object that is closed or doesn't exist` is a fairly common error in Access, typically associated with trying to access an object that was loaded previously but has became unloaded (e.g. trying to reach inside a subform while in middle of closing of the parent form).

I have a hunch that the quickfix is trying to change the code module in an open Access form. Some changes are legal but some will require a reset of the code. Besides getting the
 
2:27 AM
@Duga Wow, 1.24 million Google results for the description. 4 for the actual HRESULT.
 
Maybe because Access errors are usually in the thousand range?
 
Don't you have to convert them from the unsigned HRESULT to get the internal version?
 
Maybe it is And Not vbObjectError
Never checked that.
The point being I bet you they never use the raw HRESULT value, always the native Access error numbers.
 
Normally in Excel you just take the low word, but that one spills over into the high word.
 
One typically get the raw HRESULT only with other libraries (ADO)
 
2:36 AM
That makes sense. All the Google results were getting it via COM interop.
 
Yeah. Sound like the quickfix may need a guard against monkeying with a document module that may not be in a state to be ... designed.
(Assuming that Im right that it is Access form or report. No other supporting evidence)
 
@FreeMan might remember.
I really don't know enough about VBA in Access to try and duplicate it.
 
Private Sub Foo(ByRef foo As Integer, ByRef goo As Integer)
    foo = 42
End Sub
 
2:49 AM
Should that ^ return a ProcedureCanBeWrittenAsFunctionInspection result?
 
It smells. What of Goo?
AIUI, even if it was assigned, it stills throw a result. It is up to the coder to make the call if it needs to be a function.
I would say that a function that mutates a parameter is bigger smell than a sub that mutates mulitple parameters, and a sub that mutates a sungle parameter is just dead wrong. But that is me,
 
We currently trigger the inspection if there is a single ByRef parameter.
 
See, that function has a different problem, not using the Goo parameter.
 
I'm changing the implementation to not trigger the result if the parameter is never assigned to.
@this Right, but lets say that it uses it and doesn't assign to it, but does assign to foo.
That could be re-written as a function because the real test should be a single ByRef parameter that is assigned to.
Extract the out parameter, convert it to the return value.
 
Hmm. Isn't it goung to flag a ByRef shoukd be ByVal inspection?
 
3:02 AM
booyah, Ctrl+Enter works
 
Nice!
 
For AC? Congrats!
 
Hopefully it doesn't start a new page.
 
(Why?)
 
yeah.. now if only I could get that dozen borked tests green again
 
3:03 AM
@this That's what it does in MS Word.
 
lol
actually
 
@MathieuGuindon Any thoughts on the ProcedureCanBeWrittenAsFunctionInspection?
 
if Outlook is open it might send an email
 
lol
Let's not do that either.
 
Thats prolly one of dumbest decision they made there.
 
3:04 AM
@Comintern I've been doubting of that one lately
it only fires in rather specific cases
 
Iassume ctrl enter is to enable block completion or ?
 
I was looking at ways to make it a bit more robust.
 
@this ctrl+enter is a "smart concat" feature
 
Ah ok
 
MsgBox "|" + {enter}
MsgBox "" & _
       "|"
MsgBox "|" + {ctrl}+{enter}
MsgBox "" & vbNewLine & _
       "|"
it's nice to have something that works in that whole AC mess
 
3:09 AM
Back to the inspection, checking whether a single parameter is mutated seems to make sense.
TBH, I am not terribly fond of any sub that mutates multiple parameters, they dont make for intuitive API.
 
I agree. You should be returning an object or a struct.
 
yes. So maybe a new inspection? That would then cover both scenarios.
 
I'd go for that.
 
Yes, I think that gets us better coverage. The new would also work for functions that mutates their parameters, too.
 
3:13 AM
quickfix: extract class -> creates class with a property for every parameter value
 
I'll hold off on the inspections of multiple ByRefs for now then - that's going to be better with an abstract inspection instead of a single concrete one.
@MathieuGuindon Oooo... I like that.
ProcedureCanBeWrittenAsFunctionInspection could use a quick-fix too, but that's a lot more involved because it has to modify all the call sites.
 
except if there's no call site
 
And prolly more than just the call site, too.
 
Foo(ByRef Bar(ByRef Baz(ByRef YouGetThePoint)))
That should kick out a PimpSlapInspectionResult though.
 
3:18 AM
I'm not even sure what that would do TBH.
OK, broke this test, but should that even be doing that?
            const string inputCode =
                @"Private Sub Foo(ByRef arg1 As Integer)
End Sub";

            const string expectedCode =
                @"Private Function Foo(ByVal arg1 As Integer) As Integer
    Foo = arg1
End Function";
That looks wrong to me.
Shouldn't that be:
            const string inputCode =
@"Private Sub Foo(ByRef arg1 As Integer)
	arg1 = 42
End Sub";

            const string expectedCode =
@"Private Function Foo(ByVal arg1 As Integer) As Integer
    Foo = 42
End Function";
 
New problem..., arg1 is now unused....
 
Hmmm... the problem with the top one is that it does nothing if you don't trigger an assignment to a ByVal parameter.
'Before
Private Sub Foo(ByRef arg1 As Integer)
    arg1 = 42
End Sub

'After
Private Function Foo(ByVal arg1 As Integer) As Integer
    arg1 = 42 < -Parameter   'arg1' is passed `ByVal` and assigned a value.
    Foo = arg1
End Function
 
3:33 AM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4274?src=pr&el=h1) Report
> Merging [#4274](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4274?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/2e5f26c2504d4b092d66e020f2a5698fc164506d?src=pr&el=desc) will **increase** coverage by `0.01%`.
> The diff coverage is `100%`.


```diff
@@ Coverage Diff @@
## next #4274 +/- ##
=========================
[rubberduck-vba/Rubberduck] build for commit 8b0f992d on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] build for commit 8b0f992d on unknown branch: 52.33% (target 0%)
 
4:07 AM
> Do we have any ideas on how to get the localized name without creating one?
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4274?src=pr&el=h1) Report
> Merging [#4274](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4274?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/2e5f26c2504d4b092d66e020f2a5698fc164506d?src=pr&el=desc) will **increase** coverage by `0.01%`.
> The diff coverage is `100%`.


```diff
@@ Coverage Diff @@
## next #4274 +/- ##
=========================
 
4:21 AM
[rubberduck-vba/Rubberduck] build for commit 1bca4f6c on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] build for commit 1bca4f6c on unknown branch: 52.34% (target 0%)
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4274?src=pr&el=h1) Report
> Merging [#4274](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4274?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/2e5f26c2504d4b092d66e020f2a5698fc164506d?src=pr&el=desc) will **increase** coverage by `0.02%`.
> The diff coverage is `100%`.


```diff
@@ Coverage Diff @@
## next #4274 +/- ##
=========================
 
 
3 hours later…
6:54 AM
 
7:08 AM
[rubberduck-vba/Rubberduck] build for commit eb283f6d on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
 
2 hours later…
8:50 AM
Does anybody of you know a good way to diff XML in case the children are in random order?
 
 
2 hours later…
@M.Doerner not directly. You might need to consider using a tool like this to first sort the children, then diff it the usual way? archive.codeplex.com/?p=xmlsorter
 
11:25 AM
Thanks, I will have a look.
I tried to normalize both sides via xmllint with the c14n parameter, but that did not help.
Btw, I need this to see where I messed things up in serializing projects.
The file sizes do not agree. So I guess I did some research wrong.
On the other hand, it might just be formatting.
Should I serialize the children in a predictable order, e.g. alphabetically by identifier name?
 
that might not be a bad idea. That would mean it would work even on GH's diff.
Hopefully it would not slow things down that much.
 
The command is quite fast atm and debug-only anyway.
Note however that the serializer returns the entire XML in one line.
 
don't you have to provide an attribute to make it indent?
indent-whitespace or something like that
 
For my comparison, I already spread it out using xmllint --format.
I have no idea. I did not write the serializer.
I only changed how the input gets generated.
 
12:00 PM
We seem to have a compilation argument for it, PRETTY_XML.
 
@Comintern & @this what is it that you're expecting me to remember? Something about #4202?
 
Whether that code that broke was on an Access form or report.
I have no direct evidence that it came from a document type, only a guess on my part based on the error message.
 
@MathieuGuindon velly nice!
@Comintern Me too!!!
 
My hunch was that the quickfix is blowing up trying to change code on a open Access form, which would be a uh.... moderately not so good idea.
 
@this Ah, no, the specific example I provided was in a cls module. As a matter of fact, that was almost the entire class...
Option Compare Database
Option Explicit
'@Folder PPTCharts

Private pColorID As String
Private pRed As Long
Private pGreen As Long
Private pBlue As Long

Public Property Get ColorID() As String
  ColorID = pColorID
End Property
Public Property Let ColorID(ByVal inValue As String)
  pColorID = inValue
End Property

Public Property Get Red() As Long
  Red = pRed
End Property
Public Property Let Red(ByVal inValue As Long)
  pRed = inValue
End Property

Public Property Get Green() As Long
  Green = pGreen
^ that is is
 
12:12 PM
Hmm.
 
from long ago & far away prior to adopting Mug's Private this as Ttype paradigm
 
it just seems too concidential that the log included a HRESULT that gaves an Access-esque error message.
or maybe it's not actually related to the quickfix at all.
 
@FreeMan I was thinking the log came from your second comment on that issue, the one about the recordset.
 
@Comintern Ah, gotcha. It's likely that both issues were covered in the same log. I use some variation of Dim RS as ADODB.Recordset all over the place, and only recently (after that issue was posted) was there a recordset attached to a form.
 
@FreeMan But if you had ran a quickfix and it was on an Access form that was open, or cannot be opened at that moment, that would cause the error, I think.
 
12:21 PM
That said, I am usually coding with a form open (a habit I will work on breaking) because I've got an auto-launch form in my DB. However, I only have 1 form in the entire project that has any data binding at all.
 
OK, that tracks with the log I think.
 
This particular Access error You tried to use an object that was closed or doesn't exist is very common, usually when changing or closing subforms, or something like that.
 
@this Changing the RS variable to something more meaningful wouldn't have had any impact on a form, though. Especially not when I'd posted that - the databound form didn't even exist then.
 
@Comintern just curious - would it be considered premature optimization to change the line var names = project.ComponentNames(); to var names = project.ComponentNames().Select(c => c.Name.StartsWith(baseName); ?
 
12:34 PM
@this Maybe. I can't imagine a module count high enough that it would matter much. Would also depend on the performance of string.Equals v. string.StartsWith.
 
remember that 180 module guy? ;-)
 
I don't really think you'd notice it until you got into like 6 digits.
 
More seriously, I wondered mainly because let's say we have 20 regular modules and 5 test modules. The worse case is now 25 modules * 5 iterations?
 
I have an Access database with over 300 modules and classes combined.
 
That 180 module guy was complaining that the RD takes 30 minutes to parse. Does it takes that long for you, too?
 
12:39 PM
When you do proper oop, you get there fast.
My modules are probably a lot smaller than his, though.
I can't say. No RD at work.
 
It's more sensitive to the number of test modules that have the default name. I suppose if you had 200 test modules with the default names out of 300 total modules...
 
In one project, they had 500 tables in SQL Server, and they have basically an almost-copy of every form for each table and then some more. That was very fun to refactor.... If his 180 modules are like that -- an almost copy pasta -- then I can see it being unnecessarily complex.
 
But even in that case, the performance impact of the optimization would scale with the proportion of test modules.
 
@Comintern Hmm. Interesting. I guess it's because I imagined that the Equal would have to scan all modules, not just those with the same prefix.
 
@this No, I was thinking that if you can equity check 2 strings in the time it takes to check a substring it makes more sense to leave them in.
 
12:46 PM
I see. In SQL the start-with pattern is totally sargable, so it's usually more beneficial to write a query that pre-filters using start-with, before applying a non-sargable wildcard or end-with pattern.
But then again, SQL has the index all setup. LINQ doesn't exactly have any indices to work with.
 
I have no clue what the C# implementations look like. How's this look?
var names = new HashSet<string>(project.ComponentNames().Where(module => module.StartsWith(TestModuleBaseName)));
 
Definitely premature optimization now. LOL. That's much more complicated than I'd have thought to try.
 
Hurts on small module counts, may do better for the case of TestModule1 ... TestModuleMaxInt.
 
Right cos you gonna pay the setup cost of the hash table.
 
TIL: sargable
 
12:49 PM
Hi folks :-)
I see new faces here ^_^
 
(German "Sarg" means coffin)
 
hey, @SonGokussj4! How's you been!
 
Hey, much much work and partys and actions and.... well, very much of everything. Tomorrow I'm going for a week to Italy :-) So I'm quite excited.
 
LOL. I guess we can imagine a sargable query burying zombies faster than they come up. A non-sargable query just can't fit any zombie in the coffin.
2
 
And I wanted to finish the translation before that. Which I did. A minute ago :-D
 
12:50 PM
Nice, @SonGokussj4!
oh, even better!
@MathieuGuindon ^^
 
@Inarion My favorite word in English derived from German is "defenestration". It means throwing something out a window.
 
That's German? For some reason I thought it came from French.
 
Fenster, fenêtre - rather similar
 
fenster = window
If it is derived from French (or Latin), it's still awesome that there's a word for chucking something out a window.
 
"Did you hear about Bob?" "Yeah, poor man. Defenestration is pretty... heavy."
@SonGokussj4 so you'll be opening a PR?
 
1:02 PM
@Comintern Happened in our country. :-) And there is a small speculation it will happen again soon. People are, once again, really pissed off.
 
Grrrr... AddTestMethodCommand has pretty poor coverage...
 
@this Yeh :-) I hope so. Right now I pulled upstream next, will check that up and if everything is OK, I will create one.
Oh. 4 more lines. That's cool :)
 
@SonGokussj4 Happens frequently around my place. Mostly with inanimate objects. :-D
 
@Comintern Oh, our definition is to throw people out :D I didn't think it could be used with inanimated objects :D
 
@Comintern Hopefully the windows were open. Or are you on a first name basis with the windows man?
 
1:05 PM
Yes. I had a cat once that loved to defenestration himself too.
And, I think switching from Windows to Linux should be called defenestration also.
3
 
lol
 
@Comintern There's a difference between "throwing something out the window" and "throwing out the window", but in general, I'm stealing that! :)
 
Okay. Translation done. Should I Commit and Push to my Repo when I "Clean Solution" in VS?
 
clean & rebuild, then run all tests to make sure nothing's missing
then yes can push
 
1:20 PM
Okay. So...
clean and rebuilded with ease.

How do I run test?

Test - Run - All Test?
 
yes
it'll take maybe 10 minutes; they should come up all green.
That helps you ensure that when you push you won't have AV fail on you
I do not expect any to go red just because you added some bunch of translation.
 
3 minutes run.
[14.08.2018 15:29:04 Informational] ------ Run test started ------
[14.08.2018 15:29:06 Informational] NUnit Adapter 3.10.0.21: Test execution started
[14.08.2018 15:29:06 Informational] Running all tests in C:\Users\jverner\OneDrive\GIT\Rubberduck\RubberduckTestsCodeAnalysis\bin\Debug\RubberduckTestsCodeAnalysis.dll
[14.08.2018 15:29:07 Informational] NUnit3TestExecutor converted 22 of 22 NUnit test cases
[14.08.2018 15:29:10 Informational] Running all tests in C:\Users\jverner\OneDrive\GIT\Rubberduck\RubberduckTests\bin\Debug\RubberduckTests.dll
 
1:37 PM
hm weird. no summary saying if any failed
I'll assume it all passed. So now yes, you are good to push to your GH repo. You then need to open a PR to push from your GH repo to RD's repo.
 
> Hi,

all lines should be translated.

There **will** be mistakes I will gradually fix in the future.
But for now, finished ^_^
 
I didn't add "select Czech" from the RD general menu. Just translations.
 
[rubberduck-vba/Rubberduck] build for commit e11e3ce1 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
^ that isn't your fault. AV tripped over its own feet.
just need to restart (only Mat can do that) or maybe push another commit enabling the Czech via the menu
 
rebuilding
 
2:01 PM
[rubberduck-vba/Rubberduck] build for commit e11e3ce1 on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] build for commit e11e3ce1 on unknown branch: 52.32% (target 0%)
> Awesome :+1: :tada:

If you want to, you can also translate the resources for the installer :wink:
 
only the custom messages need to be translated -- the InnoSetup already has translation for the rest of the chrome which I'm sure I can grab.
 
2:22 PM
:wink: would be no problem if I know how to. Don't see any .resx files there
 
morning gents
 
@SonGokussj4 it's not a .resx
it's a .iss file since it's for InnoSetup
 
Ah. So just manually create Czech.CustomMessages.iss and upload the file?
 
monking, @KySoto
 
and edit the Installer Build File.iss to add one extra line for that include, yes
 
2:29 PM
I'll try :-)
 
2:46 PM
a shortcut named "Repair VBE Addin registration" under the%nRubberduck's program folder will be available to all users.
Should I translate the shortcut name? Or will it appear in english either way.
 
hm, good question....
look in french/german
if it's translated, then yes
 
Ok :)
 
I honestly dont' remember if that name was localized. :(
 
Yeah. In French, it's translated.
 
Pulling my hair out over this... why can't I make a class module PublicCreatable with the VB_Creatable attribute?
 
2:51 PM
because VBA doesn't honor a number of module attributes :)
if it's public, it's not creatable
you need to expose a factory method of some kind
 
I can see that, every time I re-export it I'm back to =False
Factory method feels dirty, but if it's the only way...
Thanks for clearning that up @MathieuGuindon :)
 
curious how factory methods feel dirty?
they're essentially parameterized constructors as far as I'm concerned, I use them all the time
 
Maybe because I'm new to this it feels strange asking a procedure to get you a New object rather than getting one yourself
 
best results with VB_PredeclaredId = True and the factory method a simple Create function on the class itself
what I do find dirty is a "factory module" with CreateFoo public methods that can create any object and its mother
 
Can you explain the difference? I think I'm doing the latter!
 
2:57 PM
for me, there's no safety against accidentally using the default instance.
 
@this true. smokes & mirrors
Option Explicit
Implements IClass1

Private mSheet As Worksheet

Public Function Create(ByVal pSheet As Worksheet) As IClass1
    With New Class1
        Set .Sheet = pSheet
        Set Create = .Self
    End With
End Function

Friend Property Get Self() As IClass1
    Set Self = Me
End Property

Private Property Get IClass1_Sheet() As Worksheet
    Set IClass1_Sheet = mSheet
End Property

Private Sub IClass1_DoSomething()
    'implementation goes here
End Sub
 
Oh I see!
And you end up with the default instance?
 
(very different from the suggestion here: cpearson.com/excel/classes.aspx)
 
With New... returns a new instance
 
3:01 PM
Oh yeah I see..
 
and the interface isn't needed unless you need get-only properties
but if you do need them, then you can.
I have an article about it
 
Ah my god :-D "Installer Build Script.iss" file with spaces... :-D
 
it's.... quirky.
 
@this the build script with spaces, ...or the factory stuff?
;-)
 
sorry, build
i really should have renamed that file when I was futzing with that months ago.
 
3:08 PM
I mean I get it, you now have a default instance and the ability to store state in it. I guess I could "S"-prefix every "static" method, or whatnot. but since I pretty much always end up creating an interface for my exposed types, the only code ever referring to Foo over IFoo, is code that works off that default instance anyway
 
So. I cant do new pull request? I can just view the one from before
 
Does IClass1 need to have BV_PredeclaredID =True?
 
@SonGokussj4 you can if you make a new branch
@CallumDA nope
the interface is indeed public, not creatable :)
no code ever needs to instantiate an interface
 
[rubberduck-vba/Rubberduck] build for commit d2db898c on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
3:13 PM
hmm do we have an inspection for Set foo = New IFoo?
I don't think VBA prevents you form doing that, right?
 
not that I know of, but would be useful
correct
 
> Made a quick translation for InnoSetup. Quick != bad :-)
 
Now, that's quirky - letting you instantiate an interface. In VBA's POV, everything's a class, I guess. :\
 
[rubberduck-vba/Rubberduck] build for commit d2db898c on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
@Duga haven't had your coffee yet or what?
 
3:17 PM
lol
 
> this is the same PR as #4275
[rubberduck-vba/Rubberduck] build for commit d2db898c on unknown branch: AppVeyor build cancelled
BUILD FAILURE!
 
@MathieuGuindon more like too much coffee
 
Yeah... a chocolatey one apparently
Oh, "PR was closed" ...keep up, Mat, keep up!
 
> AppVeyor failure seems unrelated to the changes. Apparently innosetup could not be installed on AV. The Installer changes look good to me :)
 
Hmm. Kind of don't know what happened now.

1) I've commited, pushed and made PR for the resx files
2) Then I translated InnoSetup file (added one, modified second), commited and pushed to my Repo
3) Because new PR can't be done, I've created New Branch and pushed that branch to my Repo
4) Created PR from that branch (which have the modified InnoSetup files)

Now I read, as @Vogel612 wrote, that they are the same?

I'm kind of lost.
 
3:23 PM
check the commits that they refer to
if you update your repo for an open PR, the PR automagically gets updated as well :)
 
I can't get Set .Sheet = pSheet to work
I made IClass1 property public but don't seem to have access to .Sheet
 
@Vogel612 Aaaahhhh. Okay :-) That's cool. So InnoSetup changes are there.
 
@CallumDA the interface doesn't need to expose a setter, only the concrete type - the concrete type is what your factory method needs to be working with /newing up
i.e. you go With New MyClass, never With New ISomething
reading through that article again, I think I see my mistake. I shouldn't have gone into abstract factory territory, and kept it a simple factory
I'll edit the post
 
^^ might be what's been throwing me off...
 
3:50 PM
> [rubberduck.zip](https://github.com/rubberduck-vba/Rubberduck/files/2287582/rubberduck.zip)

I attached my RubberDuck config file and an example workbook.

When I use the Indenter, variable declarations that were already indented per RD settings revert to no indentation, declarations with no indentation are indented properly per RD settings and variables with indentation that doesn't match the RD Indenter settings gets changed to a different indentation level that also doesn't match RD set
 
@Duga yikes!
 
@skiwi Oh mr. master guru of many browser tabs. Do you use any extensions for reorganizing your tab order?
 

« first day (1530 days earlier)      last day (1650 days later) »