mirror of
https://github.com/github/codeql.git
synced 2026-02-24 02:43:40 +01:00
34 lines
1003 B
Plaintext
34 lines
1003 B
Plaintext
import codeql.ruby.controlflow.internal.ControlFlowGraphImpl::Consistency as Consistency
|
|
import Consistency
|
|
import codeql.ruby.AST
|
|
import codeql.ruby.CFG
|
|
import codeql.ruby.controlflow.internal.Completion
|
|
import codeql.ruby.controlflow.internal.ControlFlowGraphImpl as CfgImpl
|
|
|
|
/**
|
|
* All `Expr` nodes are `PostOrderTree`s
|
|
*/
|
|
query predicate nonPostOrderExpr(Expr e, string cls) {
|
|
cls = e.getPrimaryQlClasses() and
|
|
not exists(e.getDesugared()) and
|
|
not e instanceof BeginExpr and
|
|
not e instanceof Namespace and
|
|
not e instanceof Toplevel and
|
|
exists(AstNode last, Completion c |
|
|
CfgImpl::last(e, last, c) and
|
|
last != e and
|
|
c instanceof NormalCompletion
|
|
)
|
|
}
|
|
|
|
query predicate scopeNoFirst(CfgScope scope) {
|
|
Consistency::scopeNoFirst(scope) and
|
|
not scope = any(StmtSequence seq | not exists(seq.getAStmt())) and
|
|
not scope =
|
|
any(Callable c |
|
|
not exists(c.getAParameter()) and
|
|
not c.(BodyStmt).hasEnsure() and
|
|
not exists(c.(BodyStmt).getARescue())
|
|
)
|
|
}
|