mirror of
https://github.com/github/codeql.git
synced 2026-04-28 10:15:14 +02:00
only flag unused array-destructs if it is the last variable
This commit is contained in:
@@ -45,11 +45,28 @@ predicate countingLoop(EnhancedForLoop efl) {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `iter` is the non-last variable of array-destructuring in a for-loop.
|
||||
* E.g. `for(const [foo, iter, bar] of array) {..}`.
|
||||
*/
|
||||
predicate isNonLastDestructedArrayElement(PurelyLocalVariable iter) {
|
||||
exists(ArrayPattern pattern | pattern = any(EnhancedForLoop loop).getLValue() |
|
||||
iter = pattern.getAVariable() and
|
||||
iter =
|
||||
pattern
|
||||
.getElement([0 .. pattern.getSize() - 2])
|
||||
.(BindingPattern)
|
||||
.getABindingVarRef()
|
||||
.getVariable()
|
||||
)
|
||||
}
|
||||
|
||||
from EnhancedForLoop efl, PurelyLocalVariable iter
|
||||
where
|
||||
iter = efl.getAnIterationVariable() and
|
||||
not exists(SsaExplicitDefinition ssa | ssa.defines(efl.getIteratorExpr(), iter)) and
|
||||
exists(ReachableBasicBlock body | body.getANode() = efl.getBody() | body.getASuccessor+() = body) and
|
||||
not countingLoop(efl) and
|
||||
not isNonLastDestructedArrayElement(iter) and
|
||||
not iter.getName().toLowerCase().regexpMatch("(_|dummy|unused).*")
|
||||
select efl.getIterator(), "For loop variable " + iter.getName() + " is not used in the loop body."
|
||||
|
||||
Reference in New Issue
Block a user