-
Notifications
You must be signed in to change notification settings - Fork 315
Closed
Labels
enhancementFeature requests, or enhancements to existing features. Ideas. Anything within the project's scope.Feature requests, or enhancements to existing features. Ideas. Anything within the project's scope.feature-inspectionsup-for-grabsUse this label in conjunction with a difficulty level label, e.g. difficulty-02-duckyUse this label in conjunction with a difficulty level label, e.g. difficulty-02-ducky
Description
What
An inspection that locates qualified VBA.Array() function calls to warn about possibly unexpected behavior; depending on how it's implemented this one could be a hint under language opportunities, or a warning under code quality, ...or both 😃
Why
Qualified VBA.Array() function calls yield an array that is always zero-based, but unqualified 'Array()' yields an array that is one-based given Option Base 1.
- If
Option Base 1is specified, qualifiedVBA.Array()calls become inconsistent zero-based arrays in a module where implicitly-sized arrays can reasonably be assumed to be one-based. - If
Option Base 1is NOT specified, qualifyingVBA.Array()calls should warn/hint about the behavior being different than that of an unqualifiedArray()call.
Example
This code should trigger the inspection:
Option Base 1 '<~ Implicit array lower bound is 1
Public Sub DoSomething()
Dim Values As Variant
Values = Array(42)
Debug.Print LBound(Values) '<~ 1 as per Option Base
Values = VBA.Array(42) '<<< inspection result here
Debug.Print LBound(Values) '<~ not 1
End SubQuickFixes
Rubberduck could offer to remove the qualifier, albeit with a disclaimer that doing so may introduce off-by-one errors if the code makes any assumptions about array boundaries: it changes what the code does, not just how it does it.
Metadata
Metadata
Assignees
Labels
enhancementFeature requests, or enhancements to existing features. Ideas. Anything within the project's scope.Feature requests, or enhancements to existing features. Ideas. Anything within the project's scope.feature-inspectionsup-for-grabsUse this label in conjunction with a difficulty level label, e.g. difficulty-02-duckyUse this label in conjunction with a difficulty level label, e.g. difficulty-02-ducky