Skip to content

Commit e09ee55

Browse files
committed
feat(ast): Update Literals and fix resources
1 parent 3cfe867 commit e09ee55

File tree

6 files changed

+53
-38
lines changed

6 files changed

+53
-38
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ private import internal.SubscriptExpression
1717
private import internal.TernaryExpression
1818
private import internal.UnaryExpression
1919

20+
private import Idents
2021
private import Resources
2122

2223
/**
@@ -59,6 +60,8 @@ final class LambdaExpression extends Expr instanceof LambdaExpressionImpl { }
5960
*/
6061
class MemberExpression extends Expr instanceof MemberExpressionImpl {
6162
Object getObject() { result = super.getObject() }
63+
64+
Idents getProperty() { result = super.getProperty() }
6265
}
6366

6467
/**

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

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ private import internal.AstNodes
88
private import internal.TreeSitter
99
private import internal.Literals
1010
private import internal.Array
11+
private import internal.Boolean
1112
private import internal.Null
1213
private import internal.NullableReturnType
1314
private import internal.Number
@@ -23,15 +24,32 @@ final class Literals extends AstNode instanceof LiteralsImpl { }
2324
* A Array unknown AST node.
2425
*/
2526
class Array extends Literals instanceof ArrayImpl {
26-
Expr getElements() {
27-
result = ArrayImpl.super.getElements()
28-
}
27+
Expr getElements() { result = ArrayImpl.super.getElements() }
28+
29+
Expr getElement(int index) { result = ArrayImpl.super.getElement(index) }
30+
}
2931

30-
Expr getElement(int index) {
31-
result = ArrayImpl.super.getElement(index)
32+
/**
33+
* A Boolean unknown AST node.
34+
*/
35+
class Boolean extends Literals instanceof BooleanImpl {
36+
boolean getBool() {
37+
exists(string bl |
38+
bl = BooleanImpl.super.getValue().toLowerCase() and
39+
bl = "true" and
40+
result = true
41+
or
42+
bl = "false" and
43+
result = false
44+
)
3245
}
3346
}
3447

48+
/**
49+
* An alias for the Boolean literal in the AST.
50+
*/
51+
class BooleanLiteral = Boolean;
52+
3553
/**
3654
* A Null literal in the AST.
3755
*/
@@ -46,12 +64,9 @@ final class NullableReturnTypeLiteral extends Literals instanceof NullableReturn
4664
* A Number unknown AST node.
4765
*/
4866
class Number extends Literals instanceof NumberImpl {
49-
int getValue() {
50-
result = NumberImpl.super.getValue().toInt()
51-
}
67+
int getValue() { result = NumberImpl.super.getValue().toInt() }
5268
}
5369

54-
5570
/**
5671
* A String literal in the AST.
5772
*/

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@ class Arguments extends AstNode instanceof ArgumentsImpl { }
4646
*/
4747
class ArrayType extends AstNode instanceof ArrayTypeImpl { }
4848

49-
/**
50-
* A Boolean unknown AST node.
51-
*/
52-
class Boolean extends AstNode instanceof BooleanImpl { }
5349

5450
/**
5551
* A CompatibleIdentifier unknown AST node.

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

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,25 @@ class ResourceDeclaration extends AstNode instanceof ResourceDeclarationImpl {
5858
Expr getProperty(string name) { result = this.getBody().getProperty(name) }
5959
}
6060

61-
// Resource resolveResource(Expr expr) {
62-
// exists(Resource resource |
63-
// // Object having an id property needs to be resolved
64-
// // {resource.id}.id
65-
// exists(MemberExpr memexpr |
66-
// memexpr = expr.(Object).getProperty("id") and
67-
// memexpr.getObject().(Identifier).getName() = resource.getIdentifier().(Identifier).getName()
68-
// |
69-
// result = resource
70-
// )
71-
// or
72-
// exists(Identifier ident |
73-
// ident = expr and
74-
// ident.getName() = resource.getIdentifier().(Identifier).getName()
75-
// |
76-
// result = resource
77-
// )
78-
// )
79-
// }
61+
Resource resolveResource(Expr expr) {
62+
exists(ResourceDeclaration resource |
63+
// Object having an id property needs to be resolved
64+
// {resource.id}.id
65+
exists(MemberExpr memexpr |
66+
memexpr = expr.(Object).getProperty("id") and
67+
memexpr.getProperty().getName() = resource.getIdentifier().getName()
68+
|
69+
result = TResourceDeclaration(resource)
70+
)
71+
or
72+
exists(Identifier ident |
73+
ident = expr and
74+
ident.getName() = resource.getIdentifier().(Identifier).getName()
75+
|
76+
result = TResourceDeclaration(resource)
77+
)
78+
)
79+
}
8080

8181

8282
class Resource extends TResource {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ newtype TAstNode =
7575
* A literal value in a Bicep program
7676
*/
7777
class TLiterals =
78-
TArray or TInterpolation or TNull or TNullableReturnType or TNullableType or TNumber or TString or
79-
TStringContent;
78+
TArray or TBoolean or TInterpolation or TNull or TNullableReturnType or TNullableType or
79+
TNumber or TString or TStringContent;
8080

8181
/**
8282
* A identifier in a SQL program

ql/lib/codeql/bicep/ast/internal/Boolean.qll

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
*
44
* WARNING: this file is generated, do not edit manually
55
*/
6+
67
private import AstNodes
78
private import TreeSitter
89
private import codeql.bicep.ast.AstNodes
10+
private import Literals
911

1012
/**
1113
* A Boolean AST Node.
1214
*/
13-
class BooleanImpl extends TBoolean, AstNode {
15+
class BooleanImpl extends TBoolean, LiteralsImpl {
1416
private BICEP::Boolean ast;
1517

1618
override string getAPrimaryQlClass() { result = "Boolean" }
@@ -19,6 +21,5 @@ class BooleanImpl extends TBoolean, AstNode {
1921

2022
override string toString() { result = ast.toString() }
2123

22-
23-
24-
}
24+
override string getValue() { result = ast.getValue() }
25+
}

0 commit comments

Comments
 (0)