« first day (1595 days earlier)      last day (1585 days later) » 
00:00 - 19:0019:00 - 00:00

12:00 AM
RELOAD!
[rubberduck-vba/Rubberduck] 1 opened issue. 10 issue comments.
 
 
1 hour later…
1:15 AM
If you see something, PR something.
 
1:40 AM
[rubberduck-vba/Rubberduck] retailcoder did something with some project card
Remove content hash from the QMN

Calculating the content hash of the module on creating of a QMN is actively hurting their usability in hot-paths. The content hash was not really used and only was left there because it seemed to prevent some strange behaviour of COM components. Testing, I did no longer run into the strange behaviour. So, I think it is prudent to remove the content hash.
Merge pull request #4443 from MDoerner/ExtractContentHashFromQMN

Remove content hash from the QMN
 
1:52 AM
[rubberduck-vba/Rubberduck] build for commit 050c0a70 on next: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4418?src=pr&el=h1) Report
> Merging [#4418](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4418?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/8d26793249e32cb20ae522815b0d14c713378be4?src=pr&el=desc) will **decrease** coverage by `3.55%`.
> The diff coverage is `56.03%`.


```diff
@@ Coverage Diff @@
## next #4418 +/- ##
=========================
 
========== Clean: 3 succeeded, 13 failed, 0 skipped ==========
so uh, how do we clean+rebuild when clean fails?
oh, twit
perhaps having all projects loaded would help
========== Clean: 15 succeeded, 4 failed, 0 skipped ==========
hmm
5>ALINK : warning AL1053: The version '2.2.*' specified for the 'file version' is not in the normal 'major.minor.build.revision' format
looks like I messed something up
 
No that is ok. From the csproj pr.
 
ok, finally finished
========== Rebuild All: 19 succeeded, 0 failed, 0 skipped ==========
woot!
 
2:05 AM
Pretty sure i was able to build even with the warning. Are you getting errors with xaml intermiedate files?
Lol. Too slow. Glad it's sorted
 
the build output is a dozen kilometers long.. grammar warnings are worrying (though, they'd been there all along)
 
Ikr?
Not sure if some of warning are overly pedantic. I understand vogel suppressed a number of them already
Originally it would be hundreds of kilometers long as opposed to merely a dozen
 
2:33 AM
#DidYouKnow Rubberduck is written with the latest version of #CSharp? ...and as of 5 minutes ago, uses the new .csproj format! Massive props to @vogel612 for this beautiful #TechDebtPayment PR! #Kudos #OSS #Hacktoberfest
 
 
1 hour later…
4:02 AM
Any ducks up? Where can I find an example of parameterized unit tests?
 
4:24 AM
Found them unit tests.
 
4:44 AM
@M.Doerner RE: your comment github.com/rubberduck-vba/Rubberduck/pull/… about annotationList vs annotationContext.
I see that annotationList is defined in Rubberduck.Parsing.Grammar.VBAParser.g4 github.com/rubberduck-vba/Rubberduck/blob/next/…. While annotationContext is a partial class, which is auto-generated.
@TweetingDuck @Vogel612 well done on your Tsunami deletion spree.
Part of the partial class we define in github.com/rubberduck-vba/Rubberduck/blob/next/… and the other, being auto generated isn't directly found in the code base?
It's found locally under Rubberduck\Rubberduck.Parsing\obj\Debug and I don't know :thinks:
It's within an obj\Debug folder which doesn't exist on the repo...
Don't know how to wordify what I'm thinking.
What's the difference between the annotationList vs annotationContext?
This deals also with github.com/rubberduck-vba/Rubberduck/pull/… and using the static method I take it.
 
5:18 AM
I'm traipsing around where AnnotationContext is used and stumbled onto ANNOTATION_MARKER.
What do I use to generate an AnnotationContext? I can't figure out on my own what the significance of it is.
I won't be making progress on this PR until I can grok this concept to fully understand all the comments.
 
5:37 AM
Do I use the VBAParserAnnotationFactory to create an instace of an IAnnotation which then lets me access the VBAParser.AnnotationContext Context property?
Hey @M.Doerner are you available to lend me a few breadcrumbs?
 
@IvenBach I see your problem. I have worked with antlr so much now, that I did not even think that it might not be clear.
Only a bit.
 
It's as clear as mud.
 
I have to go to work in a few minutes.
 
So you have a few minutes to explain.
 
When you look in the grammar, you see a lot of parser rules.
The parser generates ParserRuleContext subclasses for them all.
 
5:40 AM
And the grammar is defined in Rubberduck.Parsing.Grammar.VBALexer.g4 or VBAParser.g4?
 
They follow the naming convention GrammarName.RuleNameContext.
 
I attempted to show my attempt at understanding. I'm trying not to just open my mouth and ask for food from the other adult ducks.
Is there an example you could point me to?
 
So VBAParser.AnnotationContext is the class generated for the annotation rule.
The ParserRuleContext classes are the tree node types.
 
:confused:
 
Have a look at the parse tree extensions class somewhere in Rubberduck.Parsing.
 
5:46 AM
Looks like we have a surprise visit from @UnhandledException.
Welcome to the pond!
 
Moreover, take a look at AnnotstionListener in Rubberduck.Parsing.VBA.Parsing.
And have a look at the visitors in SCP service and in the empty module inspection.
That should provide some background around the Antlr concepts I mentioned in my comments.
But for the very basic thing antlr does:
 
@M.Doerner github.com/rubberduck-vba/Rubberduck/tree/next/… should there be an AnnotationListener?
All I see is AttributeListener.
 
Oh, I misremembered.
Rubberduck.Parsing.Annotations
So, you already know that antlr generates a tree representing the code, right?
 
I saw this earlier. I seem to lack the ability right now to figure out it's importance.
^^Nope.
I know antlr does "stuff" and we use that stuff somehow.
Other than the Lexer generating the tokens at some point I've no clue what's actually occuring.
 
You use it, the IParseTree, in your current PR.
It is not important atm what exactly antlr does, only what it does in general.
 
5:58 AM
I'm using IParseTree without fully understanding what else could be used.
 
You put on a string and tell the parser that you think that it adheres to a grammar rule, startRule say.
Then it generates a tree based on the grammar.
Each node of the tree represents a grammar rule matched in the string.
All of them are of the subtype of ParserRuleContext corresponding to the rule matched.
 
>
Public Const UnitTestMode As Boolean = False
#If UnitTestMode Then
Private Assert As Rubberduck.AssertClass
#Else
Private Assert As Object
#End If
 
ParserRuleContext implements IParseTree, which is why we can hide away the concrete type.
Now, I have to go. Have a look at the extension methods and ask if you have questions. I will be back in chat later.
 
Thanks. My higher brain function is at such a low level right now I'm not getting much understooderized.
 
Hi all,
I was the guy who sent Mat the email with the VBA issue on 64-bit hosts (compared to 32-bit hosts) regarding the class terminator.
Just was looking here first time.
 
6:08 AM
I think all the other ducks are napping right now.
 
Yo, the tme shift is quite huge.
 
They'll be active in about ~5-6 hours.
 
No Problem.
Where are you from?
 
California.
Several of the ducks are in USA/Canada.
 
Oh, so you're on night shift righ now? ;-)
About Mat I already knew this. I'm from Germany.
 
6:10 AM
No. Trying to get some info understood to address PR comments.
IIRC We have some German contributors.
 
Nice to know. I found a different VBA 64/32 incompatibility meanwhile and already sent it to Mat. Maybe he will discuss it here also. Would be fine.
 
I'm heading to the nest right now. Keep the pond safe and come back when there are more ducks awake.
</iven>
 
6:45 AM
@UnhandledException Welcome! And thanks for mentioning this strange incompatibility/undefined behaviour.
Btw, I am from Germany, too, Cologne to be precise.
@IvenBach Get a good sleep.
When you want to tackle the problem again, running through the output tree for a simple example might be quite educational.
I would suggest a module only containing '@Folder("SomeFolder").
Anything else gets rather involved rather fast.
Hm, I think I might write up a wiki page on Antlr basics along an example.
However, that will take some time.
So, for the simple example:
The root node in the tree will be of type StartRuleContext.
It has exactly two children, one of type ModuleContext and one of of the token type for EOF.
@IvenBach You might want to try to complete the tree later.
 
@IvenBach: cu, have a nice rest.
@M.Doerner: Cologne isn't far away, I'm very close to Düsseldorf, but that shouldn't be a Problem here, or? ;-) lol
@all: BTW, I raised a uservoice here. Feel free to vote: excel.uservoice.com/forums/…
 
@UnhandledException that is not the externally visible link
 
Oh sorry, my fault. Here it is:excel.uservoice.com/forums/…
 
 
3 hours later…
10:44 AM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4426?src=pr&el=h1) Report
> Merging [#4426](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4426?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/8d26793249e32cb20ae522815b0d14c713378be4?src=pr&el=desc) will **decrease** coverage by `3.83%`.
> The diff coverage is `n/a`.


```diff
@@ Coverage Diff @@
## next #4426 +/- ##
==========================
 
10:58 AM
That's interesting - cleaning generates warning now.
 
[rubberduck-vba/Rubberduck] build for commit 2872a051 on unknown branch: AppVeyor build succeeded
 
@Duga this will of course still fail; it should build but not all tests work
 
11:51 AM
[rubberduck-vba/Rubberduck] build for commit 9250fde6 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
@MathieuGuindon does that mean @MathieuGuindon we won't have this on our roadmap?
uh sorry for the double ping editing the text made the whole thing as white on the white dialog box
 
It never really was anything more than a discussion, and it's a lot of work and Tim did it. I think we could (should?) integrate a UI client for it though.
 
as in interacting tim stuff later as API level?
fair enough otherwise the topic is still at discussion level
 
Better to have found it elsewhere than to reinvent the wheel, I say. :)
If Tim does solve the challenges with a project management system for VBA, I'll be very happy, and totally can see a UI integration for it.
 
