Skip to content

Releases: rubberduck-vba/Rubberduck

Rubberduck v2.1.0

16 Oct 02:50
Compare
Choose a tag to compare

Installation instructions

Running Rubberduck as a non-admin user

This release kicks off the v2.1 cycle, with some very exciting things coming up.

Known Issues

  • Google Chrome may flag the download. Windows Security Essentials and/or Symantec may flag the installer. This is not something we have control over. Our installer is provided free of charge, as-is, as a mere convenience. Alternatively, you can clone the project's repository and build the solution yourself (see Building in the project's wiki).

    Just to be clear: we do not package viruses, malware, crapware, bloatware, adware, or any other unwanted software in our installers. All Rubberduck installers on this page are packaged by AppVeyor, per this InnoSetup script.

  • Possible silent crash on exit. We can't rule it out entirely still (although significant progress has been made), 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 not re-load correctly. Don't do that. We told you not to.

  • When adding a module through Rubberduck, a @Folder annotation will be automatically inserted, but it will be inserted 1 line under where it should be. This makes the annotation illegal when a procedure is added to the module.

  • MissingAnnotation and MissingAttribute inspections are disabled by default, as their SynchronizeModuleAttributes quick-fix will break your code. The fix didn't make it into this release because of significant required changes in the parsing process, which will be implemented shortly.

  • Please see our reported bugs for the complete backlog. Note that we also use critical and edge-case labels for known issues.

New Features

Over 1,300 commits were made to Rubberduck since v2.0.13 was released. There are now over 60 implemented code inspections; some changed category, there's a new "Rubberduck Opportunities" category, and we've completely overhauled how we're rewriting code, using tokens instead of manipulating strings directly in the code pane. As a result, you can now undo any Rubberduck operation by pressing Ctrl+Z twice, because Rubberduck now rewrites whole modules; this means you can now undo operations that would otherwise overwhelm the VBE's undo stack.

The Code Explorer now includes a nifty search bar. Source Control is slowly getting back on track and pushing to a remote repository now works correctly.

Nobody is going to read this anyway, and there would be so much to say about these 1.3K commits, ...so instead of putting you to sleep with a wall of text, I'll simply say - download the thing, try it, see for yourself.

RD 2.0.13 (hotfix)

12 Mar 21:02
Compare
Choose a tag to compare

Installation instructions

Running Rubberduck as a non-admin user

This release addresses a number of urgent patches to serious bugs found in the previous 2.0.12 release.

Known Issues

  • 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.

