Skip to content

Commit 398ed4c

Browse files
authored
Merge pull request #338 from github/aibaars/update-grammar
Update tree-sitter-ruby
2 parents ecc9f07 + bb5da92 commit 398ed4c

File tree

19 files changed

+5805
-3155
lines changed

19 files changed

+5805
-3155
lines changed

Cargo.lock

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extractor/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ flate2 = "1.0"
1111
node-types = { path = "../node-types" }
1212
tree-sitter = "0.19"
1313
tree-sitter-embedded-template = "0.19"
14-
tree-sitter-ruby = "0.19"
14+
tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "bb6a42e42b048627a74a127d3e0184c1eef01de9" }
1515
clap = "2.33"
1616
tracing = "0.1"
1717
tracing-subscriber = { version = "0.2", features = ["env-filter"] }

generator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ node-types = { path = "../node-types" }
1212
tracing = "0.1"
1313
tracing-subscriber = { version = "0.2", features = ["env-filter"] }
1414
tree-sitter-embedded-template = "0.19"
15-
tree-sitter-ruby = "0.19"
15+
tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "bb6a42e42b048627a74a127d3e0184c1eef01de9" }

ql/lib/codeql/ruby/ast/Call.qll

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,19 @@ class BlockArgument extends Expr, TBlockArgument {
197197
pred = "getValue" and result = this.getValue()
198198
}
199199
}
200+
201+
/**
202+
* A `...` expression that contains forwarded arguments.
203+
* ```rb
204+
* foo(...)
205+
* ```
206+
*/
207+
class ForwardedArguments extends Expr, TForwardArgument {
208+
private Ruby::ForwardArgument g;
209+
210+
ForwardedArguments() { this = TForwardArgument(g) }
211+
212+
final override string getAPrimaryQlClass() { result = "ForwardedArguments" }
213+
214+
final override string toString() { result = "..." }
215+
}

ql/lib/codeql/ruby/ast/Parameter.qll

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,3 +233,16 @@ class SplatParameter extends NamedParameter, TSplatParameter {
233233

234234
final override string getName() { result = g.getName().getValue() }
235235
}
236+
237+
/**
238+
* A special `...` parameter that forwards positional/keyword/block arguments:
239+
* ```rb
240+
* def foo(...)
241+
* end
242+
* ```
243+
*/
244+
class ForwardParameter extends Parameter, TForwardParameter {
245+
final override string getAPrimaryQlClass() { result = "ForwardParameter" }
246+
247+
final override string toString() { result = "..." }
248+
}