12:26 PM
Does anyone know where the default for log is stored? In the file or set via code or what? The GeneratlSettings doesn't seem to set any defaults beside CompileOnParse
 
Wouldn't that be in the Settings.settings file under Rubberduck.Core.Properties?
 
ah, yes, silly me
 
12:51 PM
> Closes #3861

Introduces new setting that isn't UI-visible, `UserEditedLogLevel` that allows us to ship Rubberduck with `Trace` as the default logging level. If the user do not edit it, at the shutdown of the Rubberduck, the log level will be changed to `None`.
[rubberduck-vba/Rubberduck] build for commit eb9353a1 on unknown branch: AppVeyor build succeeded
 
0
Q: Loop each items are the unique solution to retreive one specific property from one collection object?

Fabriziowith this code I add item/properties into my collection: Public RateSTD as Collection Public Sub mCaricaRateSTD() On Error GoTo RigaErrore Dim rng As Range Dim c As Range Dim newRate As ClsRate 'ClsRate are Class Module If Not RateSTD Is Nothing Then Set RateSTD = Nothi...

 
2:06 PM
morning
 
2:50 PM
I'm about to go on a double-sided rant.
15
Q: Anxiety attack at work, caused by colleague, how to handle?

CyonisI have a colleague who thinks he knows everything better than me. Sure, he knows many things, but not everything. He knows quite some things better than me, but I also know other things better than him. Yet, he believes he knows everything better than me. He pulls up my changes and starts critic...

