Releases: rubberduck-vba/Rubberduck
Rubberduck v2.3.1.4308
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(
andRaiseEvent 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
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
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
locatesDef[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
locatesFor
loop statements with an implicitStep
clause. Disabled by default.StepOneIsRedundant
locatesFor
loop statements with an explicitStep 1
clause.UnhandledOnErrorResumeNext
warns about suppressed run-time errors that aren't restored by anOn Error GoTo 0
statement.UnreachableCase
inspection evaluatesCase
expressions and is able to determine when aCase
block is semantically unreachable.
Rubberduck v2.1.1
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
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
andMissingAttribute
inspections are disabled by default, as theirSynchronizeModuleAttributes
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)
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
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 addingOption 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
andTKIND_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 ...
RD 2.0.11
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
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
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).