Skip to content

RD 2.0.12

Compare
Choose a tag to compare
@retailcoder retailcoder released this 05 Mar 08:07

Installation instructions

Running Rubberduck as a non-admin user

This releases focuses a lot on performance; the parser/resolver works faster and smarter, inspections complete faster (#2482). Quick-fixes are now lazy-loaded (#2534), a TON of COM overhead has been removed, and Rubberduck quite often exits cleanly now, and a new hook strategy improves overall responsiveness (#2609).

Known Issues

  • #2802 Multithreaded I/O can cause a parser error. A hotfix release will be issued as soon as possible.
  • Possible crash on exit. We can't rule it out entirely still, so when you close the host application make sure the process is no longer running in Task Manager.
  • Unloading, and then re-loading the add-in from the IDE's "addins manager" will no longer wreck the IDE and its host, but still won't re-load correctly. Don't do that.
  • Source Control can work, but its use isn't as user-friendly as it could be, and it tends to throw all kinds of exceptions for unintuitive reasons. We've made it a project of its own to git it up and running smoothly.
  • Please see our issues list for the complete backlog, or review the Maintenance project for a more digestible view of [bug] and [technical-debt] issues, and review the Features project for the feature backlog - inspections have their own backlog, too.

Dropped/Disabled Features

  • Extract Method refactoring has a number of severe issues and needs more work. It's temporarily removed from release builds. The Extract Method project tracks the TODO list for this project.
  • "Folder delimiter" setting has been dropped. It can possibly be re-introduced eventually, but we'll need per-project settings support for that. This setting determined whether @Folder("Foo.Bar") or @Folder("Foo/Bar") created folder "Bar" under a "Foo" folder in the Code Explorer. The dot . is now the only delimiter that will separate folders - sorry for those who preferred the other, but this setting had to be removed before the feature becomes widespread.

New Features

  • #1785 Version check on startup - Rubberduck sends an asynchronous HTTP GET request to rubberduckvba.com/Build/Version/Stable to get the version number of the Rubberduck build published/running on the website, and compares it to the local version. If the website is running a greater version number, a message will prompt whether to navigate to the last release page, where you can get the latest version.

    This startup check can be disabled in the general settings tab of the settings dialog.

  • #2443 Aggregate inspection results regroup large amounts (threshold currently set to 128) of results into a single one. This fixes a memory issue (#2439) related to having too many items in the WPF gridview showing inspection results.

  • #2532 @IgnoreModule module-level annotation, disables all inspections in that module. The annotation can be parameterized to ignore specific inspections:

    @IgnoreModule ProcedureNotUsed, UseMeaningfulNames
    

    There is currently no automatic way to add this annotation, so it must be added manually.

  • #2604 Indenter Settings tab has been redesigned; hopefully feels less crowded now 😄 .

  • Adding a test module now automatically adds a @Folder("Tests") annotation to that module. This makes all test modules appear under a folder named "Tests" in the Code Explorer; hopefully this helps that feature's poor discoverability.

  • Indenter can now also adjust vertical whitespace / blank lines between procedures. Configurable in the indenter settings tab of the settings dialog.

  • Rubberduck commandbar now displays number of references; clicking that button runs the find all references command and either navigates to the only reference or brings up a search results toolwindow tab.

  • #2238 Member not on interface locates method/member calls that aren't defined, and will raise run-time error 438 if executed. Rubberduck picks up e.g. late-bound Application.WorksheetFunction member calls (#2512), so this inspection warns you when you make a typo.

  • Hungarian Notation inspection enhances the use meaningful names inspection and yields results based on a set of commonly used prefixes typically used to identify a variable's type. The inspection uses the same white-list as the use meaningful names inspection, so any white-listed prefix is also a white-listed variable name and vice-versa. If you firmly believe in Hungarian Notation for all identifiers in VBA, please read Joel Spolsky's excellent Making Wrong Code Look Wrong article, which explains how Apps Hungarian notation is indeed a very useful convention to adopt; it also explains how Apps Hungarian was twisted into Systems Hungarian, a much less useful way of naming things.

Fixes

This list is non-exhaustive.

  • #1182 Procedure not used inspection now ignores handler procedures responding to a WithEvents field's events.
  • #1754 Remove unused declaration quick-fix now removes assignments too, but leaves potentially side-effecting RHS method calls in place. Note: an "unused" declaration might be assigned/written to, it's just never read from.
  • #2022 Function return value not used inspection quickfix no longer inserts an extraneous End Sub token.
  • #2085 Code Explorer and TODO Explorer now correctly refresh after removing a module.
  • #2087 'ESC' key will now close Find/Replace dialog box as it should.
  • #2180 Extract Interface no longer duplicates Option Explicit when require variable declaration VBE setting is adding Option Explicit automatically to a module.
  • #2206 Extraneous parentheses no longer cause parser errors. That's great, now we could have an inspection that finds them!
  • #2226 UI now properly updates when display language is switched from the settings dialog.
  • #2260 Use meaningful names inspection now fires a result with e.g. aaaaa as an identifier name.
  • #2266 Resolver now correctly picks up array-returning function's return type as such.
  • #2293 Rename command menu item (from code pane context menu) is now correctly disabled until parser state is Ready; this avoids being able to fire up the command despite Rubberduck not being in a state to do so #2362.
  • #2396 Indenter honors "first comment block" setting for Enum types.
  • #2446 No more nameless controls that use meaningful names doesn't like.
  • #2500 Encapsulate field no longer uses the Set keyword on non-object variables.
  • #2501 @Ignore annotation is now inserted on the correct line in multiline/line-continued code.
  • #2510 COM API is now working again!
  • #2514 Case Is = syntax no longer causes parser errors.
  • #2523 Annotations can now be followed by a comment without causing a parser error.
  • #2525 Resolver now correctly annotates undeclared variables; this means e.g. "use meaningful names" inspection can now fire results for undeclared variables.
  • #2536 Move field closed to usage inspection now ignores WithEvents fields.
  • #2538 COM collector now handles TKIND_ALIAS and TKIND_UNION types.
  • #2573 Use meaningful names inspection now ignores parameter names in Declare functions/procedures.
  • #2584 Selecting run all tests from the menu will now bring up the Test Explorer if it isn't already visible.
  • #2593 Form controls now resolve to the proper type.
  • #2599 Encapsulate public field inspection no longer fires a result for form controls.
  • #2601 Assigned ByVal parameter no longer triggers for reference types, unless the Set keyword is used; the resolver no longer treats the object as the target of default member assignments.
  • #2604 Multiline / line-continued strings now indents correctly.
  • #2618 Mid/Mid$ is now picked up as a function.
  • #2620 Object variable assigned without 'Set' keyword inspection no longer fires a result for enum types.
  • #2622 Resolver now correctly identifies all event handler procedures, and parameter not used inspection no longer fires a result for unused parameters in handlers, built-in or not.
  • #2642 #2669 ImplicitActiveSheetReference inspection will no longer fire a result when e.g. Sheets is used as a type name, e.g. Dim SomeSheets As Sheets.
  • #2644 Fixed under / line continuation handling.
  • #2646 Name arguments are picked up by the resolver.
  • #2660 Assigned ByVal parameter quickfix to introduce local variable now correctly handles scopes.
  • #2728 Automatic initial parse - Rubberduck will now automatically launch a parse task on startup; the parser state change makes the various menus automatically evaluate whether they CanExecute their command.
  • #2742 Unit tests now run correctly when the host document contains whitespace in its file name.
  • #2753 Move closer to usage now handles named parameters.
  • #2769 Resolver now picks up StrConv as a function.
  • #2774 Fixed issue with move closer to usage refactoring that caused member calls to be accidentally removed.
  • #2781 "Fix all occurrences in project" command is no longer available when no inspection result is selected.
  • #2786 Closing module window while parsing no longer blows everything up.