#1, if it really is renaming Request to RequestClass, then that guy is both a bad programmer and a jerk.
#2 "professional, university-educated .NET developer who knows her stuff"--"university-educated" and "knows [] stuff" are almost entirely contradictory.
There are some devs who learn their stuff in university (Jeroen for one--he was taught by Harwell...), but the vast, vast majority "university-educated" devs are useless.
And, Jeroen did a TON of stuff outside university, and probably learned just as much that way.
/rant
 
3:21 PM
@Hosch250 keeps an eye on VBA-Rubberducking in sidebar, sees /rant, right click Open in new window xD
 
LOL.
 
@Hosch250 Just Googled these folks, looks like you're talking about your Roslyn co-contributors?
 
Sam Harwell is the guy who helped write ANTLR and converted it to work with C#.
And yes, he does a fair bit of work on Roslyn too.
And Jeroen Vanneval was the CR guy who introduced me to Roslyn
 
Oh, when I was searching Harwell Jeroen developer, I found Sam Harwell's name accurately with Roslyn, though unless Jeroen Vanneval goes by Jeroen Wellen online, I found the wrong Jeroen in the same thread.
 
If you "transpose" over one dimension, you still get a single dimension. To conceptualize this, picture a line. Now attempt to rotate it in a way that a given point on the line has different degrees of freedom (i.e. can move in a different direction). — Comintern 56 secs ago
I hope OP tries that. Hopefully it doesn't consume the rest of the day...
 
3:32 PM
@puzzlepiece87 No.
I'm not sure whether to laugh or cry.
I was just told to write a unit test verifying the return type of a method.
So, reflection FTW.
public void ReturnsByteArray()
{
    var returnType = typeof(MyType).GetMethod(nameof(MyType.MyMethod)).ReturnType;

    Assert.AreEqual(typeof(byte[]).FullName, returnType.FullName);
}
 
