Files
codeql/ql/src/codeql_ruby/AST.qll
2020-11-26 15:33:50 +00:00

55 lines
1.5 KiB
Plaintext

import codeql.Locations
import codeql_ruby.Method
import codeql_ruby.Parameter
private import codeql_ruby.Generated
/**
* A node in the abstract syntax tree. This class is the base class for all Ruby
* program elements.
*/
class AstNode extends @ast_node {
Generated::AstNode generated;
AstNode() { generated = this }
/**
* Gets the name of a primary CodeQL class to which this node belongs.
*
* This predicate always has a result. If no primary class can be
* determined, the result is `"???"`. If multiple primary classes match,
* this predicate can have multiple results.
*/
string describeQlClass() { result = "???" }
/** Gets a textual representation of this node. */
string toString() { result = "AstNode" }
/** Gets the location if this node. */
Location getLocation() { result = generated.getLocation() }
/**
* Gets the parent of this node in the abstract syntax tree, if it has one.
*/
AstNode getParent() { result = generated.getParent() }
/**
* Gets the index (position) of this node in the parent node's list of
* children.
*/
int getParentIndex() { result = generated.getParentIndex() }
}
/**
* Models program elements for destructured patterns.
*/
abstract class Pattern extends AstNode {
/** Gets the number of elements in this pattern. */
abstract int getNumberOfElements();
/** Gets the nth element in this pattern. */
abstract AstNode getElement(int n);
/** Gets an element in this pattern. */
AstNode getAnElement() { result = this.getElement(_) }
}