« first day (1293 days earlier)      last day (1887 days later) » 

12:00 AM
RELOAD!
[retailcoder/Rubberduck] 70 commits. 10436 additions. 5575 deletions.
[rubberduck-vba/Rubberduck] 52 commits. 3 opened issues. 4 closed issues. 13 issue comments. 7115 additions. 8637 deletions.
> Reinstalled LibGit using just NuGet to handle all dependencies. Now VS copies the native .dlls directly into. Modified the .iss script to copy this time these new .dlls. Also modified the Rubberduck.Inspections postbuild event to handle copying the .dll regardless of the build configuration. It should all compile
[rubberduck-vba/Rubberduck] build for commit bb5075b2 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
@Duga WTF :(
 
Indeed.
this looks funny.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(5074,5): error MSB3073: The command "if "Release" == "Debug" ( [C:\projects\rubberduck\Rubberduck.Inspections\Rubberduck.Inspections.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(5074,5): error MSB3073:    copy "C:\projects\rubberduck\Rubberduck.Inspections\bin\Release\Rubberduck.Inspections.dll" "C:\projects\rubberduck\RetailCoder.VBE\bin\Debug" /Y
 
what is that supposed to mean?
AppVeyor didn't like my postbuild script?
 
Duck check: If a class implements an interface explicitly or it's implicitly derived then the use of Foo as IBar should evaluate to True?
 
@NelsonVides not sure - TBH, I don't know if it's a batch trying to do if "Release" == "Debug" which would be impossible
and thinking that because it's failing, it's somehow taking Debug configuration, so it's trying to send the file to the Debug folder that doesn' exist there
but I don't know if I read that right.
@IvenBach rephrase your question pls
 
12:14 AM
if "$(Configuration)" == "Debug" (
   copy "$(TargetPath)" "$(SolutionDir)RetailCoder.VBE\bin\Debug" /Y
)
if "$(Configuration)" == "Release" (
   copy "$(TargetPath)" "$(SolutionDir)RetailCoder.VBE\bin\Release" /Y
)
that's the actual script
 
possibly.
and up there, it's supposed to use relee all the time
 
I mean, that's what I wrote on the PostBuildEvent
 
so ok, so this is right, then
 
using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
	public static void Main()
	{
		var foo = new Foo();
		Console.WriteLine(foo is IBar);

		var duk = new Duk();
		Console.WriteLine(duk is IBar);
	}
}

public class Duk {}

public class Foo : IBar {}

public interface IBar {}
@this ^
 
@NelsonVides and it works locally?
 
12:15 AM
That comes up with the results I'm expecting.
 
$(Configuration) is an environment variable that takes as a value the configuration selected for the build
 
correct
 
@this yeap, flawlessly
 
so the above output is correct
 
When using reflection to get the types of an assembly I'm not experiencing that behavior.
 
12:16 AM
but it's the part after that just don't jive
it still picked the debug folder
@IvenBach yes, you don't have to explicitly implement an interface - simply inheriting is sufficient
for an implicit cast
 
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Reflection;