@Hosch250 That strikes me as an odd request for a unit test.
 
IKR?
 
WTH?
 
3:49 PM
@Hosch250 I presume the method returns object?
 
No, it returns byte[].
It's a bytestream of an image.
That we generate from an HTML string with a WinForms WebBrowser.
 
that person doesn't know that it won't even Fn build if it doesn't return a byte array?
 
They do.
 
Assert.ThisCompiles(byte[] foo = bar.FullName);
 
They aren't that stupid. And I even told them.
 
3:51 PM
@Hosch250 well the request begs re-evaluating that assertion
 
LOL.
No, they are one of our senior guys, and they are pretty sharp. I think they might just be trying to hit a number on this one, though, because we want everything to be tested.
I'm not certain they evaluated what is really important to test, though...
Which might be a hint at the past, when management told them to stop testing because they spent as much time maintaining tests as they did on new code.
 
anyway, good test. will fail if they change it to object or dynamic, so... #MissionAccomplished, I guess
@Hosch250 sounds likely
 
If they're trying to boost coverage by forcing a use, your solution will disappoint them.
 
LOL.
No, we don't measure coverage.
The guy that just left did personally.
But nothing publicly and generally visible.
Sometimes I'm tempted to ask if that company that has a position for a tech lead to migrate them to the web still has the position open.
Just think--an opportunity to do it right!
OK, they liked that test :)
LOL. I bet it maybe would increase one line of coverage tops.
 
I've been trying to convince my manager that writing any unit test is a productive use of my time.
 
4:12 PM
@Comintern I know it sounds terrible but have you thought of intentionally implementing a problem into code that's easily fixed? Then when code barfs you can subtly mention "Ya know... Unit tests would have caught this. I can't remember everything all the time."
 
No, but I've pointed to several times I've make the same stupid configuration mistake with our twitchy API.
 
You're too honest to sneak it in when he's not looking?
 
Why sneak it in if you don't need to?
 
^
I don't want it to sneak in. ;-)
 
:confused:
 
4:19 PM
@IvenBach If I could put a decent unit testing suite together, I could just run the unit tests instead of waiting on a 5 or 6 hour process to crash because I forgot to convert a field from unicode to ascii or something dumb like that.
The 2 minutes to fix, 5 hours to "test" development model leaves a lot to be desired.
 
Isn't that itself enough reason for the test suite?
Or are you saying you'd rather have it formally approved instead of sneaking the tests in.
 
Among other reasons. And don't get me wrong, I do add unit tests when I can - it's just that the code base needs a couple thousand more.
 
@IvenBach I can imagine the boss going, "Why the F are you wasting your time and my money on this B.S. while there's things to be fixed!"
 
Glad I don't have that kind of work environment.
 
4:23 PM
LOL.
 
It's not like that really. It's more like this:
 
"I'm fixing things for the last time; this will make sure it stays fixed."
 
Boss: What are you working on today?
Me: Trying to figure out how to make this possible problem moot.
Boss: Let me know if you run into problems.
 
Him: "So what did you do last week?"
Me: "Wrote unit tests."
Him: "So, nothing then..."
 
You just need to rephrase that.
You: "Made sure problem X, Y, Z, et al will never happen again."
Him: "Really? How'd you do that"
You: "Unit tests"
Him: "So, nothing then..."
 
4:25 PM
Yeah, my 1990's code phraseology is a bit rusty.
 
I wrote tests to check for these problems we had previously. They automatically run every time ensuring we don't have those problems again.
 
@Comintern At least he's a bit nicer about that. ;) Seriously, that buy-in is a big challenge.
It shouldn't be but it is.
It's more pronounced when you're dealing with tightfisted clients who want to see results right now or yesterday.
The good thing is that we can and do tell them at the upfront that if they don't pay for testing, they have no guarantees whatsoever. They get exactly what they pay for.
 
Oh, our clients are like that. It's more a matter of "downtime" between client projects. That's part of the reason some of this steaming pile of codebase exists.
I estimate in "infrastructure improvement time" into my quotes.
 
Oh, I know the pain. We have a library of code that get re-used in various projects. Only that they get tweaked here and there and every project has a version X.Y.Z.A of the same thing. Drives me insane and I've been working at harnessing them.
but it's not a work done in a night. Maybe one day.
 
