Skip to content

Commit 5ecc47b

Browse files
committed
feat(ast): Update AST Layer
1 parent 3ba451b commit 5ecc47b

File tree

4 files changed

+91
-50
lines changed

4 files changed

+91
-50
lines changed

ql/lib/codeql/bicep/ast/Calls.qll

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
private import AstNodes
22
private import Expr
33
private import Idents
4+
private import internal.Arguments
5+
private import internal.CallExpression
6+
private import internal.Parameter
7+
private import internal.ParameterDeclaration
8+
private import internal.UserDefinedFunction
49

510
abstract class Callable extends Expr {
611
/**
@@ -17,4 +22,51 @@ abstract class Callable extends Expr {
1722
* Checks if the call expression has a specific name.
1823
*/
1924
predicate hasName(string name) { this.getName() = name }
20-
}
25+
}
26+
27+
/**
28+
* A CallExpression expression in the AST.
29+
*/
30+
class CallExpression extends Callable instanceof CallExpressionImpl {
31+
override Idents getIdentifier() {
32+
result = CallExpressionImpl.super.getIdentifier()
33+
}
34+
35+
Expr getArgument(int index) {
36+
result = this.getArguments().getArgument(index)
37+
}
38+
39+
Arguments getArguments() {
40+
result = CallExpressionImpl.super.getArguments()
41+
}
42+
}
43+
44+
45+
/**
46+
* A Arguments unknown AST node.
47+
*/
48+
class Arguments extends AstNode instanceof ArgumentsImpl {
49+
50+
Expr getArgument(int index) {
51+
result = ArgumentsImpl.super.getArgument(index)
52+
}
53+
54+
Expr getArguments() {
55+
result = ArgumentsImpl.super.getArguments()
56+
}
57+
}
58+
59+
/**
60+
* A Parameter unknown AST node.
61+
*/
62+
class Parameter extends AstNode instanceof ParameterImpl { }
63+
64+
/**
65+
* A ParameterDeclaration unknown AST node.
66+
*/
67+
class ParameterDeclaration extends AstNode instanceof ParameterDeclarationImpl { }
68+
69+
/**
70+
* A UserDefinedFunction unknown AST node.
71+
*/
72+
class UserDefinedFunction extends AstNode instanceof UserDefinedFunctionImpl { }

ql/lib/codeql/bicep/ast/Expr.qll

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
/**
2+
* Bicep AST expressions.
3+
*/
4+
15
private import AstNodes
26
private import internal.AstNodes
37
private import internal.TreeSitter
48
private import internal.Expr
59
private import internal.AssignmentExpression
610
private import internal.BinaryExpression
7-
private import internal.CallExpression
811
private import internal.Expression
912
private import internal.Interpolation
1013
private import internal.LambdaExpression
@@ -16,7 +19,6 @@ private import internal.ResourceExpression
1619
private import internal.SubscriptExpression
1720
private import internal.TernaryExpression
1821
private import internal.UnaryExpression
19-
2022
private import Idents
2123
private import Resources
2224

@@ -35,11 +37,6 @@ final class AssignmentExpression extends Expr instanceof AssignmentExpressionImp
3537
*/
3638
final class BinaryExpression extends Expr instanceof BinaryExpressionImpl { }
3739

38-
/**
39-
* A CallExpression expression in the AST.
40-
*/
41-
final class CallExpression extends Expr instanceof CallExpressionImpl { }
42-
4340
/**
4441
* A Expression expression in the AST.
4542
*/
@@ -59,16 +56,22 @@ final class LambdaExpression extends Expr instanceof LambdaExpressionImpl { }
5956
* A MemberExpression expression in the AST.
6057
*/
6158
class MemberExpression extends Expr instanceof MemberExpressionImpl {
62-
63-
/**
64-
* The namespace of the member expression.
65-
*/
66-
Idents getNamespace() { result = MemberExpressionImpl.super.getObject() }
67-
68-
/**
69-
* The member of the member expression.
70-
*/
71-
Idents getName() { result = MemberExpressionImpl.super.getProperty() }
59+
/**
60+
* The namespace of the member expression.
61+
*/
62+
Idents getNamespace() { result = MemberExpressionImpl.super.getObject() }
63+
64+
/**
65+
* The member of the member expression.
66+
*/
67+
Idents getName() { result = MemberExpressionImpl.super.getProperty() }
68+
69+
/**
70+
* Gets the full name of the member expression, which includes the namespace and the member name.
71+
*/
72+
string getFullName() {
73+
result = this.getNamespace().getName() + "." + this.getName().getName()
74+
}
7275
}
7376

