Python: Teach py/unreachable-statement about contextlib.suppress.

This commit is contained in:
Taus Brock-Nannestad
2019-10-03 15:12:41 +02:00
parent 37291c5642
commit 99b99ef2b6
5 changed files with 49 additions and 0 deletions

View File

@@ -31,9 +31,18 @@ predicate unique_yield(Stmt s) {
)
}
/** Holds if `contextlib.suppress` may be used in the same scope as `s` */
predicate suppression_in_scope(Stmt s) {
exists(With w |
w.getContextExpr().(Call).getFunc().pointsTo(Value::named("contextlib.suppress")) and
w.getScope() = s.getScope()
)
}
predicate reportable_unreachable(Stmt s) {
s.isUnreachable() and
not typing_import(s) and
not suppression_in_scope(s) and
not exists(Stmt other | other.isUnreachable() |
other.contains(s)
or