« first day (1419 days earlier)      last day (1761 days later) » 
00:00 - 18:0018:00 - 00:00

6:00 PM
@MathieuGuindon Give me a dirtbike worth being called a dirtbike, and I can beat a Corolla any day of the week on any track.
 
@Hosch250 I'm bad at race analogies
 
FWIW, R is primarily for analyzing data. It's used heavily in data-mining, along with Python.
From the vague bits I've gathered, it's designed to work with sets of data, much like SQL.
 
6:15 PM
@Hosch250 Dirtbikes can go 130?
 
@puzzlepiece87 Corollas can go 130?
;-)
why meaningful names matter:
 
@this harking back to my SO questionand thinking about your comment re early binding I messed around and found that I can change Dim a As Object to Dim a As MSHTML.IHTMLDOMChildrenCollection for the object showing as dispstaticnodelist. I can then traverse a.Length. Is this better? It feels weird as in the locals window it then shows IHTMLDOMChildrenCollection/Dispstaticnodelist
I am used to seeing this with Variants
 
@MathieuGuindon I keep telling you words are tough.
 
Damn. Right at the point I lazily used an a for a variable name :-(
 
6:26 PM
@MathieuGuindon I have both of those bookmarked already! One of these days, I'll actually get to implementing them...
though, based on the conversation that followed, I may not... ;)
 
@FreeMan the questionnable part is the implementation of SqlResult, which wraps a list/collection; @this was suggesting wrapping the [disconnected] recordset instead. doesn't invalidate the approach at all :)
@QHarr IHTMLDOMChildrenCollection is the interface, Dispstaticnodelist is the concrete type
 
@this hey, be nice! Some of us IT guys are the DBAs and we're #DoinItTheBestWeKnowHow
@MathieuGuindon I'd really have to spend some time reading through that to fully grasp the meaning - my quick browse, even the 2nd time through, wasn't enough for it to sink in.
 
@MathieuGuindon Hummm... I understand the words but...... So the Dispstaticnodelist implements IHTMLDOMChildrenCollection?
 
Hummm....So I'm using an interface method to loop the mystery object?
traverse not loop i.e a.Length
 
6:33 PM
IHTMLDOMChildrenCollection is really just the declared type though. Dispstaticnodelist likely implements more interfaces
 
So it is not, as I suspect, that I have found the right way to empty the contents of "a", merely a way?
 
the "right way" would probably be to set the whole damn thing on fire ;-)
can you declare it As Dispstaticnodelist?
 
sure we had a petrol reference or some such in an earlier conversation......
 
it's possible one type exposes a proper enumerator and not another
 
@MathieuGuindon I'll double check but pretty sure that was the first thing I checked before wildly embracing tall dark interfaces...
 
6:36 PM
declaring it As Variant would (should?) make VBA query IDispatch and late-bind the correct members, including any exposed enumerator
 
hummm... one moment caller ==> <scurries off>
It returns Variant/Object/DispstaticNodeList
 
makes sense
 
erm.. of course it does..... ahem....
 
can you foreach over the variant?
(SAVE!)
 
No intellisense to help but lets try the For Each....... such abandon!!!
 
6:41 PM
you could always cast the foreach variable once you're inside the loop body :)
 
howzzat?
CVar?
It crashed btw
 
@MathieuGuindon Will it be possible for RD with AvalonEdit to have something like someString = "Foo " & Bar prompt to wrap Bar appropriately with CStr(Bar)?
 
@IvenBach - true. Did you find this playing with the code from the article or somehow else?
 
For Each someVariant In collectionThing
    Dim i As DispstaticNodeList
    Set i = someVariant
    'enjoy intellisense on i now
Next
 
@Vityata Data>Analysis>Solver>Model=GRG Nonlinear
 
6:43 PM
@QHarr oh, nevermind then
definitely looks like a bug in the typelib
 
@MathieuGuindon Appreciate the help. Thank you.
 
@IvenBach - to be honest I have only used Solver once, for some task at the university
My bad...
 
I wish I knew it better. I like optimization stuff but that's not what I do.
 
@IvenBach it should technically be inspectable right now
 