My philosophy is that if I'm charging you to reuse some hurried code for another client, you get a break on the upfront development time, but you also get to pay some of the tech debt.
 
4:30 PM
Yeah, sounds reasonable.
 
4:51 PM
Is anyone available to assist me in understanding how to get a StartRuleContext?
 
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4441?src=pr&el=h1) Report
> Merging [#4441](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4441?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/8d26793249e32cb20ae522815b0d14c713378be4?src=pr&el=desc) will **decrease** coverage by `<.01%`.
> The diff coverage is `100%`.


```diff
@@ Coverage Diff @@
## next #4441 +/- ##
=========================
[rubberduck-vba/Rubberduck] build for commit c80cc17a on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
@Duga That happens far too much. I'm inclined to pull a Nuget package instead....
@IvenBach IIRC, Mat already gave you the syntax when you were learning delegates
 
Reviewing now to see if I can understand it.
 
@IvenBach I will be away in a few minutes, but here is short hint:
The IParseTree you get from the parser is actually of the rule context type of the rule you called on the parser.
You can try to cast it to that type.
 
5:10 PM
@IvenBach you get it from the parser, and - oh look - the delegate argument is taking a VBAParser parameter, so you can do parser => parser.StartRule() (or call it p, or t, or whatever) and that returns a StartRuleContext : IParseTree
 
I'm kindergarten coloring my way out of this conundrum.
 
just call the stringparser.parse method. as you type the comma, watch intellisense telling you that the parameter is a delegate type. so you pass an anonymous function as a parameter, and that function has to have one parameter, of type VBAParser - because that's what the delegate type says the parameters are for that anonymous function - so you type the name of the parameter, followed by a lambda operator
it's completely identical to typing .Where( and then being told "I need a Predicate<Foo> parameter", so you type foo => and proceed to write a bool-returning expression that involves foo, which has to be of type Foo, because Predicate<Foo> says so. (Predicate<Foo> also dictates that the expression must return a bool)
so here it's the exact same thing, except instead of a Predicate<T> delegate you need a ParserStartRule delegate
and like Predicate<T> is a Func<T,bool>, a ParserStartRule is a Func<VBAParser,IParseTree>
the function you provide will be invoked further down the call stack, when needed
if it's less confusing you could even new up the ParserStartRule delegate, but then R# will tell you that that's redundant
 
5:37 PM
High level I get the idea. Now just working through the actual usage in the code. Relating it to Predicate<Foo> helps me use something I'm somewhat comfortable with and apply it to a slightly different concept. Thank you very much.
How does the Parse method know that the t which is supplied as an anonymous function (delegate) is of type VBAParser?
 
same way Where knows the foo is of type Foo above
 
@IvenBach Because it looks at the definition for the Parse method.
 
the delegate demands it
 
When you look at Parse, it says there.
 
code wouldn't compile otherwise
 
5:43 PM
the same way the compiler know that when you assign var foo = somethingThatReturnsBar();, the foo will be of type of Bar.
 
public static (IParseTree parseTree, TokenStreamRewriter rewriter) Parse(string code, ParserStartRule startRule, ParserMode mode = ParserMode.Default) is the signature but I don't see where VBAParser is defined.
 
ParserStartRule is a delegate type
 
Remember, it's just a different way of referencing a function. Rather than referencing it by its name, you reference it by basically inlining the function body.
 
mentally replace it with Func<VBAParser,IParseTree>
it's a function that takes a VBAParser parameter and returns a IParseTree
 
public delegate IParseTree ParserStartRule(VBAParser parser); ok... I see that and I'm comfortable.
 
5:45 PM
Good.
 
wait...
 
That's basically a function definition, like I said before.
 
wait for me... I'm catching up....
 
lightbulb moment in 3... 2...
 
:click: OK. Now I get it... :hangs-head:
 
5:46 PM
Good. NOw tell us what you understood.
 
LOL. Perfect timing on the countdown.
 
^
 
That you're all way ahead of me in this stuff...
 
Nice try.
 
I can't process new concepts and type at the same time.
The delegate is by definition taking an a VBAParser variable.
 
5:47 PM
Do you use R#?
 
parameter
 
IvenPedantry--
 
If you do, you can type it explicitly, and then work through why it recommends simplifications or refactorings.
 
It'll do whatever-happens-to-be-defined-as-a-delegate-or-function-etc... and return an IParseTree that can then be used.
I have R# at home but not at work.
 
ok. for fun, instead of t => t.startRule(), do new ParserStartRule(
what's intellisense asking for?
 
5:48 PM
R# taught me more about LINQ than I figured out on my own.
 
new ParserStartRule( is asking for an ParserStartRule(IParseTree (Parsing.Grammar.VBAParser) target)
The way that's shown confuses me.
 
IParseTree is the return type.
 
Fascinating, I actually didn't know you could new a delegate like that.
 
Then you get the parameters in the parenthesis.
And I think target is the name of the parameter you are assigning the new ParserStartRule to.
 
5:53 PM
@this Welcome to "Learning time with cousin Iven"
 
I've always just defined the delegate, then assigned it to some function definition. But then again, I'm pretty almost all of my uses of delegates has been with events.
lol
 
Thanks Hosh. That helps easy some of my confusion.
 
@this It's basically a c# 2.0 lambda function.
 
@Comintern Ah. When I was learning, I was far too green to even have known of it (and didn't then take C# for a long while after that brief foray w/ 2.0)
 
I've see and can navigate what's in front of me. Working it into comprehension on the more abstract level.
I've officially seen how var can both simultaneously make code easier to read while obfuscating it for new coders.
:comprehension-rumblings: can you feel it?
 
6:03 PM
TBH, it's been more like an earthquake compared to how long it takes a lot of people to pick this stuff up.
 
:smiles: OOOH!
You provide the Parsemethod with a string code and ParserStartRule startRule and posible the optional argument which I'm ignoring for now.
 
@this what's this newing up? myObj.SomethingHappened += new MyEventHandler(HandleSomethingHappened);
@BKSpurgeon that's because they are "delegates that take on subscribers" - event is mere syntax sugar, nothing more. — Mathieu Guindon Jun 29 '17 at 0:29
 
Within Parse it news up a SimpleVBAModuleTokenStreamProvider() which invokes the method public CommonTokenStream Tokens(string code). You provide code as the argument` and get back tokenStream of type CommonTokenStream.
 
yeah well that's just that parsing boilerplate details
the interesting part is that instead of invoking & returning the result of parser.startRule(), it invokes & returns the result of whatever ParserStartRule function you provided
 
Then tokenStream is provided as the argument for new VBAParser(tokenStream) which has the signature of public VBAParser(ITokenStream input) : base(input).
 
6:09 PM
i.e. you can make it parse a blockStmt directly, if you know that's what your string code is
 
It's all this boilerplate details that I have to learn still.
 
this ability is useful for e.g. block completion, when I'll want to get a parse tree for a generated For loop body, and retrieve the placeholder tokens - I know I want to parse a For loop, so I tell it to parse a forNextStmt (whatever it's called)
 