namespace RubberduckTests.Inspections
{
    [TestClass]
    public class InspectionTypeExistsInResourceFileInspection
    {
        [TestMethod]
        [TestCategory("Inspections")]
        public void NamesFoundInResourceFiles()
        {
            //var inspectionAssembly = Assembly.GetExecutingAssembly();
            var inspectionAssembly = Assembly.GetAssembly(typeof(Rubberduck.Inspections.Concrete.ApplicationWorksheetFunctionInspection)); //TODO: Elegantly fix
.Where(inspection => inspection is IInspection) causes nothing to be populated and I am incapable of determining why that is.
 
maybe somebody more fluent on BuildEvent directives can provide a better insight, but as far as I understand, my build is perfectly fine (hope so)
 
hm, movse over the inspection to the left of the =>
what is the type of that?
 
System.Type
 
need to sleep, see ya tomorrow!
 
12:21 AM
That's why
you can't do that way
it's not an actual inspection
ok so my memory is a bit foggy but a System.Type should have a list of interfaces...
aha, yes, perhaps this.... msdn.microsoft.com/en-us/library/…
that way, you can do a LINQ on the all available interfaces that the System.Type supports.
#ProTip always check the type of what you are working. Naming it inspection does not magically make it a inspection type. :)
 
AppVeyor support replied, they say it's the post-build event in the inspections dll.. Isn't that setup only for debug config?
 
@Mat'sMug did you see @NelsonVides's script?
he was using it for release, too, I guess
 
No
 
@NelsonVides @Mat'sMug this
 
Why not just make the $(configuration) part of the path?
 
12:27 AM
that might work, yeah. just one line
 
@IvenBach totally expected. You're doing reflection, so you're working with the type system itself
 
no if'ing
 
@this msdn.microsoft.com/en-us/library/ayfa0fcd(v=vs.110).aspx led me to inspection.GetInterface("IInspection") != null which appears to correctly fulfill the Predicate.
 
inspection is a misleading name here
 
12:28 AM
Yeah that
 
@IvenBach ^
 
I don't even know what I was expecting it to be.
 
and that's a habit you need to make: if you don't know, find out
 
I did that and went so far down the rabbit hole it took me 2 weeks to get out.
 
mouse over, inspect, use watchs, whatever. don't assume that because it's named Foo means it's really a Foo
 
12:30 AM
You're iterating the result of GetTypes, which returns an IEnumerable<Type>, so each item is a Type
 
we're talking about simply identifying the type. not to know everything about the type
 
I now see GetTypes() returns System.Type[]
I'll continually expose my ignorance until I'm property educated, rest assured of that.
 
Reflection is fun
Not very performant, but fun
in The 2nd Monitor, Dec 8 '14 at 22:50, by Jeroen Vannevel
But using reflection also makes you look 1337 as fuck so it's a tradeoff between performance and e-penis
 
I've read about this. The use of it is still very nebulous to me.
Thank you for the continual help. I'd be lost without it.
 
You're about to locate all implementations of an interface, and run tests against each one of them. And when new implementations appear, your test will automatically find them. That is the use of it ;-)
 
12:36 AM
@Mat'sMug I understand the concept of what it does. The use-of/implementation is where I'm floundering.
 
Ever wanted to list all enum names in a VBA enum?
 
You have no idea....
 
You can't, because VBA doesn't have a reflection API
 
^
That's why I read up on reflection. One of many
 
Yeah. In my case, I settle for self-modifying VBA code... Yay?
 
12:37 AM
@Mat'sMug You so don't need reflection for that in C#.
Enum.GetNames(typeof(...))
 
Hosch and how do you know the GetNames doesn't use reflection? :p Just because we call a method on a type doesn't mean it's not using reflection under the hood.
 
Well, odds are it uses reflection under the surface.
But still.
We don't need to dabble in reflection for it.
 
@Hosch250 I know...
@this and that
 
@Mat'sMug just wondering - have you use or would you use +Unviewable?
Also for my clarity - if I pull from the RD/next right now, will I get the latest merges, including those that failed to build or would I only get the last successful build?
 
You'd get the latest merges.
Why, is it broken?
 
12:45 AM
GTK -- cos AV can't build
it failed to build since few last merges
 
@this nope
Not even if I were a consultant
I've no spaghetti code to hide
2nd reply from AV support:
> I personally prefer that kind of commands in YAML than in .csproj. However you may prefer .csproj to as you build on local computer too. My advice is to use “configuration” environment variable instead of hard-coding things in both cases.
No shit I want to build local... So, let's fix the post-build to be config-agnostic, and remove the copy command from the .yml
 
@Mat'sMug for those who sells excel addins it's a big deal apparently. Impossible to make business if IP can't be protected (leaving the debate b/t CSS and OSS)
 
AV?
 
Antivirus AppVeyor
 
@this Unviewable+ is easily defeated. OleTools is free and exports all source code in seconds. I also have some C# code that reads the projects.
 
12:52 AM
Yeow. I don't know how it actually worked
whether it actually removes the source code like a *DE file or is just a padlock on the screen door.
 
@this I had a chat to Jon Peltier at a dinner last year. He swears by Unviewable+, but he was shocked that it could be beaten so easily.
 
when they were doing a kickstarter campaing some years ago, they promised that it would be locked down. I asked if they'd remove the source code but never got a straight answer.
If they can't strip away the source code, it's generally a waste of effort, IMO.
 
@this it relies on a project feature. If you omit the module from the window layout stream, then the module is treated as hidden.
 
oooh..... that's it?
:\
 
But the stream is still there, and still listed in the project modules stream.
 
12:55 AM
just to clarify - the stream => just the p-code or the source code also?
 
They use a few other tricks too. Eg. They create a dummy project with the typical VBA projects.bin name, and then store the real project in PrinterSettings.bin.
@this the module stream is the p-code, followed by compressed source code.
 
LOL.
 
and RE: oletools - you meant this
wait wait
so it's easy enough to strip out the source code
and they didn't?
 
The project stream tells you the offset of the start of the source code, but in reality, the byte marker is easy to spot by scanning the stream.
 
12:58 AM
Yeah, but my point is - it's right there. Just trim the stream and save it without the source code.
 
@this AFAIU, they're hoping to, but stripping the source code makes the add-in be tied to a particular version/bitness.
 
Interesting.
that's also true w/ a *DE file
but not the version part
a *DE compiled in earlier version can be used by later version
but the most suckiest thing is that references are also compiled into the p-code, which makes it more fragile if it has more than required references. Hence the importance of late-binding.
 
Have you seen Vess' p-code decompiler?
 
Nope. Would love to see it
btw, didn't answer my q RE: oletools
 
1:03 AM
One quick thank you and one quick fist bump:
 
cool, thanks!
 
1. Thanks to @ThunderFrame and everyone who taught me to use Sheet code names. Was just making UI improvements to a program of mine and ended up renaming a key sheet.
 
@puzzlepiece87 Using abstraction goes a long way.
 
2. Corporate IT gave me permission today to skip the testing queue for 2.1.1 because they were not done packaging 2.1.0 and they want me out of their hair, lol
So 2.1.1 went straight to packaging.
Should have it tomorrow.
 
There's OleTools and oledump, among others. Decalage wrote one, and Vess wrote the other.
 
1:08 AM
yeah, giving it a try now
@puzzlepiece87 that's great!
 
@Mat'sMug github.com/IvenBach/Rubberduck/blob/… I may be on the wrong path but I'm trying to get it to work.
Home Time
 
I'm at a deadend again.
I can't get the grammar updated :(
 
if you want, bounce off
 
Bounce off?
 
sorry - rephrase: tell me what's the deal with grammar
 
1:14 AM
It's failing with def directives.
DefBool B, C, D
It gets down to the rule for the character, but fails there.
 
the error was?
 
It can't guess which rule to match in some variations.
Or it matches the wrong one.
Feel free to checkout my update-ANTLR branch.
I think I'll get recovery working.
Supper time.
 
@Hosch250 today we learned it's also failing for If True Then : (empty instruction is legal) and Line statements
@Hosch250 that's awesome =)
Still no idea wtf If True Then : (nothing here) if up to
But it's legal code, we should handle it
...and then pop an inspection result for it
 
@Mat'sMug do we have soemthign akin to an empty statement?
 
Nope
 
1:21 AM
cos I think that's what it is with If True Then:
(at least hte part after)
 
It is
 
hm. what exactly do we do for blank lines?
 
WS
 
hmm.
 
(IIRC)
 
1:22 AM
if it were just WS, it might fail to match because it might be If True Then:\r\n
 
Antlr doesn't like parser rules that match empty tokens though.. That might be problematic
 
unless we make a rule that explicitly matches :\r\n
 
@this WS is more than just whitespace...
 
that might suffice as a whitespace so we can "ignore" it. maybe.
yeah, I know
 
Oooh that's right!
Yeah it should work
 
1:23 AM
"No one in the brief history of computing has ever written a piece of perfect software. It's unlikely that you'll be the first." - Andy Hunt
 
hm.... didn't we see that like last month?
(the exact same quote)
 
Idk.. But I like it
How on earth do people write code in a non-mono spaced font?
@codestandards Asked myself the same question when I saw what MS did to the VBE on Mac. "What the...Why?!"
@codestandards To be fair the font wasn't exactly the only "wtf" though..
 
@ThunderFrame the decompiler doesn't work on a *DE file
AICS, it only supports Office documents... but not Access.
 
Ok this is new to me:
If you've mastered named ranges and you've mastered dynamic named ranges, what’s next? #Excel Answer: Relative named ranges https://exceloffthegrid.com/creating-relative-named-ranges/
@this telling you, there's something about Access...
 
Well, they were for long time the only one to have a *DE file. In theory, all Office could have the same protection but that wasn't implemented in any ohter Office
then came along the open xml. Access had to dance the same dance as the rest of Office and implement "Open XML" --- but it doesn't open as a zip and they still support generating ACCDE.
 
1:39 AM
@this yeah. My tool works on Access files. ;-)
@ItsReallyNick @SwiftOnSecurity @424f424f This has the additional advantage that standard macro inspection tools like olevba, etc. can't see the macros because, unlike Word and Excel documents, Access database aren't OLE2 files. In addition, their format changes drastically among Access versions. It's a mess.
 
fixed hard-coded "Debug" for $(Configuration)

Should get AppVeyor back on track
 
@ThunderFrame lol
 
> Should get AppVeyor back on track
[rubberduck-vba/Rubberduck] build for commit 46d34a83 on retailcoder-patch-1: AppVeyor build failed
BUILD FAILURE!
 
@Duga oh come on
 
@ThunderFrame cool. how much of original source code can you get back? Or do you just get bare representation?
RE: format changes - can't say I'm surprised. The mistake IMO was pretending that an Access file was a "document" when in reality it's more like an "application" that has a data file embedded.
 
1:45 AM
@Duga wtf the path is right
 
@Mat'sMug, @Duga would rather be wrong.
 
Rubberduck.RegexAssistant -> C:\projects\rubberduck\Rubberduck.RegexAssistant\bin\Release\Rubberduck.RegexAssistant.dll
The system cannot find the file specified.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(5‌​074,5): error MSB3073: The command "copy "C:\projects\rubberduck\Rubberduck.Inspections\bin\Release\Rubberduck.Inspection‌​s.dll" "C:\projects\rubberduck\RetailCoder.VBE\bin\Release" /Y" exited with code 1.
 
that was in the previous build error, too
 
except this time the copy path is under Release
 
ensure that the Release directory (or Debug respectively) exist
cp may not create them ...
 
1:48 AM
wtf this has worked for ...since we used it
 
@this All the things, including the VB_Attributes
7
A: How do I know that `ThisWorkbook` is a `Workbook`?

ThunderFrameUnfortunately the values/objects of the vbComponent Properties collection are only a reflection of the CoClass's instance values, so they're not reliable across all VBA hosts. For example, you can't know that the Parent property will exist in the Properties collection. When a host supports docum...

 
TTGTB... about 2 hours ago ...
 
'night!
oh wow
> Rubberduck.SettingsProvider -> C:\projects\rubberduck\Rubberduck.SettingsProvider\bin\Release\Rubberduck.SettingsProvider.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2041,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\projects\rubberduck\Rubberd
it's not building
 
[rubberduck-vba/Rubberduck] build for commit 46d34a83 on retailcoder-patch-1: AppVeyor build failed
BUILD FAILURE!
 
2:08 AM
Update appveyor.yml

trying the removal of an explicit host
[rubberduck-vba/Rubberduck] build for commit d2719598 on retailcoder-patch-1: AppVeyor build failed
 
nope
 
BUILD FAILURE!
 
woot - got my Hacktoberfest shirt too.
 
a mite faster than your RD mug. :)
 
haha
 
2:11 AM
prolly cos it didn't come via Canada post. :p
 
@this I get items faster and cheaper from China, because the UPU rigs the game
 
Update appveyor.yml

removed before_package
[rubberduck-vba/Rubberduck] build for commit 40d931af on retailcoder-patch-1: AppVeyor build failed
BUILD FAILURE!
 
ah-ha
 
♫Take on me...♫
 
2:22 AM
I think @IvenBach is officially a bad influence on @Duga...
2
 
somehow NLog isn't working in Rubberduck.VBEditor.dll
 
.... what, wait?
 
Rubberduck.SettingsProvider -> C:\projects\rubberduck\Rubberduck.SettingsProvider\bin\Release\Rubberduck.SettingsProvider.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2041,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "**NLog**, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL".
 
@this the irony being that @Duga is a good influence on @IvenBach
 
> [C:\projects\rubberduck\Rubberduck.VBEEditor\Rubberduck.VBEditor.csproj]
SafeComWrappers\SafeComWrapper.cs(3,7): error CS0246: The type or namespace name 'NLog' could not be found (are you missing a using directive or an assembly reference?)
and yet the package is in packages.config
but not listed in the log
and builds locally
 
2:25 AM
@this What did I break?
 
nothing.
 
I don't think it was you
 
i'm just giving you a hard time cos you #FailFastAndOften and it rubbed off on @Duga. :)
 
That's only what I bring up... My fail rate is much higher than what I allow to be seen.
 
interestingly, there's an update for nlog
4.0.1 => 4.4.12
 
2:28 AM
could it be that the updated nlog is breaking?
 
doubt so
 
[retailcoder/Rubberduck] retailcoder pushed 84 commits to next
[retailcoder/Rubberduck] retailcoder pushed 48 commits to next (only showing some of them below)
[retailcoder/Rubberduck] IvenBach pushed commit 36925d7d to next: Revert ordering and add explicit sort
[retailcoder/Rubberduck] MDoerner pushed commit 4b899074 to next: Reverted to having the release on the SafeComWrapper and added logging.
[retailcoder/Rubberduck] MDoerner pushed commit 403a9e5e to next: Writing failure to unsubscribe from DockableWindowHost's parent subclassing windows CallBackEvent to debug.
[retailcoder/Rubberduck] MDoerner pushed commit a398ebbc to next: Merge branch 'next' into ShutdownIsuueAgain
[retailcoder/Rubberduck] IvenBach pushed commit 43e75ddc to next: Merge branch 'next' of github.com/rubberduck-vba/rubberduck into Issue3485_Inspection_Sorting_Order
[retailcoder/Rubberduck] MDoerner pushed commit 25ba0642 to next: Tweaked COM release logging.
[retailcoder/Rubberduck] IvenBach pushed commit 5f97d91b to next: Filter capabilities
Merge pull request #3615 from MDoerner/ShutdownIsuueAgain

COM Release for menu items and command bar
Merge pull request #3622 from IvenBach/Issue3485_Inspection_Sorting_Order

Sort inspections in settings dialog
[retailcoder/Rubberduck] retailcoder pushed commit 5bbf3f49 to next: updated nlog
[retailcoder/Rubberduck] retailcoder pushed commit 6768dee0 to next: updated nlog
 
follows build log closely
ffs
 
[rubberduck-vba/Rubberduck] build for commit 6768dee0 on unknown branch: AppVeyor build failed
BUILD FAILURE!
[retailcoder/Rubberduck] retailcoder pushed commit 9fa0a771 to next: added nlog everywhere
 
bingo
 
2:44 AM
[rubberduck-vba/Rubberduck] build for commit 9fa0a771 on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] retailcoder pushed commit 5bbf3f49 to next: updated nlog
[rubberduck-vba/Rubberduck] retailcoder pushed commit 6768dee0 to next: updated nlog
[rubberduck-vba/Rubberduck] retailcoder pushed commit 9fa0a771 to next: added nlog everywhere
Merge pull request #3629 from retailcoder/next