I'd really like that since implicit conversions are something I'm disliking more and more.
 
:+1:
 
not exactly easy though
 
> I think I'd personally leave out warning about implicit conversion from anything -> Variant
 
actually, might need to be broken down by type
 
I do agree with ComIntern
Is anything that RD does easy?
 
6:47 PM
@IvenBach "Option Explicit is missing" was pretty simple
 
I'm jealous IvenBach. Think of the learning! You are gonna be a guru by the end of this!
 
@MathieuGuindon I'll kinda-sorta give you that one. But I'd still struggle with implementing that right now.
 
@IvenBach no amount of time can fix that. the only cure is to dive into it and learn how parse trees work
 
@QHarr I'm trying frantically to cram as much studying in as I can right now. I greatly dislike not having active tasks to work on. I also never feel like I know enough, so I'm always trying to learn.
 
@IvenBach I soooo agree and know that feeling.
 
6:52 PM
> I greatly dislike not having active tasks to work on
we can fix that, you know :)
 
haha
 
touché
 
@IvenBach - updated the article, once the cache is purged (whatever this means) it would be visible. Thanks! :)
 
I got sick of EF's bad queries, so I'm thinking about doing something about it.
Linq-to-Entities is really nice code-side, but it doesn't translate nicely to SQL.
So, I thought of writing a new library to generate SQL:
SqlQueryBuilder.Create()
	.Select<T>(a => a.Foo, a => a.Bar)						T: TableA
	.Select<T>(a => a.Fizz, a => a.Buzz)					T: TableB
	.From<T>(DbSet<T>)										T: TableA
	.InnerJoin<T, T1>(DbSet<T>, (a, b) => a.Foo == b.Fizz)	T: TableB
	.Where<T>(a => a.Foo)									T: TableA
	.Build()

-->

select a.Foo, a.Bar, b.Fizz, b.Buzz
from TableA a
inner join TableB b on a.Foo = b.Fizz
where a.Foo = 1
(Those tabs...)
It has the structure of SQL, so it's easy to build a good query, but it is C#, so you can see what uses what where.
 
@Vityata Regarding vitoshacademy.com/…
Sub DeleteEntries()
    CellsThatContain(Sheet1, 1).EntireRow.Delete
End Sub

Private Function CellsThatContain(ByVal findSheet As Worksheet, ByVal value As Variant, Optional ByVal inColumn As Long = 1) As Range
    Dim firstfound As Range
    Set firstfound = findSheet.Columns(inColumn).Find(value, LookIn:=xlFormulas, LookAt:=xlWhole)
    Dim found As Range
    Set found = firstfound

    Dim lastFound As Range
    Set lastFound = findSheet.Columns(inColumn).FindNext(firstfound)

    Do While lastFound.Address <> firstfound.Address
Your post nerd-sniped me. Altered it as an example for some future Excel teaching presentation I'll give to co-workers.
Lunch time.
 
7:04 PM
@Hosch250 why reinvent the wheel? Dapper might be good enough.
 
Because NIH.
Or more seriously, I don't know Dapper.
 
it's pretty a small OM. Not that hard to get acquinted.
 
If I wanted to write raw SQL, I could do that in EF.
But it doesn't have the references as to which table column is queried where.
 
@MathieuGuindon So I obviously missed something like earlier as...
I can do Dim a As DispStaticNodeList

Set a = html.querySelectorAll("div.intro p")(1)
Debug.Print a.innerText
 
Yes, Hosch. They also have some more on their GH repo.
While it's possible to use raw SQL, we normally don't. We always access via view or stored procedure.
 
7:07 PM
In fact I can access each item by index but I get type mismatch if I try simply Set a = html.querySelectorAll("div.intro p")
 
An SP is raw SQL.
It's just stored on the DB.
 
github.com/StackExchange/Dapper#parameterized-queries illustrates a way you can provide parameter.
 
But the nice thing about my concept is you could use it with any ORM that lets you run a raw SQL string.
I'd just have to tweak the DbSet<T> bit a little.
 
still not seeing how that's different from what Dapper already does.
You might wanna to see this, too: github.com/StackExchange/Dapper#multi-mapping
 
