mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Ruby: add overlay[local] annotations to AST/CFG/SSA layers
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
/** Provides classes for working with locations. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
import files.FileSystem
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides classes for working with files and folders. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.Locations
|
||||
private import codeql.util.FileSystem
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
import codeql.Locations
|
||||
import ast.Call
|
||||
import ast.Control
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides classes relating to extraction diagnostics. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.Locations
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.Call
|
||||
@@ -52,6 +55,7 @@ class Call extends Expr instanceof CallImpl {
|
||||
final int getNumberOfArguments() { result = super.getNumberOfArgumentsImpl() }
|
||||
|
||||
/** Gets a potential target of this call, if any. */
|
||||
overlay[global]
|
||||
final Callable getATarget() {
|
||||
exists(DataFlowCall c |
|
||||
this = c.asCall().getExpr() and
|
||||
@@ -153,6 +157,7 @@ class MethodCall extends Call instanceof MethodCallImpl {
|
||||
* TODO: When API Graphs is able to resolve calls to methods like `Kernel.send`
|
||||
* this class is no longer necessary and should be removed.
|
||||
*/
|
||||
overlay[global]
|
||||
class UnknownMethodCall extends MethodCall {
|
||||
UnknownMethodCall() { not exists(this.(Call).getATarget()) }
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.Constant
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.Control
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.Erb
|
||||
private import internal.TreeSitter
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.CFG
|
||||
private import internal.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.Regexp as RE
|
||||
private import internal.AST
|
||||
@@ -387,6 +390,7 @@ class RegExpLiteral extends StringlikeLiteral instanceof RegExpLiteralImpl {
|
||||
final predicate hasFreeSpacingFlag() { this.getFlagString().charAt(_) = "x" }
|
||||
|
||||
/** Returns the root node of the parse tree of this regular expression. */
|
||||
overlay[global]
|
||||
final RE::RegExpTerm getParsed() { result = RE::getParsedRegExp(this) }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.controlflow.ControlFlowGraph
|
||||
private import internal.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.CFG
|
||||
private import internal.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.TreeSitter
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.Variable
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.Pattern
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
private import internal.Scope
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.CFG
|
||||
private import internal.AST
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides classes for modeling program variables. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import internal.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
import codeql.Locations
|
||||
private import TreeSitter
|
||||
private import codeql.ruby.ast.internal.Call
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import TreeSitter
|
||||
private import Variable
|
||||
private import codeql.ruby.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.AST
|
||||
private import codeql.ruby.ast.internal.Literal
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import TreeSitter
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
import codeql.Locations
|
||||
private import TreeSitter
|
||||
private import codeql.ruby.ast.Erb
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.CFG
|
||||
private import AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import AST
|
||||
private import Constant
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import AST
|
||||
private import TreeSitter
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import Scope as Scope
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import AST
|
||||
private import TreeSitter
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import AST
|
||||
private import TreeSitter
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.Expr
|
||||
private import codeql.ruby.ast.internal.Parameter
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import TreeSitter
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.AST
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides predicates for synthesizing AST nodes. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import AST
|
||||
private import TreeSitter
|
||||
|
||||
@@ -23,6 +23,7 @@ private predicate discardLocation(@location_default loc) {
|
||||
)
|
||||
}
|
||||
|
||||
overlay[local]
|
||||
module Ruby {
|
||||
/** The base class for all AST nodes */
|
||||
class AstNode extends @ruby_ast_node {
|
||||
@@ -67,7 +68,6 @@ module Ruby {
|
||||
}
|
||||
|
||||
/** Gets the file containing the given `node`. */
|
||||
overlay[local]
|
||||
private @file getNodeFile(@ruby_ast_node node) {
|
||||
exists(@location_default loc | ruby_ast_node_location(node, loc) |
|
||||
locations_default(loc, result, _, _, _, _)
|
||||
@@ -75,7 +75,6 @@ module Ruby {
|
||||
}
|
||||
|
||||
/** Holds if `node` is in the `file` and is part of the overlay base database. */
|
||||
overlay[local]
|
||||
private predicate discardableAstNode(@file file, @ruby_ast_node node) {
|
||||
not isOverlay() and file = getNodeFile(node)
|
||||
}
|
||||
@@ -1967,6 +1966,7 @@ module Ruby {
|
||||
}
|
||||
}
|
||||
|
||||
overlay[local]
|
||||
module Erb {
|
||||
/** The base class for all AST nodes */
|
||||
class AstNode extends @erb_ast_node {
|
||||
@@ -2011,7 +2011,6 @@ module Erb {
|
||||
}
|
||||
|
||||
/** Gets the file containing the given `node`. */
|
||||
overlay[local]
|
||||
private @file getNodeFile(@erb_ast_node node) {
|
||||
exists(@location_default loc | erb_ast_node_location(node, loc) |
|
||||
locations_default(loc, result, _, _, _, _)
|
||||
@@ -2019,7 +2018,6 @@ module Erb {
|
||||
}
|
||||
|
||||
/** Holds if `node` is in the `file` and is part of the overlay base database. */
|
||||
overlay[local]
|
||||
private predicate discardableAstNode(@file file, @erb_ast_node node) {
|
||||
not isOverlay() and file = getNodeFile(node)
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import TreeSitter
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.CFG
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides classes representing basic blocks. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.AST
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides classes representing nodes in a control flow graph. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.controlflow.BasicBlocks
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides classes representing the control flow graph. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.controlflow.BasicBlocks
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
*
|
||||
* A completion represents how a statement or expression terminates.
|
||||
*/
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.AST
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
* Provides an implementation for constructing control-flow graphs (CFGs) from
|
||||
* abstract syntax trees (ASTs), using the shared library from `codeql.controlflow.Cfg`.
|
||||
*/
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.controlflow.Cfg as CfgShared
|
||||
private import codeql.ruby.AST
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.CFG
|
||||
|
||||
/** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/** Provides a simple analysis for identifying calls that will not return. */
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import Completion
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/**
|
||||
* Provides classes and predicates relevant for splitting the control flow graph.
|
||||
*/
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ruby.AST as Ast
|
||||
private import Completion as Comp
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/**
|
||||
* Provides the module `Ssa` for working with static single assignment (SSA) form.
|
||||
*/
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
/**
|
||||
* Provides classes for working with static single assignment (SSA) form.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
private import codeql.ssa.Ssa as SsaImplCommon
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.CFG as Cfg
|
||||
@@ -393,6 +396,7 @@ private module Cached {
|
||||
|
||||
signature predicate guardChecksSig(Cfg::CfgNodes::AstCfgNode g, Cfg::CfgNode e, boolean branch);
|
||||
|
||||
overlay[global]
|
||||
cached // nothing is actually cached
|
||||
module BarrierGuard<guardChecksSig/3 guardChecks> {
|
||||
private predicate guardChecksAdjTypes(
|
||||
|
||||
Reference in New Issue
Block a user