Skip to content

VBA.Array() Inspection #6212

Closed
Closed
@retailcoder

Description

@retailcoder

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 1 is specified, qualified VBA.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 1 is NOT specified, qualifying VBA.Array() calls should warn/hint about the behavior being different than that of an unqualified Array() 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 Sub

QuickFixes
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-inspectionsup-for-grabsUse this label in conjunction with a difficulty level label, e.g. difficulty-02-ducky

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions