Skip to content

Commit dece8fb

Browse files
committed
feat(ast): Update AST layer with small changes
1 parent 89fecce commit dece8fb

File tree

4 files changed

+85
-9
lines changed

4 files changed

+85
-9
lines changed

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
private import codeql.Locations
22
private import codeql.files.FileSystem
3+
private import codeql.bicep.ast.internal.TreeSitter
34
private import codeql.bicep.ast.internal.AstNodes
45
private import codeql.bicep.ast.internal.TreeSitter
6+
private import codeql.bicep.controlflow.ControlFlowGraph
57

68
/**
79
* An AST node of a Bicep program
810
*/
911
class AstNode extends TAstNode {
12+
private BICEP::AstNode node;
13+
14+
AstNode() { toTreeSitter(this) = node }
15+
1016
string toString() { result = this.getAPrimaryQlClass() }
1117

1218
/** Gets the location of the AST node. */
@@ -39,17 +45,25 @@ class AstNode extends TAstNode {
3945
* Gets the parent in the AST for this node.
4046
*/
4147
cached
42-
AstNode getParent() { result.getAChild(_) = this }
48+
AstNode getParent() { result.getAChild() = this }
4349

4450
/**
4551
* Gets a child of this node, which can also be retrieved using a predicate
4652
* named `pred`.
4753
*/
4854
cached
49-
AstNode getAChild(string pred) { none() }
55+
AstNode getAChild() { toTreeSitter(result) = node.getAFieldOrChild() }
5056

51-
/** Gets any child of this node. */
52-
AstNode getAChild() { result = this.getAChild(_) }
57+
/** Gets the CFG scope that encloses this node, if any. */
58+
cached
59+
CfgScope getEnclosingCfgScope() {
60+
exists(AstNode p | p = this.getParent*() |
61+
result = p
62+
or
63+
not p instanceof CfgScope and
64+
result = p.getEnclosingCfgScope()
65+
)
66+
}
5367

5468
/**
5569
* Gets the primary QL class for the ast node.

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
private import AstNodes
2+
private import Expr
3+
private import Idents
4+
5+
abstract class Callable extends Expr {
6+
/**
7+
* Gets the identifier of the call expression.
8+
*/
9+
abstract Idents getIdentifier();
10+
11+
/**
12+
* Gets the name of the call expression.
13+
*/
14+
string getName() { result = this.getIdentifier().getName() }
15+
16+
/**
17+
* Checks if the call expression has a specific name.
18+
*/
19+
predicate hasName(string name) { this.getName() = name }
20+
}

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

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
private import AstNodes
32
private import internal.Arguments
43
private import internal.Array
@@ -39,158 +38,192 @@ private import internal.TypeDeclaration
3938
private import internal.UnionType
4039
private import internal.UserDefinedFunction
4140
private import internal.VariableDeclaration
41+
4242
/**
4343
* A Arguments unknown AST node.
4444
*/
4545
class Arguments extends AstNode instanceof ArgumentsImpl { }
46+
4647
/**
4748
* A Array unknown AST node.
4849
*/
4950
class Array extends AstNode instanceof ArrayImpl { }
51+
5052
/**
5153
* A ArrayType unknown AST node.
5254
*/
5355
class ArrayType extends AstNode instanceof ArrayTypeImpl { }
56+
5457
/**
5558
* A Boolean unknown AST node.
5659
*/
5760
class Boolean extends AstNode instanceof BooleanImpl { }
61+
5862
/**
5963
* A CompatibleIdentifier unknown AST node.
6064
*/
6165
class CompatibleIdentifier extends AstNode instanceof CompatibleIdentifierImpl { }
66+
6267
/**
6368
* A Declaration unknown AST node.
6469
*/
6570
class Declaration extends AstNode instanceof DeclarationImpl { }
71+
6672
/**
6773
* A Decorator unknown AST node.
6874
*/
6975
class Decorator extends AstNode instanceof DecoratorImpl { }
76+
7077
/**
7178
* A Decorators unknown AST node.
7279
*/
7380
class Decorators extends AstNode instanceof DecoratorsImpl { }
81+
7482
/**
7583
* A DiagnosticComment unknown AST node.
7684
*/
7785
class DiagnosticComment extends AstNode instanceof DiagnosticCommentImpl { }
86+
7887
/**
7988
* A EscapeSequence unknown AST node.
8089
*/
8190
class EscapeSequence extends AstNode instanceof EscapeSequenceImpl { }
91+
8292
/**
8393
* A ForLoopParameters unknown AST node.
8494
*/
8595
class ForLoopParameters extends AstNode instanceof ForLoopParametersImpl { }
86-
/**
87-
* A Identifier unknown AST node.
88-
*/
89-
class Identifier extends AstNode instanceof IdentifierImpl { }
96+
9097
/**
9198
* A ImportFunctionality unknown AST node.
9299
*/
93100
class ImportFunctionality extends AstNode instanceof ImportFunctionalityImpl { }
101+
94102
/**
95103
* A Infrastructure unknown AST node.
96104
*/
97105
class Infrastructure extends AstNode instanceof InfrastructureImpl { }
106+
98107
/**
99108
* A LoopEnumerator unknown AST node.
100109
*/
101110
class LoopEnumerator extends AstNode instanceof LoopEnumeratorImpl { }
111+
102112
/**
103113
* A LoopVariable unknown AST node.
104114
*/
105115
class LoopVariable extends AstNode instanceof LoopVariableImpl { }
116+
106117
/**
107118
* A MetadataDeclaration unknown AST node.
108119
*/
109120
class MetadataDeclaration extends AstNode instanceof MetadataDeclarationImpl { }
121+
110122
/**
111123
* A ModuleDeclaration unknown AST node.
112124
*/
113125
class ModuleDeclaration extends AstNode instanceof ModuleDeclarationImpl { }
126+
114127
/**
115128
* A NegatedType unknown AST node.
116129
*/
117130
class NegatedType extends AstNode instanceof NegatedTypeImpl { }
131+
118132
/**
119133
* A Number unknown AST node.
120134
*/
121135
class Number extends AstNode instanceof NumberImpl { }
136+
122137
/**
123138
* A Object unknown AST node.
124139
*/
125140
class Object extends AstNode instanceof ObjectImpl { }
141+
126142
/**
127143
* A ObjectProperty unknown AST node.
128144
*/
129145
class ObjectProperty extends AstNode instanceof ObjectPropertyImpl { }
146+
130147
/**
131148
* A OutputDeclaration unknown AST node.
132149
*/
133150
class OutputDeclaration extends AstNode instanceof OutputDeclarationImpl { }
151+
134152
/**
135153
* A Parameter unknown AST node.
136154
*/
137155
class Parameter extends AstNode instanceof ParameterImpl { }
156+
138157
/**
139158
* A ParameterDeclaration unknown AST node.
140159
*/
141160
class ParameterDeclaration extends AstNode instanceof ParameterDeclarationImpl { }
161+
142162
/**
143163
* A ParameterizedType unknown AST node.
144164
*/
145165
class ParameterizedType extends AstNode instanceof ParameterizedTypeImpl { }
166+
146167
/**
147168
* A Parameters unknown AST node.
148169
*/
149170
class Parameters extends AstNode instanceof ParametersImpl { }
171+
150172
/**
151173
* A ParenthesizedType unknown AST node.
152174
*/
153175
class ParenthesizedType extends AstNode instanceof ParenthesizedTypeImpl { }
176+
154177
/**
155178
* A PrimitiveType unknown AST node.
156179
*/
157180
class PrimitiveType extends AstNode instanceof PrimitiveTypeImpl { }
181+
158182
/**
159183
* A PropertyIdentifier unknown AST node.
160184
*/
161185
class PropertyIdentifier extends AstNode instanceof PropertyIdentifierImpl { }
186+
162187
/**
163188
* A ResourceDeclaration unknown AST node.
164189
*/
165190
class ResourceDeclaration extends AstNode instanceof ResourceDeclarationImpl { }
191+
166192
/**
167193
* A TargetScopeAssignment unknown AST node.
168194
*/
169195
class TargetScopeAssignment extends AstNode instanceof TargetScopeAssignmentImpl { }
196+
170197
/**
171198
* A TestBlock unknown AST node.
172199
*/
173200
class TestBlock extends AstNode instanceof TestBlockImpl { }
201+
174202
/**
175203
* A Type unknown AST node.
176204
*/
177205
class Type extends AstNode instanceof TypeImpl { }
206+
178207
/**
179208
* A TypeArguments unknown AST node.
180209
*/
181210
class TypeArguments extends AstNode instanceof TypeArgumentsImpl { }
211+
182212
/**
183213
* A TypeDeclaration unknown AST node.
184214
*/
185215
class TypeDeclaration extends AstNode instanceof TypeDeclarationImpl { }
216+
186217
/**
187218
* A UnionType unknown AST node.
188219
*/
189220
class UnionType extends AstNode instanceof UnionTypeImpl { }
221+
190222
/**
191223
* A UserDefinedFunction unknown AST node.
192224
*/
193225
class UserDefinedFunction extends AstNode instanceof UserDefinedFunctionImpl { }
226+
194227
/**
195228
* A VariableDeclaration unknown AST node.
196229
*/

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* Bicep variable declarations.
3+
*/
4+
private import bicep
5+
private import AstNodes
6+
private import Idents
7+
private import Stmts
8+
private import codeql.bicep.controlflow.BasicBlocks as BasicBlocks
9+
private import codeql.bicep.controlflow.ControlFlowGraph

0 commit comments

Comments
 (0)