mirror of
https://github.com/github/codeql.git
synced 2026-04-28 02:05:14 +02:00
JS: Avoid duplicate alerts
This commit is contained in:
@@ -14,12 +14,35 @@
|
||||
|
||||
import javascript
|
||||
|
||||
from BindingPattern p, string n, VarDecl v, VarDecl w
|
||||
class RootDestructuringPattern extends BindingPattern {
|
||||
RootDestructuringPattern() {
|
||||
this instanceof DestructuringPattern and
|
||||
not this = any(PropertyPattern p).getValuePattern() and
|
||||
not this = any(ArrayPattern p).getAnElement()
|
||||
}
|
||||
|
||||
/** Holds if this pattern has multiple bindings for `name`. */
|
||||
predicate hasConflictingBindings(string name) {
|
||||
exists(VarRef v, VarRef w |
|
||||
v = getABindingVarRef() and
|
||||
w = getABindingVarRef() and
|
||||
name = v.getName() and
|
||||
name = w.getName() and
|
||||
v != w
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets the first occurrence of the conflicting binding `name`. */
|
||||
VarDecl getFirstClobberedVarDecl(string name) {
|
||||
hasConflictingBindings(name) and
|
||||
result = min(VarDecl decl | decl = getABindingVarRef() and decl.getName() = name | decl order by decl.getLocation().getStartLine(), decl.getLocation().getStartColumn())
|
||||
}
|
||||
}
|
||||
|
||||
from RootDestructuringPattern p, string n, VarDecl v, VarDecl w
|
||||
where
|
||||
v = p.getABindingVarRef() and
|
||||
v = p.getFirstClobberedVarDecl(n) and
|
||||
w = p.getABindingVarRef() and
|
||||
v.getName() = n and
|
||||
w.getName() = n and
|
||||
v != w and
|
||||
v.getLocation().startsBefore(w.getLocation())
|
||||
v != w
|
||||
select w, "Repeated binding of pattern variable '" + n + "' previously bound $@.", v, "here"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
| ts-test.ts:21:8:21:13 | string | Repeated binding of pattern variable 'string' previously bound $@. | ts-test.ts:20:8:20:13 | string | here |
|
||||
| ts-test.ts:32:16:32:16 | x | Repeated binding of pattern variable 'x' previously bound $@. | ts-test.ts:30:12:30:12 | x | here |
|
||||
| ts-test.ts:34:20:34:20 | x | Repeated binding of pattern variable 'x' previously bound $@. | ts-test.ts:30:12:30:12 | x | here |
|
||||
| ts-test.ts:34:20:34:20 | x | Repeated binding of pattern variable 'x' previously bound $@. | ts-test.ts:32:16:32:16 | x | here |
|
||||
| tst.js:3:13:3:13 | x | Repeated binding of pattern variable 'x' previously bound $@. | tst.js:3:10:3:10 | x | here |
|
||||
| tst.js:8:16:8:16 | x | Repeated binding of pattern variable 'x' previously bound $@. | tst.js:8:10:8:10 | x | here |
|
||||
| tst.js:11:10:11:10 | x | Repeated binding of pattern variable 'x' previously bound $@. | tst.js:11:7:11:7 | x | here |
|
||||
|
||||
Reference in New Issue
Block a user