Skip to content

Commit 965b351

Browse files
authored
Merge pull request #54 from github/hvitved/ast-final
Mark more AST predicates as `final`
2 parents 11927a9 + 311a0b6 commit 965b351

File tree

7 files changed

+136
-124
lines changed

7 files changed

+136
-124
lines changed

ql/src/codeql_ruby/ast/Method.qll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ class Callable extends AstNode {
2020
class Method extends Callable, @method {
2121
final override Generated::Method generated;
2222

23-
override string describeQlClass() { result = "Method" }
23+
final override string describeQlClass() { result = "Method" }
2424

25-
override string toString() { result = this.getName() }
25+
final override string toString() { result = this.getName() }
2626

2727
/** Gets the name of this method. */
28-
string getName() {
28+
final string getName() {
2929
result = generated.getName().(Generated::Token).getValue() or
3030
// TODO: use hand-written Symbol class
3131
result = generated.getName().(Generated::Symbol).toString() or
@@ -42,19 +42,19 @@ class Method extends Callable, @method {
4242
* end
4343
* ```
4444
*/
45-
predicate isSetter() { generated.getName() instanceof Generated::Setter }
45+
final predicate isSetter() { generated.getName() instanceof Generated::Setter }
4646
}
4747

4848
/** A singleton method. */
4949
class SingletonMethod extends Callable, @singleton_method {
5050
final override Generated::SingletonMethod generated;
5151

52-
override string describeQlClass() { result = "SingletonMethod" }
52+
final override string describeQlClass() { result = "SingletonMethod" }
5353

54-
override string toString() { result = this.getName() }
54+
final override string toString() { result = this.getName() }
5555

5656
/** Gets the name of this method. */
57-
string getName() {
57+
final string getName() {
5858
result = generated.getName().(Generated::Token).getValue() or
5959
// TODO: use hand-written Symbol class
6060
result = generated.getName().(Generated::Symbol).toString() or
@@ -71,9 +71,9 @@ class SingletonMethod extends Callable, @singleton_method {
7171
class Lambda extends Callable, @lambda {
7272
final override Generated::Lambda generated;
7373

74-
override string describeQlClass() { result = "Lambda" }
74+
final override string describeQlClass() { result = "Lambda" }
7575

76-
override string toString() { result = "-> { ... }" }
76+
final override string toString() { result = "-> { ... }" }
7777
}
7878

7979
/** A block. */
@@ -85,9 +85,9 @@ class Block extends AstNode, Callable {
8585
class DoBlock extends Block, @do_block {
8686
final override Generated::DoBlock generated;
8787

88-
override string describeQlClass() { result = "DoBlock" }
88+
final override string describeQlClass() { result = "DoBlock" }
8989

90-
override string toString() { result = "| ... |" }
90+
final override string toString() { result = "| ... |" }
9191
}
9292

9393
/**
@@ -99,7 +99,7 @@ class DoBlock extends Block, @do_block {
9999
class BraceBlock extends Block, @block {
100100
final override Generated::Block generated;
101101

102-
override string describeQlClass() { result = "BraceBlock" }
102+
final override string describeQlClass() { result = "BraceBlock" }
103103

104-
override string toString() { result = "{ ... }" }
104+
final override string toString() { result = "{ ... }" }
105105
}

ql/src/codeql_ruby/ast/Parameter.qll

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,22 @@ class Parameter extends AstNode {
1717
}
1818

1919
/** Gets the callable that this parameter belongs to. */
20-
Callable getCallable() { result.getAParameter() = this }
20+
final Callable getCallable() { result.getAParameter() = this }
2121

2222
/** Gets the zero-based position of this parameter. */
23-
int getPosition() { result = pos }
23+
final int getPosition() { result = pos }
2424
}
2525

2626
/**
2727
* A parameter defined using a pattern.
2828
*
2929
* This includes both simple parameters and tuple parameters.
3030
*/
31-
class PatternParameter extends Parameter, Pattern {
32-
override string toString() { result = Pattern.super.toString() }
33-
34-
override Location getLocation() { result = Pattern.super.getLocation() }
35-
}
31+
class PatternParameter extends Parameter, Pattern { }
3632

3733
/** A parameter defined using a tuple pattern. */
3834
class TuplePatternParameter extends PatternParameter, TuplePattern {
39-
override string toString() { result = TuplePattern.super.toString() }
40-
41-
override string describeQlClass() { result = "TuplePatternParameter" }
35+
final override string describeQlClass() { result = "TuplePatternParameter" }
4236
}
4337

4438
/** A named parameter. */
@@ -57,13 +51,13 @@ class NamedParameter extends Parameter {
5751

5852
/** A simple (normal) parameter. */
5953
class SimpleParameter extends NamedParameter, PatternParameter, VariablePattern {
60-
override string getName() { result = VariablePattern.super.getName() }
54+
final override string getName() { result = this.getVariableName() }
6155

6256
final override Variable getVariable() { result = TLocalVariable(_, _, this) }
6357

64-
override string describeQlClass() { result = "SimpleParameter" }
58+
final override string describeQlClass() { result = "SimpleParameter" }
6559

66-
override string toString() { result = this.getName() }
60+
final override string toString() { result = this.getName() }
6761
}
6862

6963
/**
@@ -75,15 +69,15 @@ class SimpleParameter extends NamedParameter, PatternParameter, VariablePattern
7569
* ```
7670
*/
7771
class BlockParameter extends @block_parameter, NamedParameter {
78-
override Generated::BlockParameter generated;
72+
final override Generated::BlockParameter generated;
7973

8074
final override Variable getVariable() { result = TLocalVariable(_, _, generated.getName()) }
8175

82-
override string describeQlClass() { result = "BlockParameter" }
76+
final override string describeQlClass() { result = "BlockParameter" }
8377

84-
override string toString() { result = "&" + this.getName() }
78+
final override string toString() { result = "&" + this.getName() }
8579

86-
override string getName() { result = generated.getName().getValue() }
80+
final override string getName() { result = generated.getName().getValue() }
8781
}
8882

8983
/**
@@ -96,15 +90,15 @@ class BlockParameter extends @block_parameter, NamedParameter {
9690
* ```
9791
*/
9892
class HashSplatParameter extends @hash_splat_parameter, NamedParameter {
99-
override Generated::HashSplatParameter generated;
93+
final override Generated::HashSplatParameter generated;
10094

10195
final override Variable getVariable() { result = TLocalVariable(_, _, generated.getName()) }
10296

103-
override string describeQlClass() { result = "HashSplatParameter" }
97+
final override string describeQlClass() { result = "HashSplatParameter" }
10498

105-
override string toString() { result = "**" + this.getName() }
99+
final override string toString() { result = "**" + this.getName() }
106100

107-
override string getName() { result = generated.getName().getValue() }
101+
final override string getName() { result = generated.getName().getValue() }
108102
}
109103

110104
/**
@@ -119,29 +113,29 @@ class HashSplatParameter extends @hash_splat_parameter, NamedParameter {
119113
* ```
120114
*/
121115
class KeywordParameter extends @keyword_parameter, NamedParameter {
122-
override Generated::KeywordParameter generated;
116+
final override Generated::KeywordParameter generated;
123117

124118
final override Variable getVariable() { result = TLocalVariable(_, _, generated.getName()) }
125119

126-
override string describeQlClass() { result = "KeywordParameter" }
120+
final override string describeQlClass() { result = "KeywordParameter" }
127121

128-
override string getName() { result = generated.getName().getValue() }
122+
final override string getName() { result = generated.getName().getValue() }
129123

130124
/**
131125
* Gets the default value, i.e. the value assigned to the parameter when one
132126
* is not provided by the caller. If the parameter is mandatory and does not
133127
* have a default value, this predicate has no result.
134128
* TODO: better return type (Expr?)
135129
*/
136-
AstNode getDefaultValue() { result = generated.getValue() }
130+
final AstNode getDefaultValue() { result = generated.getValue() }
137131

138132
/**
139133
* Holds if the parameter is optional. That is, there is a default value that
140134
* is used when the caller omits this parameter.
141135
*/
142-
predicate isOptional() { exists(this.getDefaultValue()) }
136+
final predicate isOptional() { exists(this.getDefaultValue()) }
143137

144-
override string toString() { result = this.getName() }
138+
final override string toString() { result = this.getName() }
145139
}
146140

147141
/**
@@ -154,22 +148,22 @@ class KeywordParameter extends @keyword_parameter, NamedParameter {
154148
* ```
155149
*/
156150
class OptionalParameter extends @optional_parameter, NamedParameter {
157-
override Generated::OptionalParameter generated;
151+
final override Generated::OptionalParameter generated;
158152

159153
final override Variable getVariable() { result = TLocalVariable(_, _, generated.getName()) }
160154

161-
override string describeQlClass() { result = "OptionalParameter" }
155+
final override string describeQlClass() { result = "OptionalParameter" }
162156

163-
override string toString() { result = this.getName() }
157+
final override string toString() { result = this.getName() }
164158

165-
override string getName() { result = generated.getName().getValue() }
159+
final override string getName() { result = generated.getName().getValue() }
166160

167161
/**
168162
* Gets the default value, i.e. the value assigned to the parameter when one
169163
* is not provided by the caller.
170164
* TODO: better return type (Expr?)
171165
*/
172-
AstNode getDefaultValue() { result = generated.getValue() }
166+
final AstNode getDefaultValue() { result = generated.getValue() }
173167
}
174168

175169
/**
@@ -181,13 +175,13 @@ class OptionalParameter extends @optional_parameter, NamedParameter {
181175
* ```
182176
*/
183177
class SplatParameter extends @splat_parameter, NamedParameter {
184-
override Generated::SplatParameter generated;
178+
final override Generated::SplatParameter generated;
185179

186180
final override Variable getVariable() { result = TLocalVariable(_, _, generated.getName()) }
187181

188-
override string describeQlClass() { result = "SplatParameter" }
182+
final override string describeQlClass() { result = "SplatParameter" }
189183

190-
override string toString() { result = this.getName() }
184+
final override string toString() { result = "*" + this.getName() }
191185

192-
override string getName() { result = generated.getName().getValue() }
186+
final override string getName() { result = generated.getName().getValue() }
193187
}

ql/src/codeql_ruby/ast/Pattern.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ class Pattern extends AstNode {
1111

1212
/** A simple variable pattern. */
1313
class VariablePattern extends Pattern {
14-
override Generated::Identifier generated;
14+
final override Generated::Identifier generated;
1515

1616
/** Gets the name of the variable used in this pattern. */
17-
string getName() { result = generated.getValue() }
17+
final string getVariableName() { result = generated.getValue() }
1818

1919
/** Gets the variable used in this pattern. */
2020
Variable getVariable() { this = result.getAnAccess() }
2121

22-
override string toString() { result = this.getName() }
22+
override string toString() { result = this.getVariableName() }
2323
}
2424

2525
/**
@@ -36,5 +36,5 @@ class TuplePattern extends Pattern {
3636
/** Gets a sub pattern in this tuple pattern. */
3737
final Pattern getAnElement() { result = this.getElement(_) }
3838

39-
override string toString() { result = "(..., ...)" }
39+
final override string toString() { result = "(..., ...)" }
4040
}

ql/src/codeql_ruby/ast/Variable.qll

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ private import internal.Variable
88
/** A scope in which variables can be declared. */
99
class VariableScope extends TScope {
1010
/** Gets a textual representation of this element. */
11-
string toString() { none() }
11+
final string toString() { result = this.(VariableScopeRange).toString() }
1212

1313
/** Gets the program element this scope is associated with, if any. */
14-
AstNode getScopeElement() { none() }
14+
final AstNode getScopeElement() { result = this.(VariableScopeRange).getScopeElement() }
1515

1616
/** Gets the location of the program element this scope is associated with. */
1717
final Location getLocation() { result = getScopeElement().getLocation() }
@@ -26,60 +26,19 @@ class VariableScope extends TScope {
2626
}
2727
}
2828

29-
/** A top-level scope. */
30-
class TopLevelScope extends VariableScope, TTopLevelScope {
31-
final override string toString() { result = "top-level scope" }
32-
33-
final override AstNode getScopeElement() { TTopLevelScope(result) = this }
34-
}
35-
36-
/** A module scope. */
37-
class ModuleScope extends VariableScope, TModuleScope {
38-
final override string toString() { result = "module scope" }
39-
40-
final override AstNode getScopeElement() { TModuleScope(result) = this }
41-
}
42-
43-
/** A class scope. */
44-
class ClassScope extends VariableScope, TClassScope {
45-
final override string toString() { result = "class scope" }
46-
47-
final override AstNode getScopeElement() { TClassScope(result) = this }
48-
}
49-
50-
/** A callable scope. */
51-
class CallableScope extends VariableScope, TCallableScope {
52-
private Callable c;
53-
54-
CallableScope() { this = TCallableScope(c) }
55-
56-
final override string toString() {
57-
(c instanceof Method or c instanceof SingletonMethod) and
58-
result = "method scope"
59-
or
60-
c instanceof Lambda and
61-
result = "lambda scope"
62-
or
63-
c instanceof Block and
64-
result = "block scope"
65-
}
66-
67-
final override Callable getScopeElement() { TCallableScope(result) = this }
68-
}
69-
7029
/** A variable declared in a scope. */
7130
class Variable extends TVariable {
7231
/** Gets the name of this variable. */
73-
string getName() { none() }
32+
final string getName() { result = this.(VariableRange).getName() }
7433

7534
/** Gets a textual representation of this variable. */
7635
final string toString() { result = this.getName() }
7736

7837
/** Gets the location of this variable. */
79-
Location getLocation() { none() }
38+
final Location getLocation() { result = this.(VariableRange).getLocation() }
8039

8140
/** Gets the scope this variable is declared in. */
82-
VariableScope getDeclaringScope() { none() }
41+
final VariableScope getDeclaringScope() { result = this.(VariableRange).getDeclaringScope() }
8342

8443
/** Gets an access to this variable. */
8544
VariableAccess getAnAccess() { result.getVariable() = this }
@@ -93,12 +52,6 @@ class LocalVariable extends Variable {
9352

9453
LocalVariable() { this = TLocalVariable(scope, name, i) }
9554

96-
final override string getName() { result = name }
97-
98-
final override Location getLocation() { result = i.getLocation() }
99-
100-
final override VariableScope getDeclaringScope() { result = scope }
101-
10255
final override LocalVariableAccess getAnAccess() { result.getVariable() = this }
10356
}
10457

@@ -112,14 +65,12 @@ class VariableAccess extends AstNode, @token_identifier {
11265
/** Gets the variable this identifier refers to. */
11366
Variable getVariable() { result = variable }
11467

115-
override string toString() { result = variable.getName() }
68+
final override string toString() { result = variable.getName() }
11669
}
11770

11871
/** An access to a local variable. */
11972
class LocalVariableAccess extends VariableAccess {
12073
override LocalVariable variable;
12174

12275
override LocalVariable getVariable() { result = variable }
123-
124-
override string toString() { result = variable.getName() }
12576
}

0 commit comments

Comments
 (0)