New Features

  • Indent Project; the original Smart Indenter had that feature, and we had removed it last year for performance reasons... however preliminary testing shows the Rubberduck port can now actually indent a 112-module VBA project in less than 15ms - so we added it back.. and didn't bother reinstating the indent progress window.
  • Option Base 0 inspection; a simple inspection that locates Option Base 0 statements, which are redundant (it's the default setting in VBA); a quick-fix removes them effortlessly.
  • New WPF UI for several refactoring dialogs:
    • Rename
    • Remove Parameters (includes a preview of affected signature(s))
    • Reorder Parameters (includes a preview of affected signature(s))
  • #2805 Context status label now displays the containing scope instead of the containing module when the selection isn't on a declaration or identifier reference, inside a procedure body. The lookups have also been optimized, they're now pretty much instant.

Fixes

  • #2727 refactor/rename no longer incorrectly warns about name clashes.
  • #2737 DeclarationFinder now correctly handles multiple classes implementing the same interface.
  • #2773 Introduced a small delay before launching the initial parse; this prevents a race condition where Rubberduck could start parsing modules that the VBE hasn't finished loading.
  • #2802 Concurrent file I/O was possibly causing a parser error; fixed, and we now generate the temp files under %temp%\Rubberduck instead of under the install folder.
  • #2814 Fixed race condition (?) possibly causing a hard crash when the module of the ActiveCodePane gets removed.
  • #2849 ParameterCanBeByVal false positive with object parameter, fixed.
  • Several fixes in the DeclarationFinder, which was throwing a number of exceptions - all fixed.
  • Full commit log here

RD 2.0.12

05 Mar 08:07
Compare
Choose a tag to compare

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 ...
Read more

RD 2.0.11

06 Jan 06:45
Compare
Choose a tag to compare

This release primarily addresses some resolver issues that were present in 2.0.10, and fixes a few inspection bugs.

  • #2484 Built-in members now resolve correctly again (also #2349, #2350 and #2480 )
  • #2447 enum types now resolve correctly as well

Known issues

  • Redundant parentheses may cause parser errors.
  • It's still possible that the host application crashes on exit.
  • Unloading, and then re-loading the add-in from the IDE's "addins manager" will wreck the IDE and its host. Don't do that.
  • Initial parse needs to be triggered manually.
  • Slow to process larger projects.
  • In some larger projects there can be more inspection results than can reasonably be displayed in the toolwindow.

See here for the complete list of opened issues.


Installing

As with previous versions, installation requires administrative privileges. See the Installing wiki page for all the details and troubleshooting.

RD 2.0.10

04 Jan 04:56
Compare
Choose a tag to compare

It's been a while since 2.0.9 already, tons of improvements were made, some issues were fixed, others were found.

The indenter works pretty well at this point, and the parser/resolver handles almost everything you can throw at it (that VBA can deal with).

Known issues

  • Redundant parentheses cause parser errors.
  • Aliased functions (Left, Mid, Right, among others) somehow don't resolve as they should, and pop up as undeclared variables.
  • Although it's now much more stable than it was, it's still possible that the host application crashes on exit.
  • Unloading, and then re-loading the add-in from the IDE's "addins manager" will wreck the IDE and its host. Don't do that.
  • Initial parse needs to be triggered manually.
  • Slow to process larger projects.
  • In some larger projects there can be more inspection results than can reasonably be displayed in the toolwindow.

See here for all currently opened issues. As Rubberduck is an ongoing project and 2.0 is faster and altogether better than the previous "green" release, v2.0.10 is the first 2.x release to be released as a "stable" release - this doesn't mean it's perfect.. but it has so much fewer problems than 1.4.3 did, that it wouldn't be fair to keep delaying a 2.x upgrade anymore.


Fixed issues

There are currently 498 closed 2.0 issues... many, many, many were closed with recent pull requests. Indenter, resolver, inspections, ...feel free to browse the list!


Installing

As with previous versions, installation requires administrative privileges. See the Installing wiki page for all the details and troubleshooting.

2.0 RC6 - Stability Fix

10 Oct 15:36
Compare
Choose a tag to compare
Pre-release

This version fixes a number of bugs reported in the previous releases, and no longer seems to crash at startup, teardown, or randomly for no apparent reason.

At least one user running Office 2016 has been experiencing crashes on exit. I have not been able to reproduce any crash-on-exit in Office 2010.

See installing Rubberduck for installation instructions and troubleshooting.

Still tagging "pre-release", because the changes involved in this stability fix have made the technical debt of the test suite surface, and break half the tests in the solution: a "green" tag will be created (with more minor bug fixes) once the technical debt on the tests has been paid.

Known Issues

  • Rubberduck cannot be re-loaded after unloading from the add-ins manager dialog: the VBE host must be restarted to reload - basically the teardown code is assuming the VBE/host is being torn down as well when the add-in disconnects from the host.
  • Initial parse has been disabled, as it seems to be running before the entire VBE is constructed and therefore contributed to startup crashes. You can trigger a parse manually by clicking the 'refresh' button on the 'Rubberduck' toolbar.
  • Extract Method refactoring may misplace the call site of the extracted method, depending on where local variables are declared (before/within/after the selection).

2.0 Release Candidate 5

29 Jul 22:10
Compare
Choose a tag to compare
Pre-release

The eighth beta release.

  • Refactorings:
    • Encapsulate Field now has better name validation for the new property.
    • All refactoring dialogs have updated tab orders for improved usability.
    • Many bug fixes in Remove Parameters and Reorder Parameters.
  • Settings:
    • Fixed a couple bugs causing the settings to not be saved correctly.
    • Inspections:
    • Write Only Property inspection now has a quick fix to implement a property getter.
    • Convert to Function quick fix received a bug fix to make it stop removing the entire body of the target function/property get.
  • Unit Tests:
    • Ensure the project references the Rubberduck library before running early-bound tests.
  • General:
    • Fixed bug causing exception when opening new projects.
    • Reduced our memory leaks.
  • Code Explorer:
    • Now features commands to expand or collapse all nodes lower than and including the selected one.
  • Localization:
    • Removed obsolete Swedish and Japanese translations.

2.0 Release Candidate 4

23 Jul 00:39
Compare
Choose a tag to compare
Pre-release

The seventh beta release, featuring many general bug fixes.

  • Unit Testing:
    • Disable the Run commands for certain parser states, including the Parsing and Error states.
  • Refactorings:
    • Fix bugs in the Extract Interface refactoring.
    • Sets the selection after the refactoring completes to avoid losing focus on the code pane.
    • Encapsulate Field now correctly uses the Set keyword on assignments.
    • Encapsulate Field now uses the indenter settings when adding properties.
    • Encapsulate Field now has its own hotkey—CTRL + Shift + E
  • ToDo Explorer:
    • Make the ToDo Explorer update after the parse finishes, rather than waiting for the Ready state.
  • Code Explorer:
    • Fix a bug when sorting by type.
    • Double-clicking in the whitespace no longer opens the code pane for the focused node.
  • Settings:
    • Allow the user to set identifiers to ignore in the Use Meaningful Name inspection. Note that there is a bug when editing an identifier and adding a new value to the list causing the old value to not be saved.
  • Inspections:
    • Use Meaningful Name inspection now ignores user-specified identifiers.
    • Variable Type Not Declared inspection no longer places the explicit As Variant in multiple places.
    • Obsolete Comment Usage inspection quick fixes no longer eat a leading space before the comment.
    • Now disables the quick fix commands when the parser state is not Ready.
    • The quick fix for encapsulating public fields is now working.
  • Source Control:
    • Now correctly clears the view when the tracked project is closed.
    • No longer crashes when opening a repository tracking document-type files that do not exist in the current project.
    • Saves all changes when the project is closed (when the host app is not closed before the project can be closed, anyway).
  • Localization:
    • As always, our German contributors have been keeping the German translation up-to-date.

2.0 Release Candidate 3

18 Jul 17:10
Compare
Choose a tag to compare
Pre-release

The sixth beta release, fixing many more bugs with a special emphasis on the inspections.

  • Parsing/Resolving:
    • Prevent parser/resolver from throwing when creating annotations without arguments for '@Ignore and '@Folder annotations.
  • Inspections:
    • Implement new inspection to check for malformed annotations.
    • Inspections working off the parse tree, such as Obsolete Call Statement, work again.
    • '@Ignore annotation works for parameters and inspections working off the parse tree.
    • Parameter Can Be ByVal inspection now supports inspecting interface implementations and event handlers.
    • Unassigned Variable Usage* inspection now ignores variables passed to the Len and LenB functions, which do not use the variable values.
    • Various bug fixes.
  • Source Control:
    • Now has a hotkey.
  • Find Symbol:
    • Improved performance.
  • Regex Assistant:
    • _NEW!_ Helps you understand your Regex calls.
  • Localization:
    • Inspection quick fix menu has correct localization.
  • Code Explorer:
    • Fixed bug in the Import command.
  • Hotkeys:
    • Individual commands do not run unless they are enabled.
  • Refactorings:
    • Fixed many bugs in Move Closer to Usage.

2.0 Release Candidate 2

09 Jul 00:32
Compare
Choose a tag to compare
Pre-release

The fifth beta release, fixing many more bugs and improving hotkey and parser/resolver performance.

  • Source Control:
    • Remove reference to the Aero2 library known to cause crashes at least occasionally in Windows 7 and lower.
    • Reload changed modules one at a time to prevent losing a bunch of modules if the host crashes in the process.
    • Fix bug causing crash when initializing repository with existing user form.
  • Parser/Resolver:
    • Cancelling a build correctly cancels it now, rather than letting two parse/resolve sequences execute at the same time.
    • Improves performance of resolving declarations by optimizing a very expensive calculation.
    • Querying the status of a removed component no longer throws an exception.
    • Rubberduck correctly parses multiple projects again.
  • Localization:
    • Correctly localizes dockable window captions.
  • Code Explorer:
    • Multiline signatures are now displayed on a single line.
    • Wraps all items in the button panel.
    • Shows type of selected node in the bottom panel.
  • Inspections:
    • Improve performance of the Implicit ByRef Parameter inspection.
    • Fix bug in quick fix causing uncompilable code when adding an explicit type to a parameter with a default value.
  • Unit Testing:
    • Fix multiple bugs that can either disable the add method commands, or throw an exception.
  • Status Bar:
    • Correctly displays user selection again, rather than the declaration selection.
  • Hotkeys:
    • Handles hotkeys when Rubberduck’s dockable windows are focused.