Skip to content

Releases: rubberduck-vba/Rubberduck

Rubberduck v2.3.1.4308

10 Dec 05:56
7e17257
Compare
Choose a tag to compare

Rubberduck version 2.3.1.4308 was built with ❤️ by AppVeyor CI on [master] - https://ci.appveyor.com/project/rubberduck-vba/rubberduck/build/2.3.1.4308


Installation instructions

VBA6 | VBA7 x86/x64

Installs without administrator privileges for the current Windows user login. Local admin users should install for all users and register the add-in for their login at the end of the installation - add-in will need to be manually registered for other users on the same machine.

VB6

If Visual Studio 6.0 is executed with administrator privileges, Rubberduck should be installed for all users.

Known Issues

  • Memory leak on unload: repeatedly unloading+reloading Rubberduck via the VBE's add-ins manager dialog results in increased RAM usage in the host process. Process usually shuts down normally regardless.

Features

No new features; this is a hotfix release.

Bug fixes

30 issues labelled 'bug' were closed; 95 commits were made, affecting 166 source files.

  • #4553 "Add unit test" command now works correctly.
  • #4393 "Open Designer" menu in Code Explorer now appears correctly.
  • #4552 "Extract Interface" now works correctly.
  • #4548 VB6 menu bar no longer duplicates RD menu on startup.
  • #4556 Fixed possible crash at startup.
  • #4591 Fixed grammar bug with multiple 'WithEvents' variables declared in the same instruction.
  • #4545, #3770, #1388 Fixed false positive for ByRef assignment
  • #4230, #4555, high-DPI displays should no longer glitch.
  • #4579, #4587, "Ignore Once" quickfix bugs fixed.
  • #4256, #4594 "Illegal Annotation" inspection false positives fixed.
  • #4037, #4318; false positives for "Object variable not set" inspection, fixed.
  • #4530, #4531 "Use 'Set' keyword" quickfix now correctly positions the 'Set' token given a member call.
  • #4543 Self-closing pairs now correctly accounts for VBE autocompletion of '?' token expanding to 'Print'.
  • #4611 Self-closing pairs now correctly bail out of Call Something( and RaiseEvent Something( calls (closing parenthesis cannot be automatically added, VBE eats it).
  • #4621 Autocompletion handlers now catch and log exceptions, and bail out on error... instead of crashing the host application.

See closed bug issues for an exhaustive list of issues closed since release 2.3.0.

Rubberduck v2.3.0

25 Nov 23:38
d1840ac
Compare
Choose a tag to compare

Installation instructions.

Built with ❤️ by AppVeyor CI on [master] - https://ci.appveyor.com/project/rubberduck-vba/rubberduck/build/2.3.0.4221

This release introduces Rubberduck to the Visual Basic 6.0 editor. It adds automatic completion and smart concatenation, as well as a number of Inspections.

Additionally this release even further improves the stability of Rubberduck and makes use of the streamlined automatic release pipeline.

For a more comprehensive overview of what's changing for users, check out the announcement on our blog.
If you want to know all about the nitty-gritty details, you may want to take a look at the release pull request containing all the commits that went into this release :)

Rubberduck v2.2.0

08 Apr 23:42
8fd7e12
Compare
Choose a tag to compare

Installation instructions.

AppVeyor build on [master] - https://ci.appveyor.com/project/retailcoder/rubberduck/build/2.2.0.3086

This is our most stable release to date. Crash-on-exit problems are resolved, although the teardown process is still not 100% where it needs to be.

Known Issues

  • Unloading, and then re-loading Rubberduck from the VBE's Add-Ins Manager will no longer crash the host application and brick the VBE, however despite the MASSIVE improvements we are still somehow not fully unloading everything, which means memory consumption will not drop as much as it should upon unloading - and then re-loading will work, but the leaked objects will remain in memory. Unload+Reload via Add-Ins Manager therefore remains a not-recommended thing to do.
  • Some hosts may not be able to load Rubberduck. This needs to be investigated & resolved, but at least one instance of a per-user install cause Sage 300 ERP to no longer load Rubberduck, while Office hosts worked as expected on the same machine.
  • Please see our reported bugs for the complete backlog. Note that we also use critical and edge-case labels for known issues.