mumble mumble parser gets fed to ParseInternal mumble parser argument used by delegate invocation mumble muble tuple return.
@Comintern I feel like I'm taking forever to learn it.
 
Nah, some programmers don't know this stuff. Just check the c# tag on SO if you don't believe me.
 
The difference is I want to learn it so I can write better code.
Because I want to learn make it feel like a really long time.
 
6:19 PM
No, you want to know it.
If you wanted to learn it, you'd be perfectly satisfied.
 
@IvenBach you got Skeet's book, right? time to re-read the part about delegates :)
 
Yes. The additional comprehension will help me get more out of it this time.
 
deliwho's?
 
We were slated for a release on Thanksgiving.
I just noticed it, and my boss is cancelling it. I said it was an awesome timing to have down time.
 
6:31 PM
@M.Doerner So at least in this example github.com/IvenBach/Rubberduck/blob/… result.parseTree will also be of type StartRuleContext?
 
of the type returned by the StartRuleContext function/delegate
i.e. some ParserRuleContext : IParseTree
FTR delegates, type inference, inheritance, and polymorphism are at play here, all at once
 
> Rubberduck's type library is late-bound, so RD is already not required for running non-test code paths. The advantage of using precompiler directives would be to enable early-binding (and thus intellisense) - but then if RD is early-bound, it needs to be referenced... and if RD isn't installed, then it becomes a missing reference, which breaks the "doesn't require Rubberduck to run" premise, because then the project won't be compilable/runnable.

So no, we can't do that: `Rubberduck.AssertCl
 
00:00 - 19:0019:00 - 00:00

« first day (1595 days earlier)      last day (1585 days later) »