updated nlog
[rubberduck-vba/Rubberduck] build for commit 6e11dd4b on unknown branch: AppVeyor was unable to build non-mergeable pull request
BUILD FAILURE!
[rubberduck-vba/Rubberduck] build for commit 1fd009c2 on next: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] build for commit 3272d864 on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] NelsonVides pushed commit bb5075b2 to next: Reinstalled LibGit native libraries, now VS copies the native .dlls. Modified the .iss script to copy this time these new .dlls.
[rubberduck-vba/Rubberduck] web-flow pushed commit 6e11dd4b to next: Merge branch 'next' into libgitquickfix
[rubberduck-vba/Rubberduck] web-flow pushed commit 3272d864 to next: Merge branch 'next' into libgitquickfix
Merge pull request #3627 from NelsonVides/libgitquickfix

Fixes #3594
 
3:04 AM
@Duga For my education --- isn't that backward? wouldn't it the other way around?
 
[rubberduck-vba/Rubberduck] build for commit 5a9bfd87 on next: AppVeyor build succeeded
 
@Duga Congratulations, @Mat'sMug. You are officially Bob the Builder. :)
 
=)
 
I'm swinging hard and missing harderer.
You got time to point out what I'm doing wrong Mug?
 
3:28 AM
nothing
something went wrong with this commit that added nlog
 
