ruby_parser 3.20.1 → 3.20.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ruby_parser.yy CHANGED
@@ -1293,7 +1293,6 @@ rule
1293
1293
  | k_begin
1294
1294
  {
1295
1295
  lexer.cmdarg.push false
1296
- result = self.lexer.lineno
1297
1296
  }
1298
1297
  bodystmt k_end
1299
1298
  {
@@ -1458,9 +1457,6 @@ rule
1458
1457
  result = new_for iter, var, body
1459
1458
  }
1460
1459
  | k_class
1461
- {
1462
- result = self.lexer.lineno
1463
- }
1464
1460
  cpath superclass
1465
1461
  {
1466
1462
  if (self.in_def || self.in_single > 0) then
@@ -1475,9 +1471,6 @@ rule
1475
1471
  self.lexer.ignore_body_comments
1476
1472
  }
1477
1473
  | k_class tLSHFT
1478
- {
1479
- result = self.lexer.lineno
1480
- }
1481
1474
  expr
1482
1475
  {
1483
1476
  result = self.in_def
@@ -1496,9 +1489,6 @@ rule
1496
1489
  self.lexer.ignore_body_comments
1497
1490
  }
1498
1491
  | k_module
1499
- {
1500
- result = self.lexer.lineno
1501
- }
1502
1492
  cpath
1503
1493
  {
1504
1494
  yyerror "module definition in method body" if
@@ -30,9 +30,9 @@ class Sexp
30
30
  end
31
31
 
32
32
  module RubyParserStuff
33
- VERSION = "3.20.1"
33
+ VERSION = "3.20.3"
34
34
 
35
- attr_accessor :lexer, :in_def, :in_single, :file
35
+ attr_accessor :lexer, :in_def, :in_single, :file, :in_argdef
36
36
  attr_accessor :in_kwarg
37
37
  attr_reader :env, :comments
38
38
 
@@ -122,6 +122,7 @@ module RubyParserStuff
122
122
  self.lexer = RubyLexer.new v && v.to_i
123
123
  self.lexer.parser = self
124
124
  self.in_kwarg = false
125
+ self.in_argdef = false
125
126
 
126
127
  @env = RubyParserStuff::Environment.new
127
128
  @comments = []
@@ -824,10 +825,10 @@ module RubyParserStuff
824
825
  end
825
826
 
826
827
  def new_begin val
827
- _, lineno, body, _ = val
828
+ (_, line), _, body, _ = val
828
829
 
829
830
  result = body ? s(:begin, body) : s(:nil)
830
- result.line lineno
831
+ result.line line
831
832
 
832
833
  result
833
834
  end
@@ -928,8 +929,7 @@ module RubyParserStuff
928
929
  end
929
930
 
930
931
  def new_class val
931
- # TODO: get line from class keyword
932
- _, line, path, superclass, _, body, (_, line_max) = val
932
+ (_, line), path, superclass, _, body, (_, line_max) = val
933
933
 
934
934
  path = path.first if path.instance_of? Array
935
935
 
@@ -1209,7 +1209,7 @@ module RubyParserStuff
1209
1209
  end
1210
1210
 
1211
1211
  def new_module val
1212
- (_, line_min), _, path, _, body, (_, line_max) = val
1212
+ (_, line_min), path, _, body, (_, line_max) = val
1213
1213
 
1214
1214
  path = path.first if path.instance_of? Array
1215
1215
 
@@ -1367,7 +1367,7 @@ module RubyParserStuff
1367
1367
  end
1368
1368
 
1369
1369
  def new_sclass val
1370
- recv, in_def, in_single, body = val[3], val[4], val[6], val[7]
1370
+ (_, line), _, recv, in_def, _, in_single, body, _ = val
1371
1371
 
1372
1372
  result = s(:sclass, recv)
1373
1373
 
@@ -1379,7 +1379,7 @@ module RubyParserStuff
1379
1379
  end
1380
1380
  end
1381
1381
 
1382
- result.line = val[2]
1382
+ result.line = line
1383
1383
  self.in_def = in_def
1384
1384
  self.in_single = in_single
1385
1385
  result
@@ -132,11 +132,13 @@ module TestRubyParserShared
132
132
  # for the array. Luckily, the arary elements all seemt to get the correct
133
133
  # line number.
134
134
  rb = "[\n'a',\n'b']\n1"
135
+
135
136
  pt = s(:block,
136
137
  s(:array,
137
138
  s(:str, "a").line(2),
138
- s(:str, "b").line(3)),
139
+ s(:str, "b").line(3)).line(1),
139
140
  s(:lit, 1).line(4)).line 1
141
+
140
142
  assert_parse rb, pt
141
143
  end
142
144
 
@@ -5554,6 +5556,14 @@ module TestRubyParserShared31Plus
5554
5556
  assert_case_in rb, pt
5555
5557
  end
5556
5558
 