@Hosch250 Stack Overflow runs on Dapper
 
7:11 PM
Because Dapper requires you to hard-code SQL in your application...
 
so what
 
You don't get references.
 
@Hosch250 the only string part is the name of the sp. We usually pass parameters as they are.
 
if it's simple stuff, it's simple stuff
 
And many shops don't let you do that.
 
7:11 PM
many shops don't care about performance, until performance becomes a user problem
 
Here, we can't use an SP unless it is for performance, and you can't have raw SQL in the code base.
 
blanket statement -> lie
 
^
 
"raw SQL in the code base is evil"
^ not necessarily
 
i can't visualize how sp => raw SQL
 
7:13 PM
@MathieuGuindon The argument is it doesn't belong in the codebase, it belongs on the DB as an SP.
 
ok so it doesn't. Let's not call it then.
 
They want to be able to find all references and stuff, and we have SQL calls everywhere.
 
@MathieuGuindon So I'll finish on this.... it seems I can do the following which still isn't For Each (pretty sure bug as you say)
Public Sub Test10()
Dim html As MSHTML.HTMLDocument, i As Long
Set html = GetTestHTML

For i = 0 To html.querySelectorAll("div.intro p").Length - 1
Debug.Print html.querySelectorAll("div.intro p")(i).innerText
Next i

End Sub
 
Pretty much every action on our website is a CRUD operation.
We have many thousands of calls to the DB in our application, so find-all-references is extremely useful.
 
For CRUD, you probably need to use dapper CRUD to provide basic mapping.
 
7:14 PM
ORM -> raw SQL with makeup
 
Not saying it isn't.
 
the problem is controller methods littered with SQL stuff, not raw SQL
 
@MathieuGuindon A lot of them aren't (the new stuff). They are supposed to call into a separate project that does most of that.
 
have an IRepository and then who cares what the service does and how it does it
 
@MathieuGuindon We do...
For comparison, how many tables do you guys have?
 
7:17 PM
I don't want to count
 
We have about 350.
 
I'm dealing with an ERP system, it's at least twice that, times 8 databases
 
We have about 30 databases.
 
here's an example of such CRUD extension: github.com/tmsmith/Dapper-Extensions (thare are few others).
 
@Hosch250 we have 4 ERP systems... that's just Sage
 
7:18 PM
Each with 350 tables.
 
one db per tenant? (e.g. 30 similar db for each client)?
 
@this Yes.
 
@this sort of. "companies"
 
so technically one schema with 350 tables, with 30 different connection strings.
 
```
using (SqlConnection cn = new SqlConnection(_connectionString))
{
cn.Open();
var predicate = Predicates.Field<Person>(f => f.Active, Operator.Eq, true);
IEnumerable<Person> list = cn.GetList<Person>(predicate);
cn.Close();
}
```
Yeah, something like that.
Except cleaner.
 
7:20 PM
ugh. that's var cn = new...
 
@MathieuGuindon The bigger "ugh" is the using. That should be injected.
 
#ItDepends
 
How are you going to test that now?
 
I don't know where that code lives
 
Hit the DB?
 
7:21 PM
you don't
you test the code that uses it
 
And that's Repository implementation details...
 
As far as it goes, EF provides a full repository...
 
for testing hte SQL itself, you use tSQLt.
 
You don't need to define the repo at all.
 
7:22 PM
yet it manage to write crappy queries....
 
With Linq-to-Entities.
 
and when it goes wrong, it goes wrong in a bad way and everyone's standing around scratching their heads
that is why we went away from EF to dapper in the first place. Troubleshooting and testing became so much easier w/ Dapper than it was w/ EF, TBF
 
@this Precisely. Crappy queries, not CUD operations...
And we aren't going to go to Dapper here. I can promise you that.
 
with a large codebase, you probably are stuck with it.
 
Yep.
 
7:24 PM
the only way you can make it "less" painful is to not rely on CRUD for >1 table accesses.
and I would wage that most of operations solemn use only one table.
 
@this Mmm, maybe. A lot, anyway. EF has "navigation properties", which make it really easy to do.
And it's usually OK if you have 2 tables, but more than that :(
 