7477
/**

ql/lib/codeql/bicep/ast/Misc.qll

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
private import AstNodes
2-
private import internal.Arguments
2+
33
private import internal.Array
44
private import internal.ArrayType
55
private import internal.Boolean
@@ -12,16 +12,13 @@ private import internal.EscapeSequence
1212
private import internal.ForLoopParameters
1313
private import internal.Identifier
1414
private import internal.ImportFunctionality
15-
private import internal.Infrastructure
1615
private import internal.LoopEnumerator
1716
private import internal.LoopVariable
1817
private import internal.MetadataDeclaration
1918
private import internal.ModuleDeclaration
2019
private import internal.NegatedType
2120
private import internal.ObjectProperty
2221
private import internal.OutputDeclaration
23-
private import internal.Parameter
24-
private import internal.ParameterDeclaration
2522
private import internal.ParameterizedType
2623
private import internal.Parameters
2724
private import internal.ParenthesizedType
@@ -33,14 +30,8 @@ private import internal.Type
3330
private import internal.TypeArguments
3431
private import internal.TypeDeclaration
3532
private import internal.UnionType
36-
private import internal.UserDefinedFunction
3733
private import internal.VariableDeclaration
3834

39-
/**
40-
* A Arguments unknown AST node.
41-
*/
42-
class Arguments extends AstNode instanceof ArgumentsImpl { }
43-
4435
/**
4536
* A ArrayType unknown AST node.
4637
*/
@@ -87,11 +78,6 @@ class ForLoopParameters extends AstNode instanceof ForLoopParametersImpl { }
8778
*/
8879
class ImportFunctionality extends AstNode instanceof ImportFunctionalityImpl { }
8980

90-
/**
91-
* A Infrastructure unknown AST node.
92-
*/
93-
class Infrastructure extends AstNode instanceof InfrastructureImpl { }
94-
9581
/**
9682
* A LoopEnumerator unknown AST node.
9783
*/
@@ -122,16 +108,6 @@ class NegatedType extends AstNode instanceof NegatedTypeImpl { }
122108
*/
123109
class OutputDeclaration extends AstNode instanceof OutputDeclarationImpl { }
124110

125-
/**
126-
* A Parameter unknown AST node.
127-
*/
128-
class Parameter extends AstNode instanceof ParameterImpl { }
129-
130-
/**
131-
* A ParameterDeclaration unknown AST node.
132-
*/
133-
class ParameterDeclaration extends AstNode instanceof ParameterDeclarationImpl { }
134-
135111
/**
136112
* A ParameterizedType unknown AST node.
137113
*/
@@ -182,10 +158,6 @@ class TypeDeclaration extends AstNode instanceof TypeDeclarationImpl { }
182158
*/
183159
class UnionType extends AstNode instanceof UnionTypeImpl { }
184160

185-
/**
186-
* A UserDefinedFunction unknown AST node.
187-
*/
188-
class UserDefinedFunction extends AstNode instanceof UserDefinedFunctionImpl { }
189161

190162
/**
191163
* A VariableDeclaration unknown AST node.

ql/lib/codeql/bicep/ast/Stmts.qll

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/**
22
* Statement nodes in the AST.
33
*/
4+
45
private import AstNodes
56
private import internal.AstNodes
67
private import internal.TreeSitter
@@ -10,6 +11,7 @@ private import internal.ForStatement
1011
private import internal.IfStatement
1112
private import internal.ImportStatement
1213
private import internal.ImportWithStatement
14+
private import internal.Infrastructure
1315
private import internal.Statement
1416
private import internal.UsingStatement
1517
// CFG
@@ -22,37 +24,49 @@ private import codeql.bicep.controlflow.internal.ControlFlowGraphImpl as CfgImpl
2224
class Stmts extends AstNode instanceof StmtsImpl {
2325
/** Gets a control-flow node for this statement, if any. */
2426
CfgImpl::AstCfgNode getAControlFlowNode() { result.getAstNode() = this }
25-
27+
2628
/** Gets a control-flow entry node for this statement, if any */
2729
AstNode getAControlFlowEntryNode() { result = CfgImpl::getAControlFlowEntryNode(this) }
2830
}
2931

30-
31-
3232
/**
3333
* A AssertStatement statement
3434
*/
3535
final class AssertStatementStmt extends Stmts instanceof AssertStatementImpl { }
36+
3637
/**
3738
* A ForStatement statement
3839
*/
3940
final class ForStatementStmt extends Stmts instanceof ForStatementImpl { }
41+
4042
/**
4143
* A IfStatement statement
4244
*/
4345
final class IfStatementStmt extends Stmts instanceof IfStatementImpl { }
46+
4447
/**
4548
* A ImportStatement statement
4649
*/
4750
final class ImportStatementStmt extends Stmts instanceof ImportStatementImpl { }
51+
52+
/**
53+
* A Infrastructure unknown AST node.
54+
*/
55+
class Infrastructure extends AstNode instanceof InfrastructureImpl {
56+
/** Gets the first statement in the infrastructure. */
57+
Stmts getStatement(int index) { result = InfrastructureImpl.super.getStatement(index) }
58+
}
59+
4860
/**
4961
* A ImportWithStatement statement
5062
*/
5163
final class ImportWithStatementStmt extends Stmts instanceof ImportWithStatementImpl { }
64+
5265
/**
5366
* A Statement statement
5467
*/
5568
final class StatementStmt extends Stmts instanceof StatementImpl { }
69+
5670
/**
5771
* A UsingStatement statement
5872
*/

0 commit comments

Comments
 (0)