*note to myself: don't kid Iven or he'd take it too seriously
 
@this My humor has been described previously as 'dry'.
 
May I recommend a glass of water to go with it?
 
or gin. dry gin is good.
 
I don't drink so I wouldn't know. I've heard Vodka is dry though.
 
3:33 AM
Or, dry vermouth and dry ginger, also known as a Dry & Dry, is surprisingly refreshing.
 
I'm just trying hard to understand and frustrated I can't pick up on what's incorrect.
 
C# style question, should I declare a return type as short or Int16?
 
Always use the alias.
I want to kill every time I see Int32, String, etc.
 
^
especially String
 
ok, for my education x2, why wouldn't I want to use Int32? If I'm dealing with database or something where we are constantly mixing Int16, Int32 or Int64, wouldn't it be much more readable?
 
3:38 AM
No.
Use the alias, and know what it stands for
 
yea... except it doesn't mean the same thing everywhere.
int might mean 32-bit or 16-bit depend on who you ask. I don't want to play guessing game with a long, longlong or short.
 
Not with C#.
If you don't know the language, then just GT*O.
Not to you personally.
Just talking about if I found one of my hypothetical employees didn't know the language that well.
 
Hmm. and I don't use only C#... I doubt nobody does. Nowadays, one must be a polyglot.
and because I see more and more things interacting in form of APIs, it pays to have a design that works well across all languages IMPOV.
 