and that's where things go bad.
CRUD >1 table => sad
We enforce that rule everywhere even in Access for a good reason.
 
What really goes bad is when it understands enough to pull the data from table A, send it to the server, process it, and send it out as part of another query without telling you, but doesn't understand enough to just do the join.
 
and that's the evil thing. You don't ask more than what you really need, and the abstractions EF put in for you only obfuscate that.
 
@this Well, one I found in particular goes like this:
collectionA
	.Where(a => collectionB.Contains(a.Foo))
	.Select(a => a.Bar)
That Where screwed it because it didn't know to do a join.
 
7:31 PM
See, you're just doing SQL in codebase. You're just using C# symbols.
 
Exactly.
 
and they're right - SQL don't belong in the codebase.
 
Which makes it great for find-all-references and other tools.
And yeah, that too.
 
I get that. But, SQL Server already has a good dependencies model
and when the access is all encapuslated via a Repository object, then you get the Find All Reference
so that solves the problem, no?
 
Depends what your Repository object looks like...
SP's don't give you find-all-reference.
But if we generated the SQL like:
SqlQueryBuilder.Create()
	.Select<TableB>()
	.From<TableA>()
	.InnerJoin<TableA, TableB>((a, b) => a.Foo = b)
	.Where<TableA, TableB>((a, b) => a.Foo = b)
That explicitly tells it to create a join and not pull data out, then shove it right back into the DB.
And still looks like Linq enough to be palatable to the C#-only crowd that has basic understanding of SQL.
Like, we actually had to explain to some of our senior people why it was a good idea to use UDFs and UDTs to query DBs.
 
7:36 PM
I think we're talking past each other. You call GetDataFromAAndB(Foo b), which it executes db.Execute(uspGetDataFromAAndB, b), and inside the db, we have CREATE PROCEDURE dbo.uspGetDataFromAAndB(@b INT).... Within SSMS, you get the depenency that the sprocs needs table A and B, and find all references finds all use of the GetDataFromAAndB?
No direct access to the table is needed, and you have both projects with clear dependency flow.
 