Features

This release includes over 1K commits since the December 2017 v2.1; not a lot of these are visible, user-facing changes, but our internal API has had a little revolution, and upcoming releases will reap the benefits.

  • Per-user installation! Starting with this release, Rubberduck no longer requires administrative privileges to install. If you are already running a previous version, please manually uninstall before proceeding - the installer will know what to do and walk you through it. See Installation instructions for all the details.
  • Source Control Integration is gone! Given the sheer amount of issues this side-feature was causing, we have taken the decision to remove the Source Control panel. You can still easily export all the code files and use your favorite source control technology, but we've removed VBE-integrated Git support for now.
  • Code Metrics still needs some UI love, but this release enhances how the feature computes nesting levels.
  • Compile before Parse is also a new feature. Since forever, Rubberduck needed to be assuming to be working against compilable code. Starting with this release, you have the option to trigger a compilation on reparse, and Rubberduck won't try to parse a project that doesn't compile.
  • Host-independent Unit Testing. Also since forever, Rubberduck needed a reference to the host application's interop library, and that library needed to provide a way for us to invoke the test methods (e.g. Application.Run) - starting with this release, we can run unit tests in any VBA host.
  • New Inspections. Of course a Rubberduck release without a handful of new code inspections would be disappointing. We're not letting you down - there are now 66 implemented inspections in total!
    • DefTypeStatement locates Def[Type] statements and warns you about implicit typing happening in a module. Future enhancements will include a quick-fix to replace implicit declarations with explicit ones.
    • StepIsNotSpeciifed locates For loop statements with an implicit Step clause. Disabled by default.
    • StepOneIsRedundant locates For loop statements with an explicit Step 1 clause.
    • UnhandledOnErrorResumeNext warns about suppressed run-time errors that aren't restored by an On Error GoTo 0 statement.
    • UnreachableCase inspection evaluates Case expressions and is able to determine when a Case block is semantically unreachable.

Rubberduck v2.1.1

09 Dec 19:54
Compare
Choose a tag to compare

Installation instructions

Running Rubberduck as a non-admin user

This release is the second release of the 2.1 cycle. We're about to do some really difficult and possibly messy work on the internals of Rubberduck, that should help us stabilize and simplify development.

Known Issues

  • Still possible silent crash on exit. Current theories point to "trusted documents", toolbar setup and a handful of other issues.
  • Unloading and then reloading the add-in from the IDE's "addIns manager" will still not re-load correctly. Don't do that. We told you not to. Again :) (if you do this by accident, immediately kill the host process via Task Manager; the VBE should recover next time it's loaded).
  • Please see our reported bugs for the complete backlog. Note that we also use critical and edge-case labels for known issues.

New Features

This release "just" contains 200 commits, which changed 317 Files. A lot of this is improvements to the codebase and the process. @MDoerner singlehandedly ported all the "setup code" for the addin to a new IoC Container and fixed our issues when running tests.

We had some awesome first-time-contributions to the duck, some coming from the hacktoberfest event that github hosted. These include:

  • Updated CodeInspectionTypes for a ton of inspections, hat tip to @IpshitaC
  • An update to the git-library that Rubberduck uses, getting us to the latest version, hat tip to @NelsonVides
  • Some nice bug fixes, courtesy of @AnnaVel
  • Some German translations

We also added the whole-new feature of "Code Metrics". You can now analyze your modules and members for three quality metrics: Lines of Code, Nesting Level and "Cyclomatic Complexity". Additional Code Metrics could be coming in the next releases:
What did you always need to know about your codebase?

Last but not least, this release also includes bugfixes for some longstanding issues as well as some less longstanding ones.

You can get a comprehensive overview of which changes went into the release from here

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