5559
+ def test_defn_forward_args__no_parens
5560
+ rb = "def f ...\n m(...)\nend"
5561
+ pt = s(:defn, :f, s(:args, s(:forward_args)),
5562
+ s(:call, nil, :m, s(:forward_args).line(2)).line(2))
5563
+
5564
+ assert_parse rb, pt
5565
+ end
5566
+
5557
5567
  def test_case_in_carat_nonlocal_vars
5558
5568
  processor.env[:a] = :lvar
5559
5569
 
@@ -5632,6 +5642,34 @@ end
5632
5642
 
5633
5643
  module TestRubyParserShared32Plus
5634
5644
  include TestRubyParserShared31Plus
5645
+
5646
+ def test_args_star__anon_solo
5647
+ rb = "f(*)"
5648
+ pt = s(:call, nil, :f, s(:splat))
5649
+
5650
+ assert_parse rb, pt
5651
+ end
5652
+
5653
+ def test_args_star__anon_trailing
5654
+ rb = "f(x, *)"
5655
+ pt = s(:call, nil, :f, s(:call, nil, :x), s(:splat))
5656
+
5657
+ assert_parse rb, pt
5658
+ end
5659
+
5660
+ def test_args_dstar__anon_solo
5661
+ rb = "f(**)"
5662
+ pt = s(:call, nil, :f, s(:hash, s(:kwsplat))) # TODO double check this
5663
+
5664
+ assert_parse rb, pt
5665
+ end
5666
+
5667
+ def test_args_dstar__anon_trailing
5668
+ rb = "f(x, **)"
5669
+ pt = s(:call, nil, :f, s(:call, nil, :x), s(:hash, s(:kwsplat))) # TODO double check this
5670
+
5671
+ assert_parse rb, pt
5672
+ end
5635
5673
  end
5636
5674
 
5637
5675
  class Minitest::Test
data/tools/munge.rb CHANGED
@@ -174,6 +174,10 @@ ARGF.each_line do |line|
174
174
  last_token = token
175
175
  when /^Reading a token: / then
176
176
  next # skip
177
+ when /^Reading a token$/ then # wtf?
178
+ next # skip
179
+ when /^(?:add_delayed_token|parser_dispatch)/ then # dunno what this is yet
180
+ next # skip
177
181
  when /^read\s+:(\w+)/ then # read :tNL(tNL) nil
178
182
  token = munge $1
179
183
  next if last_token == token
@@ -212,7 +216,9 @@ ARGF.each_line do |line|
212
216
  reduce_line = nil
213
217
  stack.clear
214
218
  when /^reduce/ then # ruby_parser side
215
- puts munge line.chomp
219
+ s = munge line.chomp
220
+ next if s =~ /reduce\s+(\w+) --> \1/
221
+ puts s
216
222
  puts
217
223
  when /^(\w+_stack)\.(\w+)/ then
218
224
  # TODO: make pretty, but still informative w/ line numbers etc
@@ -223,7 +229,7 @@ ARGF.each_line do |line|
223
229
  # puts line
224
230
  # TODO: make pretty, but still informative w/ line numbers etc
225
231
  puts line.gsub("true", "1").gsub("false", "0")
226
- when /^lex_state: :?([\w|]+) -> :?([\w|]+)(?: (?:at|from) (.*))?/ then
232
+ when /^lex_state: :?([\w|()]+) -> :?([\w|]+)(?: (?:at|from) (.*))?/ then
227
233
  a, b, c = $1.upcase, $2.upcase, $3
228
234
  a.gsub!(/EXPR_/, "")
229
235
  b.gsub!(/EXPR_/, "")
data/tools/ripper.rb CHANGED
@@ -21,18 +21,20 @@ end
21
21
  ARGV.each do |path|
22
22
  src = path == "-" ? $stdin.read : File.read(path)
23
23
 
24
- sexp = if $b then
25
- Ripper.sexp src
26
- else
27
- rip = MySexpBuilder.new src
28
- rip.yydebug = $d
29
- rip.parse
30
-
31
- if rip.error? then
32
- warn "skipping"
33
- next
34
- end
35
- end
24
+ sexp = nil
25
+
26
+ if $b then
27
+ sexp = Ripper.sexp src
28
+ else
29
+ rip = MySexpBuilder.new src
30
+ rip.yydebug = $d
31
+ sexp = rip.parse
32
+
33
+ if rip.error? then
34
+ warn "skipping"
35
+ next
36
+ end
37
+ end
36
38
 
37
39
  puts "accept"
38
40
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.20.1
4
+ version: 3.20.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -29,7 +29,7 @@ cert_chain:
29
29
  ROfWo9Uyp8ba/j9eVG14KkYRaLydAY1MNQk2yd3R5CGfeOpD1kttxjoypoUJ2dOG
30
30
  nsNBRuQJ1UfiCG97a6DNm+Fr
31
31
  -----END CERTIFICATE-----
32
- date: 2023-05-17 00:00:00.000000000 Z
32
+ date: 2023-07-12 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: sexp_processor
metadata.gz.sig CHANGED
Binary file