ql/lib/codeql/ruby/ast/internal/AST.qll

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ private module Cached {
132132
TFloatLiteral(Ruby::Float g) { not any(Ruby::Rational r).getChild() = g } or
133133
TForExpr(Ruby::For g) or
134134
TForIn(Ruby::In g) or // TODO REMOVE
135+
TForwardParameter(Ruby::ForwardParameter g) or
136+
TForwardArgument(Ruby::ForwardArgument g) or
135137
TGEExpr(Ruby::Binary g) { g instanceof @ruby_binary_rangleequal } or
136138
TGTExpr(Ruby::Binary g) { g instanceof @ruby_binary_rangle } or
137139
TGlobalVariableAccessReal(Ruby::GlobalVariable g, AST::GlobalVariable v) {
@@ -340,6 +342,8 @@ private module Cached {
340342
n = TFloatLiteral(result) or
341343
n = TForExpr(result) or
342344
n = TForIn(result) or // TODO REMOVE
345+
n = TForwardArgument(result) or
346+
n = TForwardParameter(result) or
343347
n = TGEExpr(result) or
344348
n = TGTExpr(result) or
345349
n = TGlobalVariableAccessReal(result, _) or
@@ -550,7 +554,8 @@ class TSelf = TSelfReal or TSelfSynth;
550554
class TExpr =
551555
TSelf or TArgumentList or TRescueClause or TRescueModifierExpr or TPair or TStringConcatenation or
552556
TCall or TBlockArgument or TConstantAccess or TControlExpr or TWhenExpr or TLiteral or
553-
TCallable or TVariableAccess or TStmtSequence or TOperation or TSimpleParameter;
557+
TCallable or TVariableAccess or TStmtSequence or TOperation or TSimpleParameter or
558+
TForwardArgument;
554559

555560
class TSplatExpr = TSplatExprReal or TSplatExprSynth;
556561

@@ -677,7 +682,7 @@ class TReturningStmt = TReturnStmt or TBreakStmt or TNextStmt;
677682

678683
class TParameter =
679684
TPatternParameter or TBlockParameter or THashSplatParameter or TKeywordParameter or
680-
TOptionalParameter or TSplatParameter;
685+
TOptionalParameter or TSplatParameter or TForwardParameter;
681686

682687
class TPatternParameter = TSimpleParameter or TTuplePatternParameter;
683688

ql/lib/codeql/ruby/ast/internal/TreeSitter.qll

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,18 @@ module Ruby {
742742
}
743743
}
744744

745+
/** A class representing `forward_argument` tokens. */
746+
class ForwardArgument extends @ruby_token_forward_argument, Token {
747+
/** Gets the name of the primary QL class for this element. */
748+
override string getAPrimaryQlClass() { result = "ForwardArgument" }
749+
}
750+
751+
/** A class representing `forward_parameter` tokens. */
752+
class ForwardParameter extends @ruby_token_forward_parameter, Token {
753+
/** Gets the name of the primary QL class for this element. */
754+
override string getAPrimaryQlClass() { result = "ForwardParameter" }
755+
}
756+
745757
/** A class representing `global_variable` tokens. */
746758
class GlobalVariable extends @ruby_token_global_variable, Token {
747759
/** Gets the name of the primary QL class for this element. */

ql/lib/ruby.dbscheme

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ ruby_alias_def(
6969
int loc: @location ref
7070
);
7171

72-
@ruby_argument_list_child_type = @ruby_block_argument | @ruby_break | @ruby_call | @ruby_hash_splat_argument | @ruby_next | @ruby_pair | @ruby_return | @ruby_splat_argument | @ruby_underscore_arg | @ruby_yield
72+
@ruby_argument_list_child_type = @ruby_block_argument | @ruby_break | @ruby_call | @ruby_hash_splat_argument | @ruby_next | @ruby_pair | @ruby_return | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_arg | @ruby_yield
7373

7474
#keyset[ruby_argument_list, index]
7575
ruby_argument_list_child(
@@ -83,7 +83,7 @@ ruby_argument_list_def(
8383
int loc: @location ref
8484
);
8585

86-
@ruby_array_child_type = @ruby_block_argument | @ruby_break | @ruby_call | @ruby_hash_splat_argument | @ruby_next | @ruby_pair | @ruby_return | @ruby_splat_argument | @ruby_underscore_arg | @ruby_yield
86+
@ruby_array_child_type = @ruby_block_argument | @ruby_break | @ruby_call | @ruby_hash_splat_argument | @ruby_next | @ruby_pair | @ruby_return | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_arg | @ruby_yield
8787

8888
#keyset[ruby_array, index]
8989
ruby_array_child(
@@ -236,7 +236,7 @@ ruby_block_parameter_def(
236236
int loc: @location ref
237237
);
238238

239-
@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_identifier
239+
@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_identifier
240240

241241
#keyset[ruby_block_parameters, index]
242242
ruby_block_parameters_child(
@@ -376,7 +376,7 @@ ruby_destructured_left_assignment_def(
376376
int loc: @location ref
377377
);
378378

379-
@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_identifier
379+
@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_identifier
380380

381381
#keyset[ruby_destructured_parameter, index]
382382
ruby_destructured_parameter_child(
@@ -423,7 +423,7 @@ ruby_do_block_def(
423423
int loc: @location ref
424424
);
425425

426-
@ruby_element_reference_child_type = @ruby_block_argument | @ruby_break | @ruby_call | @ruby_hash_splat_argument | @ruby_next | @ruby_pair | @ruby_return | @ruby_splat_argument | @ruby_underscore_arg | @ruby_yield
426+
@ruby_element_reference_child_type = @ruby_block_argument | @ruby_break | @ruby_call | @ruby_hash_splat_argument | @ruby_next | @ruby_pair | @ruby_return | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_arg | @ruby_yield
427427

428428
#keyset[ruby_element_reference, index]
429429
ruby_element_reference_child(
@@ -643,7 +643,7 @@ ruby_lambda_def(
643643
int loc: @location ref
644644
);
645645

646-
@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_identifier
646+
@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_identifier
647647

648648
#keyset[ruby_lambda_parameters, index]
649649
ruby_lambda_parameters_child(
@@ -691,7 +691,7 @@ ruby_method_def(
691691
int loc: @location ref
692692
);
693693

694-
@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_identifier
694+
@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_identifier
695695

696696
#keyset[ruby_method_parameters, index]
697697
ruby_method_parameters_child(
@@ -1220,22 +1220,24 @@ case @ruby_token.kind of
12201220
| 7 = @ruby_token_escape_sequence
12211221
| 8 = @ruby_token_false
12221222
| 9 = @ruby_token_float
1223-
| 10 = @ruby_token_global_variable
1224-
| 11 = @ruby_token_hash_key_symbol
1225-
| 12 = @ruby_token_heredoc_beginning
1226-
| 13 = @ruby_token_heredoc_content
1227-
| 14 = @ruby_token_heredoc_end
1228-
| 15 = @ruby_token_identifier
1229-
| 16 = @ruby_token_instance_variable
1230-
| 17 = @ruby_token_integer
1231-
| 18 = @ruby_token_nil
1232-
| 19 = @ruby_token_operator
1233-
| 20 = @ruby_token_self
1234-
| 21 = @ruby_token_simple_symbol
1235-
| 22 = @ruby_token_string_content
1236-
| 23 = @ruby_token_super
1237-
| 24 = @ruby_token_true
1238-
| 25 = @ruby_token_uninterpreted
1223+
| 10 = @ruby_token_forward_argument
1224+
| 11 = @ruby_token_forward_parameter
1225+
| 12 = @ruby_token_global_variable
1226+
| 13 = @ruby_token_hash_key_symbol
1227+
| 14 = @ruby_token_heredoc_beginning
1228+
| 15 = @ruby_token_heredoc_content
1229+
| 16 = @ruby_token_heredoc_end
1230+
| 17 = @ruby_token_identifier
1231+
| 18 = @ruby_token_instance_variable
1232+
| 19 = @ruby_token_integer
1233+
| 20 = @ruby_token_nil
1234+
| 21 = @ruby_token_operator
1235+
| 22 = @ruby_token_self
1236+
| 23 = @ruby_token_simple_symbol
1237+
| 24 = @ruby_token_string_content
1238+
| 25 = @ruby_token_super
1239+
| 26 = @ruby_token_true
1240+
| 27 = @ruby_token_uninterpreted
12391241
;
12401242

12411243

0 commit comments

Comments
 (0)