It compiles to the same thing.
 
therefore, readability get a higher premium from me.
 
3:44 AM
int is more readable than Int32.
 
I was using short, but it's a helper function for reading a Binary reader, so I was tempted to match the return type to the BinaryReader ReadInt16 method.
But will stick with the aliases.
 
Anyone have any thoughts with the design for the new error structure?
Before, we would throw, and catch in a place where we had the data to map the exception to the module.
Now, I need to somehow pass this data further up into the notifier.
I actually feel a little homesick for RD now.
It's been so long since I've actually been trusted as an architect and had full control over where the feature went.
 
Do you have a moment to assist me Hosch?
 
Yeah.
Just fooling around playing minesweeper until the queue clears so I can get ready for bed.
 
I came across a missing name in a resource file.
9 hours ago, by IvenBach
user image
I added it and wanted to add a test for it to make sure that each inspection would have a test.
 
3:57 AM
@Hosch250 I wonder if it'd be easier to represent an error as a type of Declaration
 
Maybe.
I don't think so, though. Declaration already knows way too much.
 
because you need to have a "selection", information about the error itself and the contexts
 
We already have that.
 
from what base object?
 
Mug suggested to use reflection to check for IInspection and test that way so we could remove the whole slew of InspectionName tests.
 
3:58 AM
Also, declaration is for identifiers and stuff.
 
hmm yeah.
if we odn't have a base object, then it sounds like we need a new POCO for the error.
because you definitely want to be able to describe the QualifiedSelection, the error message, and the context(s) it has.
 

« first day (1293 days earlier)      last day (1887 days later) »