@this Well, if you put it like that, that's not bad.
But suddenly our method count triples, and our architects decided that one method per class was the best idea since sliced bread.
Which means 3 times the number of files to manage.
We'd basically need a method to join on and/or filter by the combination of most columns in our tables.
So, we'd need something like:
select * from Foo where Fizz = @fizz, select * from Foo where Buzz = @buzz` and select * from Foo where Fizz = @fizz and Buzz = @buzz.
Depending on where we were calling it.
And then we'd need some to join different columns with the filters too and select some data from the other columns.
And we couldn't just pull the whole table back and filter it server-side for performance reasons--it takes an hour or more to download some of our tables.
And those, as is probably obvious, are the most-used ones.
 
@Hosch250 That smells. If you need to use it like you would use google then relational database may not what you're needing. In a well designed relational database, it's usually clear what columns ought to be searched and thus indexed and made available for access via stored procedure, or encapsulate into a view that flattens the table joins for you.
If you need to use relational database a flattening view may work the best since that'd give you one "big table" that is easy to query without even thinking about the joins.
let the SQL engine figure out whether it needs joins to nor. It's much smarter and suited for that kind of decision than any ORM model you can find.
You may have some other constraints, however. Obviously you can't have one god view that joins 100 tables. That would not help you but you certainly can have say, 10 views that provides useful representation of what is suited for the given task with all columns available for ad hoc filtering client-side.
 
What "task" are you talking about?
We basically aggregate client data and process it to determine what rewards their employees get.
Each client uses it differently, so there isn't really specialized "tasks".
Depending on how they use it, they could filter by A or by B.
 
but A and B are both columns on some table, right?
 
Maybe.
Or they might be columns on two tables that need to be joined.
 
7:49 PM
Either way, you provide a view that provides all columns from all tables that you need to display and filter on.
 
Depends on which parameters we set up for them in the admin views.
 
so you're basically customizing filters each customer.
 
Yeah, and doing it all C#-side.
Makes it really easy to see the query structure because it's all just Linq.
Except, you pay in performance.
We've only got a few SQL guys who are also devs.
 
givent hat you ahve 30 databases with similar schema
 
Then we've got DA's to write client-specific stored-procs for custom reports that are all too busy to help the devs.
 
7:51 PM
(and I use schema generically here)
sorry gtg
 
And a single DBA who has to review all the stored procs.
NP, TTYL.
 
8:20 PM
Very confused by the VBE OB.
I search for ListObject, then click on AutoFilter
It tells me this about AutoFilter
Property AutoFilter As AutoFilter
    read-only
    Member of Excel.ListObject
It says it's a read-only property, yet I can do this:
table1.range.AutoFilter Field:=3, Criteria1:=... and provide parameters to a read-only property?
what am I missing?
It seems that the OB would be a good resource, but I've always found it useless to me - I don't understand what it's telling me. :(
 
8:37 PM
@FreeMan readonly applies to the property; your code is interacting with the instance returned by that property.
IOW, the property is of type AutoFilter, another class.
@Hosch250 IOW, the bottleneck is with the resources - you have lot of C# devs but not enough SQL folks. TBH, it's hard for me to give meaningful advice without seeing the design in details but given that you provide custom filters which is hand-built for each customers, I can see why the administration can be onerous.
 
OK... (channeling my inner @IvenBach), I search the OB for AutoFilter and it shows me a class with 2 methods and several properties.
None of the properties are Field or Criteria1. Where do I go to find out what all of those are?
 
@FreeMan I bet you're accessing the default property
look for a default property.
 
I don't see any with any blue icons, leading "_", or any other difference
and none of the descriptions indicate "default" (because that would be obvious...)
 
Hosch -- That said, I think one way to handle this is to allow for overloading the C# method that wraps the customer-customized sprocs. I would argue that the devs don't really need to see the query structure in the C#; they only need all the parameters that they need for filtering, and they'll get back a consistent object. That's all tehy really need, I would hope.
which is poorly written
 
Yeah, makes sense.
 
8:45 PM
This agrees with what OB, however: msdn.microsoft.com/en-us/library/…
so we know we are dealing w/ the class for reals.
 
0
A: VBA Do (delete column where find is true) Until Find is False then exit do

IvenBachYour code Set rng1 = Cells.Find... will set rng1 to be a range object, assuming it finds your value. Next is your loop which will ultimately cause rng1 to be deleted. It continues to loop because even though rng1 is deleted it still was assigned and therefore isn't Nothing. It ends with an run ti...

I'm pleasantly surprised with how elegant that solution happened to be.
 
@this To me most of MSDN is... :/ There used to be a way you could list all the properties and methods available and get info on them. I actually was almost goodish at working my way through them. In the last year or two, it seems that's gone away.
 
That is until the pond corrects something I overlooked.
@FreeMan Are you working with a Range or a ListObject?
 
@IvenBach yeah I totally missed that.
so lesson here: just because it's named "Foo" doesn't mean it's the "Foo" you think you know.
Range.AutoFilter is a method, ListObject.AutoFilter is a property that returns a type of AutoFilter
 
I’m just regurgitating what I’ve learned from others at the pond.
 
8:53 PM
Working with a ListObject.
@this is what I was looking for - why so hard to find??
 
@FreeMan When I'm trying to understand something I've defaulted to MSDN foo to make sure my search lands me as close to the source as I can.
That's also the Range.AutoFilter. :barf: [ListObject AutoFilter](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/listobject-a‌​utofilter-property-excel) is decidedly less helpful... Considering a ListObject` needs to reside as a Range on a Worksheet I'll be quiet about my newfound pedantry.
 
@IvenBach sadly google search doesn't get me the page @this linked ^^
 
@FreeMan because, context, context, context
you won't succeed searching on listobject. Yer in the wrong country
 
yes, the text is very con to me finding what I need!
 
your code was "table1. range .AutoFilter"
so you're now in the range country.
 
9:00 PM
(that was just a random snippet stolen from SO as an example.)
 
therefore you should be searching on the Range object members, not on ListObject
same thing. Context, context, context
 
^
 
However, the parameters for setting the AutoFilter for both a Range and a ListObject seem to be the same
 
