diff --git a/ql/src/codeql_ql/ast/Ast.qll b/ql/src/codeql_ql/ast/Ast.qll index 418e4102d72..d7cb876f5ea 100644 --- a/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/src/codeql_ql/ast/Ast.qll @@ -57,6 +57,9 @@ class AstNode extends TAstNode { */ string getAPrimaryQlClass() { result = "???" } + /** Gets the QLDoc comment for this AST node, if any. */ + QLDoc getQLDoc() { none() } + /** * Gets the predicate that contains this AST node. */ @@ -77,13 +80,56 @@ class TopLevel extends TTopLevel, AstNode { * Gets a member from contained in this top-level module. * Includes private members. */ - ModuleMember getAMember() { toGenerated(result) = file.getChild(_).getChild(_) } + ModuleMember getAMember() { result = getMember(_) } + + ModuleMember getMember(int i) { toGenerated(result) = file.getChild(i).getChild(_) } + + /** Gets a top-level import in this module. */ + Import getAnImport() { result = this.getAMember() } + + /** Gets a top-level class in this module. */ + Class getAClass() { result = this.getAMember() } + + /** Gets a top-level predicate in this module. */ + ClasslessPredicate getAPredicate() { result = this.getAMember() } + + /** Gets a module defined at the top-level of this module. */ + Module getAModule() { result = this.getAMember() } + + /** Gets a `newtype` defined at the top-level of this module. */ + NewType getANewType() { result = this.getAMember() } override ModuleMember getAChild(string pred) { - pred = directMember("getAMember") and result = this.getAMember() + pred = directMember("getQLDoc") and result = this.getQLDoc() + or + pred = directMember("getAnImport") and result = this.getAnImport() + or + pred = directMember("getAClass") and result = this.getAClass() + or + pred = directMember("getAPredicate") and result = this.getAPredicate() + or + pred = directMember("getAModule") and result = this.getAModule() + or + pred = directMember("getANewType") and result = this.getANewType() + } + + QLDoc getQLDocFor(ModuleMember m) { + exists(int i | i > 0 and result = this.getMember(i) and m = this.getMember(i + 1)) } override string getAPrimaryQlClass() { result = "TopLevel" } + + override QLDoc getQLDoc() { toGenerated(result) = file.getChild(0).getChild(0) } +} + +class QLDoc extends TQLDoc, AstNode { + Generated::Qldoc qldoc; + + QLDoc() { this = TQLDoc(qldoc) } + + string getContents() { result = qldoc.getValue() } + + override string getAPrimaryQlClass() { result = "QLDoc" } } /** @@ -135,7 +181,7 @@ class Select extends TSelect, AstNode { * A QL predicate. * Either a classless predicate, a class predicate, or a characteristic predicate. */ -class Predicate extends TPredicate, AstNode { +class Predicate extends TPredicate, AstNode, Declaration { /** * Gets the body of the predicate. */ @@ -144,7 +190,7 @@ class Predicate extends TPredicate, AstNode { /** * Gets the name of the predicate. */ - string getName() { none() } + override string getName() { none() } /** * Gets the `i`th parameter of the predicate. @@ -389,7 +435,7 @@ class VarDef extends TVarDef, AstNode { /** * A variable declaration, with a type and a name. */ -class VarDecl extends TVarDecl, VarDef { +class VarDecl extends TVarDecl, VarDef, Declaration { Generated::VarDecl var; VarDecl() { this = TVarDecl(var) } @@ -428,6 +474,8 @@ class VarDecl extends TVarDecl, VarDef { or pred = directMember("getTypeExpr") and result = this.getTypeExpr() } + + override string toString() { result = this.getName() } } /** @@ -501,6 +549,14 @@ class Module extends TModule, ModuleDeclaration { toGenerated(result) = mod.getChild(_).(Generated::ModuleMember).getChild(_) } + AstNode getMember(int i) { + toGenerated(result) = mod.getChild(i).(Generated::ModuleMember).getChild(_) + } + + QLDoc getQLDocFor(AstNode m) { + exists(int i | result = this.getMember(i) and m = this.getMember(i + 1)) + } + /** Gets the module expression that this module is an alias for, if any. */ ModuleExpr getAlias() { toGenerated(result) = mod.getAFieldOrChild().(Generated::ModuleAliasBody).getChild() @@ -528,7 +584,21 @@ class Declaration extends TDeclaration, AstNode { /** Gets the name of this declaration. */ string getName() { none() } - final override string toString() { result = this.getName() } + override string toString() { result = this.getAPrimaryQlClass() + " " + this.getName() } + + override QLDoc getQLDoc() { + result = any(TopLevel m).getQLDocFor(this) + or + result = any(Module m).getQLDocFor(this) + or + result = any(Class c).getQLDocFor(this) + } + + override AstNode getAChild(string pred) { + result = super.getAChild(pred) + or + pred = directMember("getQLDoc") and result = this.getQLDoc() + } } /** An entity that can be declared in a module. */ @@ -556,6 +626,16 @@ class Class extends TClass, TypeDeclaration, ModuleDeclaration { toGenerated(result) = cls.getChild(_).(Generated::ClassMember).getChild(_) } + AstNode getMember(int i) { + toGenerated(result) = cls.getChild(i).(Generated::ClassMember).getChild(_) or + toGenerated(result) = + cls.getChild(i).(Generated::ClassMember).getChild(_).(Generated::Field).getChild() + } + + QLDoc getQLDocFor(AstNode m) { + exists(int i | result = this.getMember(i) and m = this.getMember(i + 1)) + } + /** * Gets a predicate in this class. */ @@ -667,6 +747,8 @@ class NewTypeBranch extends TNewTypeBranch, TypeDeclaration { /** Gets the body of this branch. */ Formula getBody() { toGenerated(result) = branch.getChild(_).(Generated::Body).getChild() } + override QLDoc getQLDoc() { toGenerated(result) = branch.getChild(_) } + NewType getNewType() { result.getABranch() = this } override AstNode getAChild(string pred) { @@ -675,6 +757,8 @@ class NewTypeBranch extends TNewTypeBranch, TypeDeclaration { pred = directMember("getBody") and result = this.getBody() or exists(int i | pred = indexedMember("getField", i) and result = this.getField(i)) + or + pred = directMember("getQLDoc") and result = this.getQLDoc() } } diff --git a/ql/src/codeql_ql/ast/internal/AstNodes.qll b/ql/src/codeql_ql/ast/internal/AstNodes.qll index c21b77f7a53..fa1ee013e50 100644 --- a/ql/src/codeql_ql/ast/internal/AstNodes.qll +++ b/ql/src/codeql_ql/ast/internal/AstNodes.qll @@ -4,6 +4,7 @@ import TreeSitter cached newtype TAstNode = TTopLevel(Generated::Ql file) or + TQLDoc(Generated::Qldoc qldoc) or TClasslessPredicate(Generated::ClasslessPredicate pred) or TVarDecl(Generated::VarDecl decl) or TClass(Generated::Dataclass dc) or @@ -118,6 +119,8 @@ Generated::AstNode toGenerated(AST::AstNode n) { or n = TTopLevel(result) or + n = TQLDoc(result) + or n = TClasslessPredicate(result) or n = TVarDecl(result) @@ -161,9 +164,9 @@ Generated::AstNode toGenerated(AST::AstNode n) { class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate; -class TModuleMember = TModuleDeclaration or TImport or TSelect; +class TModuleMember = TModuleDeclaration or TImport or TSelect or TQLDoc; -class TDeclaration = TTypeDeclaration or TModuleDeclaration; +class TDeclaration = TTypeDeclaration or TModuleDeclaration or TPredicate or TVarDecl; class TTypeDeclaration = TClass or TNewType or TNewTypeBranch; diff --git a/ql/test/callgraph/callgraph.expected b/ql/test/callgraph/callgraph.expected index b760eff532c..39ba4dd101a 100644 --- a/ql/test/callgraph/callgraph.expected +++ b/ql/test/callgraph/callgraph.expected @@ -1,8 +1,8 @@ -| Foo.qll:5:26:5:30 | PredicateCall | Foo.qll:3:1:3:26 | foo | -| Foo.qll:10:21:10:25 | PredicateCall | Foo.qll:8:3:8:28 | ClassPredicate | -| Foo.qll:14:30:14:40 | MemberCall | Foo.qll:10:3:10:27 | ClassPredicate | -| Foo.qll:17:27:17:42 | MemberCall | Foo.qll:8:3:8:28 | ClassPredicate | -| Foo.qll:29:5:29:16 | PredicateCall | Foo.qll:20:3:20:54 | myThing2 | -| Foo.qll:29:5:29:16 | PredicateCall | Foo.qll:26:3:26:32 | alias2 | -| Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:22:3:22:32 | myThing0 | -| Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:24:3:24:32 | alias0 | +| Foo.qll:5:26:5:30 | PredicateCall | Foo.qll:3:1:3:26 | ClasslessPredicate foo | +| Foo.qll:10:21:10:25 | PredicateCall | Foo.qll:8:3:8:28 | ClassPredicate bar | +| Foo.qll:14:30:14:40 | MemberCall | Foo.qll:10:3:10:27 | ClassPredicate baz | +| Foo.qll:17:27:17:42 | MemberCall | Foo.qll:8:3:8:28 | ClassPredicate bar | +| Foo.qll:29:5:29:16 | PredicateCall | Foo.qll:20:3:20:54 | ClasslessPredicate myThing2 | +| Foo.qll:29:5:29:16 | PredicateCall | Foo.qll:26:3:26:32 | ClasslessPredicate alias2 | +| Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:22:3:22:32 | ClasslessPredicate myThing0 | +| Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:24:3:24:32 | ClasslessPredicate alias0 | diff --git a/ql/test/printAst/printAst.expected b/ql/test/printAst/printAst.expected index 1a69604ae1a..fe735f7afaa 100644 --- a/ql/test/printAst/printAst.expected +++ b/ql/test/printAst/printAst.expected @@ -3,12 +3,12 @@ nodes | Foo.qll:1:1:1:17 | Import | semmle.order | 1 | | Foo.qll:1:1:27:2 | TopLevel | semmle.label | [TopLevel] TopLevel | | Foo.qll:1:1:27:2 | TopLevel | semmle.order | 1 | -| Foo.qll:3:1:7:1 | Foo | semmle.label | [Class] Foo | -| Foo.qll:3:1:7:1 | Foo | semmle.order | 3 | +| Foo.qll:3:1:7:1 | Class Foo | semmle.label | [Class] Class Foo | +| Foo.qll:3:1:7:1 | Class Foo | semmle.order | 3 | | Foo.qll:3:19:3:22 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | | Foo.qll:3:19:3:22 | TypeExpr | semmle.order | 4 | -| Foo.qll:4:3:4:17 | CharPred | semmle.label | [CharPred] CharPred | -| Foo.qll:4:3:4:17 | CharPred | semmle.order | 5 | +| Foo.qll:4:3:4:17 | CharPred Foo | semmle.label | [CharPred] CharPred Foo | +| Foo.qll:4:3:4:17 | CharPred Foo | semmle.order | 5 | | Foo.qll:4:11:4:11 | Integer | semmle.label | [Integer] Integer | | Foo.qll:4:11:4:11 | Integer | semmle.order | 6 | | Foo.qll:4:11:4:15 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula | @@ -19,8 +19,8 @@ nodes | Foo.qll:4:15:4:15 | Integer | semmle.order | 9 | | Foo.qll:6:3:6:8 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | | Foo.qll:6:3:6:8 | TypeExpr | semmle.order | 10 | -| Foo.qll:6:3:6:38 | ClassPredicate | semmle.label | [ClassPredicate] ClassPredicate | -| Foo.qll:6:3:6:38 | ClassPredicate | semmle.order | 10 | +| Foo.qll:6:3:6:38 | ClassPredicate toString | semmle.label | [ClassPredicate] ClassPredicate toString | +| Foo.qll:6:3:6:38 | ClassPredicate toString | semmle.order | 10 | | Foo.qll:6:23:6:28 | result | semmle.label | [ResultAccess] result | | Foo.qll:6:23:6:28 | result | semmle.order | 12 | | Foo.qll:6:23:6:36 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula | @@ -29,8 +29,8 @@ nodes | Foo.qll:6:30:6:30 | ComparisonOp | semmle.order | 14 | | Foo.qll:6:32:6:36 | String | semmle.label | [String] String | | Foo.qll:6:32:6:36 | String | semmle.order | 15 | -| Foo.qll:9:7:11:1 | foo | semmle.label | [ClasslessPredicate] foo | -| Foo.qll:9:7:11:1 | foo | semmle.order | 16 | +| Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.label | [ClasslessPredicate] ClasslessPredicate foo | +| Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.order | 16 | | Foo.qll:9:21:9:23 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | | Foo.qll:9:21:9:23 | TypeExpr | semmle.order | 17 | | Foo.qll:9:21:9:25 | f | semmle.label | [VarDecl] f | @@ -65,8 +65,8 @@ nodes | Foo.qll:10:69:10:73 | inner | semmle.order | 32 | | Foo.qll:10:69:10:84 | MemberCall | semmle.label | [MemberCall] MemberCall | | Foo.qll:10:69:10:84 | MemberCall | semmle.order | 32 | -| Foo.qll:13:1:27:1 | calls | semmle.label | [ClasslessPredicate] calls | -| Foo.qll:13:1:27:1 | calls | semmle.order | 34 | +| Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.label | [ClasslessPredicate] ClasslessPredicate calls | +| Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.order | 34 | | Foo.qll:13:17:13:19 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | | Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 35 | | Foo.qll:13:17:13:21 | f | semmle.label | [VarDecl] f | @@ -174,42 +174,42 @@ nodes | printAst.ql:1:1:1:29 | TopLevel | semmle.label | [TopLevel] TopLevel | | printAst.ql:1:1:1:29 | TopLevel | semmle.order | 86 | edges -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.label | getAMember() | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.label | getAnImport() | | Foo.qll:1:1:27:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.order | 1 | -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:3:1:7:1 | Foo | semmle.label | getAMember() | -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:3:1:7:1 | Foo | semmle.order | 3 | -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | foo | semmle.label | getAMember() | -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | foo | semmle.order | 16 | -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | calls | semmle.label | getAMember() | -| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | calls | semmle.order | 34 | -| Foo.qll:3:1:7:1 | Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.label | getASuperType() | -| Foo.qll:3:1:7:1 | Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.order | 4 | -| Foo.qll:3:1:7:1 | Foo | Foo.qll:4:3:4:17 | CharPred | semmle.label | getCharPred() | -| Foo.qll:3:1:7:1 | Foo | Foo.qll:4:3:4:17 | CharPred | semmle.order | 5 | -| Foo.qll:3:1:7:1 | Foo | Foo.qll:6:3:6:38 | ClassPredicate | semmle.label | getClassPredicate(_) | -| Foo.qll:3:1:7:1 | Foo | Foo.qll:6:3:6:38 | ClassPredicate | semmle.order | 10 | -| Foo.qll:4:3:4:17 | CharPred | Foo.qll:4:11:4:15 | ComparisonFormula | semmle.label | getBody() | -| Foo.qll:4:3:4:17 | CharPred | Foo.qll:4:11:4:15 | ComparisonFormula | semmle.order | 6 | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:3:1:7:1 | Class Foo | semmle.label | getAClass() | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:3:1:7:1 | Class Foo | semmle.order | 3 | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.label | getAPredicate() | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.order | 16 | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.label | getAPredicate() | +| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.order | 34 | +| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.label | getASuperType() | +| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.order | 4 | +| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:4:3:4:17 | CharPred Foo | semmle.label | getCharPred() | +| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:4:3:4:17 | CharPred Foo | semmle.order | 5 | +| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:6:3:6:38 | ClassPredicate toString | semmle.label | getClassPredicate(_) | +| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:6:3:6:38 | ClassPredicate toString | semmle.order | 10 | +| Foo.qll:4:3:4:17 | CharPred Foo | Foo.qll:4:11:4:15 | ComparisonFormula | semmle.label | getBody() | +| Foo.qll:4:3:4:17 | CharPred Foo | Foo.qll:4:11:4:15 | ComparisonFormula | semmle.order | 6 | | Foo.qll:4:11:4:15 | ComparisonFormula | Foo.qll:4:11:4:11 | Integer | semmle.label | getLeftOperand() | | Foo.qll:4:11:4:15 | ComparisonFormula | Foo.qll:4:11:4:11 | Integer | semmle.order | 6 | | Foo.qll:4:11:4:15 | ComparisonFormula | Foo.qll:4:13:4:13 | ComparisonOp | semmle.label | getOperator() | | Foo.qll:4:11:4:15 | ComparisonFormula | Foo.qll:4:13:4:13 | ComparisonOp | semmle.order | 8 | | Foo.qll:4:11:4:15 | ComparisonFormula | Foo.qll:4:15:4:15 | Integer | semmle.label | getRightOperand() | | Foo.qll:4:11:4:15 | ComparisonFormula | Foo.qll:4:15:4:15 | Integer | semmle.order | 9 | -| Foo.qll:6:3:6:38 | ClassPredicate | Foo.qll:6:3:6:8 | TypeExpr | semmle.label | getReturnTypeExpr() | -| Foo.qll:6:3:6:38 | ClassPredicate | Foo.qll:6:3:6:8 | TypeExpr | semmle.order | 10 | -| Foo.qll:6:3:6:38 | ClassPredicate | Foo.qll:6:23:6:36 | ComparisonFormula | semmle.label | getBody() | -| Foo.qll:6:3:6:38 | ClassPredicate | Foo.qll:6:23:6:36 | ComparisonFormula | semmle.order | 12 | +| Foo.qll:6:3:6:38 | ClassPredicate toString | Foo.qll:6:3:6:8 | TypeExpr | semmle.label | getReturnTypeExpr() | +| Foo.qll:6:3:6:38 | ClassPredicate toString | Foo.qll:6:3:6:8 | TypeExpr | semmle.order | 10 | +| Foo.qll:6:3:6:38 | ClassPredicate toString | Foo.qll:6:23:6:36 | ComparisonFormula | semmle.label | getBody() | +| Foo.qll:6:3:6:38 | ClassPredicate toString | Foo.qll:6:23:6:36 | ComparisonFormula | semmle.order | 12 | | Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:23:6:28 | result | semmle.label | getLeftOperand() | | Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:23:6:28 | result | semmle.order | 12 | | Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:30:6:30 | ComparisonOp | semmle.label | getOperator() | | Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:30:6:30 | ComparisonOp | semmle.order | 14 | | Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:32:6:36 | String | semmle.label | getRightOperand() | | Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:32:6:36 | String | semmle.order | 15 | -| Foo.qll:9:7:11:1 | foo | Foo.qll:9:21:9:25 | f | semmle.label | getParameter(_) | -| Foo.qll:9:7:11:1 | foo | Foo.qll:9:21:9:25 | f | semmle.order | 17 | -| Foo.qll:9:7:11:1 | foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.label | getBody() | -| Foo.qll:9:7:11:1 | foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.order | 19 | +| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:9:21:9:25 | f | semmle.label | getParameter(_) | +| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:9:21:9:25 | f | semmle.order | 17 | +| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.label | getBody() | +| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.order | 19 | | Foo.qll:9:21:9:25 | f | Foo.qll:9:21:9:23 | TypeExpr | semmle.label | getTypeExpr() | | Foo.qll:9:21:9:25 | f | Foo.qll:9:21:9:23 | TypeExpr | semmle.order | 17 | | Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:3:10:3 | f | semmle.label | getLeftOperand() | @@ -240,10 +240,10 @@ edges | Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:46:10:50 | String | semmle.order | 30 | | Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.label | getBase() | | Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.order | 32 | -| Foo.qll:13:1:27:1 | calls | Foo.qll:13:17:13:21 | f | semmle.label | getParameter(_) | -| Foo.qll:13:1:27:1 | calls | Foo.qll:13:17:13:21 | f | semmle.order | 35 | -| Foo.qll:13:1:27:1 | calls | Foo.qll:14:3:26:14 | Disjunction | semmle.label | getBody() | -| Foo.qll:13:1:27:1 | calls | Foo.qll:14:3:26:14 | Disjunction | semmle.order | 37 | +| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:13:17:13:21 | f | semmle.label | getParameter(_) | +| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:13:17:13:21 | f | semmle.order | 35 | +| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:14:3:26:14 | Disjunction | semmle.label | getBody() | +| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:14:3:26:14 | Disjunction | semmle.order | 37 | | Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.label | getTypeExpr() | | Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 35 | | Foo.qll:14:3:14:10 | PredicateCall | Foo.qll:14:9:14:9 | f | semmle.label | getArgument(_) | @@ -342,7 +342,7 @@ edges | Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:8:26:8 | ComparisonOp | semmle.order | 84 | | Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.label | getRightOperand() | | Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.order | 85 | -| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.label | getAMember() | +| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.label | getAnImport() | | printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 86 | graphProperties | semmle.graphKind | tree | diff --git a/ql/test/queries/style/MissingOverride/MissingOverride.expected b/ql/test/queries/style/MissingOverride/MissingOverride.expected index 55675eae3c7..f59b21d0d73 100644 --- a/ql/test/queries/style/MissingOverride/MissingOverride.expected +++ b/ql/test/queries/style/MissingOverride/MissingOverride.expected @@ -1 +1 @@ -| Test.qll:12:3:12:33 | ClassPredicate | Wrong.test overrides $@ but does not have an override annotation. | Test.qll:4:3:4:40 | ClassPredicate | Super.test | +| Test.qll:12:3:12:33 | ClassPredicate test | Wrong.test overrides $@ but does not have an override annotation. | Test.qll:4:3:4:40 | ClassPredicate test | Super.test |