VBA.Array() Inspection
retailcoder opened this issue · 2 comments
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, 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 1
is 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 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.
There's already one 😉
Although, I'm not sure the part about ParamArray
is mentioned in the xmldoc. Or perhaps an inspection that flags (hint?) ParamArray
parameters when Option Base 1
is on would be more targeted.