But how do you know which context to use when you don't know there's context to begin with?
 
this^
 
9:01 PM
ListObject.AutoFilter is a Range.AutoFilter.
 
@IvenBach No.
compare the article carefully.
Range.AutoFilter is a method; ListObject.AutoFilter is a property
re: not knowing context, that is why you pay close attention to where you are each time you . something, the context has changed (I overstate the case a bit but that would work for remembering to look at which object you are interacting with ATM)
 
@this You're correct...
 
Pop quiz for both of you!
myRange.Cells(ColumnIndex:=12) <=== ColumnIndex belongs to whom?
 
I'm going with myRange
 
No, I want either the type or the method that owns the ColumnIndex
 
9:08 PM
so, if I have a table in Excel (declared a table with ctrl-T), I can turn on AutoFilters and filter stuff. If I want to manipulate that in table in VBA, I can assign it as Dim myTable as ListObject: set myTable = Worksheets(sheetName).ListObjects(tableName). From there, how the heck to I set the filter criteria??? It's not a Range because I've definded myTable as a ListObject and there doesn't seem to be an AutoFilter method on a bloody ListObject only a property...
Argh!
 
weren't you manipulating the Range of the myTable earlier?
 
@FreeMan ListObject.Range.AutoFilter
 
e.g. should be myTable.Range.AutoFilter .... as @IvenBach mentioned
 
8 mins ago, by FreeMan
(that was just a random snippet stolen from SO as an example.)
oh good Lord!
 
Please don't telll me you never noticed it.
 
9:10 PM
so why does the OB tell me this:
Property Range As Range
    read-only
    Member of Excel.AutoFilter
because...
because it's a property of the AutoFilter.. no
 
@this Cells is a range object. The () is using _Default([RowIndex], [ColumnIndex]). I'm not sure how to #Wordify it. ColumnIndex belongs to Default is my vote.
 
because AutoFilter is a Property of the worksheet that returns a listobject. LO has a range property that returns a range Object and that object has the autofilter method
 
^
 
and that method accepts the parameters that tell it how to filter itself
 
Isn't learning how to use the Object Browser mindboggling at first, then eventually rewarding.
 
9:13 PM
screen shotting that so I can look at it again in the AM. Time to go. errands to run.
mindboggling? Yes! rewarding? Well... definitely confusing...
 
@FreeMan I can laymans explain it for you, how I ended up understanding it.
Ping me later if you want.
 
TTQW.
thx
 
@IvenBach you got it.
In fact, there's an issue about that, in fact. ;) Took me too long to notice the small detail.
 
@this I still think my original answer of myRange is valid since .Cells is still using the same range. It could have been myRange(ColumnIndex:=12) and the same result would have been achieved.
 
@FreeMan without looking at it in detail it seems to be what it says. It is a property of AutoFilter object. Please note keep in mind the context. AutoFilter.Range β‰  ListObject.Range β‰  WorkSheet.Range
 
9:17 PM
What in quacks name just happened... I need to sit down a sec. I'm teaching someone else how to use the Object Browser?!
 
@IvenBach actually my off the cuff snippet was crap. what I said myRange, should have been myWorksheet
I keep saying to not trust my aircode yet I keep aircoding. Oh well.
 
It's your aircoding that's getting me to progress.
@this I know they all return Range objects and can use the members on a Range but I'm still not sure how they all relate to one another. Can you explain how they do?
 
9:33 PM
> Currently, the unreachable case inspection does not recognise double quotes inside string literals (`""`).

```vba
Public Sub DoSomething()
Dim bar As String
bar = "a"
Select Case bar
Case """a"""
Debug.Print "First"
Case "a"
Debug.Print "Second"
End Select
End Sub
```
Output: `Second`

Inspection results:

![quotesinstringfalsepositive](https://user-images.githubusercontent.com/22868956/39273496-3ccb7f84-48df-11e8-854a-
 
Looking into it the Worksheet.AutoFilter property looks like it comes from a range that uses an auto filter. The property is storing the the information that's used to perform the filtering.
 
@MathieuGuindon there ya go: codereview.stackexchange.com/a/192953/149207
@IvenBach I usually think of them representing the range that the object actually occupy.
 
That's what I do as well.
 
@Duga It might be best to switch the backend to the code the preprocessor is using. However, that code also is not entirely correct. Octal literals, I am looking at you.
 
we have octals?
 
9:47 PM
Moreover, the change will require some rewriting in the remainder of the inspection and make testing much harder.
 
oh my gosh, we do. I forgot. &10 => 8
 
&o10 = 8
 
so we have two syntaxes.... :(
&20 = &o20
 
&o100000 = -32768
but &o100000& = 32768
 
the suffix is just the type declaration character.
 
9:50 PM
note that hex literals in VBA are &H10.
Yes, but the value depends on it.
 
correct.
 
The preprocessor code is doing it wrong atm.
 
are we handling the &20 as well as &o20 ATM?
 
It removes all type hints and converts to Int32, which wrong in several regards.
The VBA spec only knows of &o.
 
hmm. must have missed it or more possibly support it for compatiblity with other dialects, perhaps.
at least it pretty prints the &20 to &O20
input: Const x As Long = &20 => Const x As Long = &O20
 
9:55 PM
@IvenBach you are welcomed 😎☺
 
@Vityata If I come up with any alternate ways of doing something in your VBA examples do you want me kick them back your way? I try not to know how to do something only 1 way.
 
10:08 PM
Hm, the preprossessor also does not treat hex literals correctly.
 
@IvenBach - kick anything to me, any time, for any reason 🍺😎
 
10:43 PM
> Currently the backend for expression evaluation in the preprossessor does not follow the rules layed out in the VBA specification (section 2.1 and 5.6.9). This has the potential effect that we do not determine correctly which code is dead and which is not.

Most of the computations have an incorrect return type and the computations are not performed with the specified precision. (The backend seems to always use `decimal`.)

Moreover, the handling of octal and hex literals does not take in
> This PR fixes #3914, i.e. it makes the backend for the unreachable case inspection interpred value strings in a culture invariant way.

Moreover, it adds support for octal and hex literals to `ParseTreeValue` and contains some refactorings in `RangeClauseFilter`. The main one is making it use value tuples for ranges.

Note that this does not deal with the other new issues with the inspection I found while I worked on this.
 
@this I did not find time to look at your PR today. I will do that tomorrow.
TTGTB
 
10:58 PM
Duck check: Has anyone here altered the ribbon for Office, more specifically Excel?
 
@IvenBach only ever did that with VSTO
 
I'm way outside my comfort zone doing this but #GottaStartSomewhere.
To boldly go where this fools not gone before!
 
[rubberduck-vba/Rubberduck] build for commit 4576a8c0 on unknown branch: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3968?src=pr&el=h1) Report
> Merging [#3968](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/3968?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/bcf72dd4c455ac67fa8772c650a7a497135262df?src=pr&el=desc) will **increase** coverage by `0.14%`.
> The diff coverage is `95.23%`.


```diff
@@ Coverage Diff @@
## next #3968 +/- ##
=======================
[rubberduck-vba/Rubberduck] build for commit 4576a8c0 on unknown branch: 57.81% (target 0%)
 
11:39 PM
@IvenBach if it's just for your own use or if you can use group policy, you might be able to do this all w/o any programming by using File -> Options -> Customize Ribbon and exporting. Custom ribbon for a specific workbook, OTOH....
 
Specific WB.
However, I'm going to dig through both options till I understand them.
 
@MathieuGuindon wondering - was the RD COM API ever working? Or was it always broken?
 
@this it "worked" at one point, yes... but it was never really practical. The events never worked, so asynchronous parsing wouldn't be feasible.
That's one area with massive crazy opportunities
 
11:55 PM
YEAS! GiddyLevel++
 
bingo. I suspected that events never worked becuase it's set up all wrong
 
I'm figurededering it out.
 
since it's never been practical, I think it'll be OK to introduce breaking changes anyway. I don't like how it's implemented.
:+1:, @IvenBach
 
00:00 - 18:0018:00 - 00:00

« first day (1419 days earlier)      last day (1761 days later) »