ruby_parser 3.20.0 → 3.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/ruby30_parser.y CHANGED
@@ -96,9 +96,9 @@ rule
96
96
  result = iter
97
97
  }
98
98
 
99
- begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY
99
+ begin_block: tLCURLY top_compstmt tRCURLY
100
100
  {
101
- _, line, stmt, _ = val
101
+ (_, line), stmt, _ = val
102
102
  result = new_iter s(:preexe).line(line), 0, stmt
103
103
  }
104
104
 
@@ -221,6 +221,7 @@ rule
221
221
  | lhs tEQL mrhs
222
222
  {
223
223
  lhs, _, rhs = val
224
+
224
225
  result = new_assign lhs, s(:svalue, rhs).line(rhs.line)
225
226
  }
226
227
  | mlhs tEQL mrhs_arg kRESCUE_MOD stmt
@@ -604,7 +605,7 @@ rule
604
605
  }
605
606
  | tSTAR
606
607
  {
607
- l = lexer.lineno
608
+ (_, l), = val
608
609
  result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l
609
610
  }
610
611
  | tSTAR tCOMMA mlhs_post
@@ -1114,8 +1115,10 @@ rule
1114
1115
 
1115
1116
  paren_args: tLPAREN2 opt_call_args rparen
1116
1117
  {
1117
- _, args, _ = val
1118
+ _, args, (_, line_max) = val
1119
+
1118
1120
  result = args
1121
+ result.line_max = line_max if args
1119
1122
  }
1120
1123
  | tLPAREN2 args tCOMMA args_forward rparen
1121
1124
  {
@@ -1227,7 +1230,7 @@ rule
1227
1230
  args: arg_value
1228
1231
  {
1229
1232
  arg, = val
1230
- lineno = arg.line || lexer.lineno # HACK
1233
+ lineno = arg.line
1231
1234
 
1232
1235
  result = s(:array, arg).line lineno
1233
1236
  }
@@ -1243,9 +1246,7 @@ rule
1243
1246
  }
1244
1247
  | args tCOMMA tSTAR arg_value
1245
1248
  {
1246
- # TODO: the line number from tSTAR has been dropped
1247
- args, _, _, id = val
1248
- line = lexer.lineno
1249
+ args, _, (_, line), id = val
1249
1250
  result = self.list_append args, s(:splat, id).line(line)
1250
1251
  }
1251
1252
 
@@ -1264,7 +1265,6 @@ rule
1264
1265
  }
1265
1266
  | args tCOMMA tSTAR arg_value
1266
1267
  {
1267
- # TODO: make all tXXXX terminals include lexer.lineno
1268
1268
  arg, _, _, splat = val
1269
1269
  result = self.arg_concat arg, splat
1270
1270
  }
@@ -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
  {
@@ -1303,11 +1302,10 @@ rule
1303
1302
  | tLPAREN_ARG
1304
1303
  {
1305
1304
  lexer.lex_state = EXPR_ENDARG
1306
- result = lexer.lineno
1307
1305
  }
1308
1306
  rparen
1309
1307
  {
1310
- _, line, _ = val
1308
+ (_, line), _, _ = val
1311
1309
  result = s(:begin).line line
1312
1310
  }
1313
1311
  | tLPAREN_ARG
@@ -1323,9 +1321,8 @@ rule
1323
1321
  }
1324
1322
  | tLPAREN compstmt tRPAREN
1325
1323
  {
1326
- _, stmt, _ = val
1327
- result = stmt
1328
- result ||= s(:nil).line lexer.lineno
1324
+ (_, line), stmt, _ = val
1325
+ result = stmt || s(:nil).line(line)
1329
1326
  result.paren = true
1330
1327
  }
1331
1328
  | primary_value tCOLON2 tCONSTANT
@@ -1338,12 +1335,14 @@ rule
1338
1335
  {
1339
1336
  result = wrap :colon3, val[1]
1340
1337
  }
1341
- | tLBRACK { result = lexer.lineno } aref_args tRBRACK
1338
+ | tLBRACK aref_args rbracket
1342
1339
  {
1343
- _, line, args, _ = val
1340
+ (_, line), args, (_, line_max) = val
1341
+
1344
1342
  result = args || s(:array)
1345
1343
  result.sexp_type = :array # aref_args is :args
1346
1344
  result.line line
1345
+ result.line_max = line_max
1347
1346
  }
1348
1347
  | tLBRACE
1349
1348
  {
@@ -1454,9 +1453,6 @@ rule
1454
1453
  result = new_for iter, var, body
1455
1454
  }
1456
1455
  | k_class
1457
- {
1458
- result = self.lexer.lineno
1459
- }
1460
1456
  cpath superclass
1461
1457
  {
1462
1458
  if (self.in_def || self.in_single > 0) then
@@ -1471,9 +1467,6 @@ rule
1471
1467
  self.lexer.ignore_body_comments
1472
1468
  }
1473
1469
  | k_class tLSHFT
1474
- {
1475
- result = self.lexer.lineno
1476
- }
1477
1470
  expr
1478
1471
  {
1479
1472
  result = self.in_def
@@ -1485,16 +1478,14 @@ rule
1485
1478
  self.in_single = 0
1486
1479
  self.env.extend
1487
1480
  }
1488
- bodystmt k_end
1481
+ bodystmt
1482
+ k_end
1489
1483
  {
1490
1484
  result = new_sclass val
1491
1485
  self.env.unextend
1492
1486
  self.lexer.ignore_body_comments
1493
1487
  }
1494
1488
  | k_module
1495
- {
1496
- result = self.lexer.lineno
1497
- }
1498
1489
  cpath
1499
1490
  {
1500
1491
  yyerror "module definition in method body" if
@@ -1636,20 +1627,33 @@ rule
1636
1627
  }
1637
1628
 
1638
1629
  f_marg: f_norm_arg
1630
+ {
1631
+ (sym, line), = val
1632
+
1633
+ result = s(:dummy, sym).line line
1634
+ }
1639
1635
  | tLPAREN f_margs rparen
1640
1636
  {
1641
- result = val[1]
1637
+ _, args, _ = val
1638
+ result = args
1642
1639
  }
1643
1640
 
1644
1641
  f_marg_list: f_marg
1645
1642
  {
1646
- sym, = val
1643
+ arg, = val
1644
+ line = arg.line
1647
1645
 
1648
- result = s(:array, sym).line lexer.lineno
1646
+ arg = arg.last if arg.sexp_type == :dummy
1647
+
1648
+ result = s(:array, arg).line line
1649
1649
  }
1650
1650
  | f_marg_list tCOMMA f_marg
1651
1651
  {
1652
- result = list_append val[0], val[2]
1652
+ args, _, arg = val
1653
+
1654
+ arg = arg.last if arg.sexp_type == :dummy
1655
+
1656
+ result = list_append args, arg
1653
1657
  }
1654
1658
 
1655
1659
  f_margs: f_marg_list
@@ -1692,8 +1696,8 @@ rule
1692
1696
  }
1693
1697
  | tSTAR
1694
1698
  {
1695
- result = args [:*]
1696
- result.line lexer.lineno # FIX: tSTAR -> line
1699
+ (_, line), = val
1700
+ result = args([:*]).line line
1697
1701
  }
1698
1702
 
1699
1703
  f_any_kwrest: f_kwrest
@@ -1805,7 +1809,9 @@ opt_block_args_tail: tCOMMA block_args_tail
1805
1809
  }
1806
1810
  | tOROP
1807
1811
  {
1808
- result = s(:args).line lexer.lineno
1812
+ (_, line), = val
1813
+
1814
+ result = s(:args).line line
1809
1815
  }
1810
1816
  | tPIPE block_param opt_bv_decl tPIPE
1811
1817
  {
@@ -1837,7 +1843,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1837
1843
  lambda: tLAMBDA
1838
1844
  {
1839
1845
  self.env.extend :dynamic
1840
- result = [lexer.lineno, lexer.lpar_beg]
1846
+ result = lexer.lpar_beg
1841
1847
  lexer.paren_nest += 1
1842
1848
  lexer.lpar_beg = lexer.paren_nest
1843
1849
  }
@@ -1847,7 +1853,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1847
1853
  }
1848
1854
  lambda_body
1849
1855
  {
1850
- _, (line, lpar), args, _cmdarg, body = val
1856
+ (_, line), lpar, args, _cmdarg, body = val
1851
1857
  lexer.lpar_beg = lpar
1852
1858
 
1853
1859
  lexer.cmdarg.pop
@@ -1931,13 +1937,19 @@ opt_block_args_tail: tCOMMA block_args_tail
1931
1937
  {
1932
1938
  call, args = val
1933
1939
 
1934
- result = call.concat args.sexp_body if args
1940
+ result = call
1941
+
1942
+ if args then
1943
+ call.concat args.sexp_body
1944
+ result.line_max = args.line_max
1945
+ end
1935
1946
  }
1936
1947
  | primary_value call_op operation2 opt_paren_args
1937
1948
  {
1938
- recv, call_op, (op, _line), args = val
1949
+ recv, call_op, (op, op_line), args = val
1939
1950
 
1940
1951
  result = new_call recv, op.to_sym, args, call_op
1952
+ result.line_max = op_line unless args
1941
1953
  }
1942
1954
  | primary_value tCOLON2 operation2 paren_args
1943
1955
  {
@@ -1965,7 +1977,8 @@ opt_block_args_tail: tCOMMA block_args_tail
1965
1977
  }
1966
1978
  | kSUPER
1967
1979
  {
1968
- result = s(:zsuper).line lexer.lineno
1980
+ (_, line), = val
1981
+ result = s(:zsuper).line line
1969
1982
  }
1970
1983
  | primary_value tLBRACK2 opt_call_args rbracket
1971
1984
  {
@@ -1975,11 +1988,11 @@ opt_block_args_tail: tCOMMA block_args_tail
1975
1988
  brace_block: tLCURLY
1976
1989
  {
1977
1990
  self.env.extend :dynamic
1978
- result = self.lexer.lineno
1979
1991
  }
1980
- brace_body tRCURLY
1992
+ brace_body
1993
+ tRCURLY
1981
1994
  {
1982
- _, line, body, _ = val
1995
+ (_, line), _, body, _ = val
1983
1996
 
1984
1997
  result = body
1985
1998
  result.line line
@@ -1989,11 +2002,11 @@ opt_block_args_tail: tCOMMA block_args_tail
1989
2002
  | k_do
1990
2003
  {
1991
2004
  self.env.extend :dynamic
1992
- result = self.lexer.lineno
1993
2005
  }
1994
- do_body kEND
2006
+ do_body
2007
+ kEND
1995
2008
  {
1996
- _, line, body, _ = val
2009
+ (_, line), _, body, _ = val
1997
2010
 
1998
2011
  result = body
1999
2012
  result.line line
@@ -2051,14 +2064,13 @@ opt_block_args_tail: tCOMMA block_args_tail
2051
2064
  }
2052
2065
 
2053
2066
  case_body: k_when
2054
- {
2055
- result = self.lexer.lineno
2056
- }
2057
2067
  case_args then compstmt cases
2058
2068
  {
2059
- result = new_when(val[2], val[4])
2060
- result.line val[1]
2061
- result << val[5] if val[5]
2069
+ (_, line), case_args, _then, body, cases = val
2070
+
2071
+ result = new_when case_args, body
2072
+ result.line line
2073
+ result << cases if cases
2062
2074
  }
2063
2075
 
2064
2076
  cases: opt_else | case_body
@@ -2678,15 +2690,17 @@ opt_block_args_tail: tCOMMA block_args_tail
2678
2690
 
2679
2691
  words: tWORDS_BEG tSPACE tSTRING_END
2680
2692
  {
2681
- (_, line), _, _ = val
2693
+ (_, line), _, (_, line_max) = val
2682
2694
 
2683
2695
  result = s(:array).line line
2696
+ result.line_max = line_max
2684
2697
  }
2685
2698
  | tWORDS_BEG word_list tSTRING_END
2686
2699
  {
2687
- (_, line), list, _ = val
2700
+ (_, line), list, (_, line_max) = val
2688
2701
 
2689
2702
  result = list.line line
2703
+ result.line_max = line_max
2690
2704
  }
2691
2705
 
2692
2706
  word_list: none
@@ -2706,15 +2720,17 @@ opt_block_args_tail: tCOMMA block_args_tail
2706
2720
 
2707
2721
  symbols: tSYMBOLS_BEG tSPACE tSTRING_END
2708
2722
  {
2709
- (_, line), _, _ = val
2723
+ (_, line), _, (_, line_max) = val
2710
2724
 
2711
2725
  result = s(:array).line line
2726
+ result.line_max = line_max
2712
2727
  }
2713
2728
  | tSYMBOLS_BEG symbol_list tSTRING_END
2714
2729
  {
2715
- (_, line), list, _, = val
2716
- list.line line
2717
- result = list
2730
+ (_, line), list, (_, line_max), = val
2731
+
2732
+ result = list.line line
2733
+ result.line_max = line_max
2718
2734
  }
2719
2735
 
2720
2736
  symbol_list: none
@@ -2729,28 +2745,32 @@ opt_block_args_tail: tCOMMA block_args_tail
2729
2745
 
2730
2746
  qwords: tQWORDS_BEG tSPACE tSTRING_END
2731
2747
  {
2732
- (_, line), _, _ = val
2748
+ (_, line), _, (_, line_max) = val
2733
2749
 
2734
2750
  result = s(:array).line line
2751
+ result.line_max = line_max
2735
2752
  }
2736
2753
  | tQWORDS_BEG qword_list tSTRING_END
2737
2754
  {
2738
- (_, line), list, _ = val
2755
+ (_, line), list, (_, line_max) = val
2739
2756
 
2740
2757
  result = list.line line
2758
+ result.line_max = line_max
2741
2759
  }
2742
2760
 
2743
2761
  qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END
2744
2762
  {
2745
- (_, line), _, _ = val
2763
+ (_, line), _, (_, line_max) = val
2746
2764
 
2747
2765
  result = s(:array).line line
2766
+ result.line_max = line_max
2748
2767
  }
2749
2768
  | tQSYMBOLS_BEG qsym_list tSTRING_END
2750
2769
  {
2751
- (_, line), list, _ = val
2770
+ (_, line), list, (_, line_max) = val
2752
2771
 
2753
2772
  result = list.line line
2773
+ result.line_max = line_max
2754
2774
  }
2755
2775
 
2756
2776
  qword_list: none
@@ -2825,7 +2845,6 @@ regexp_contents: none
2825
2845
  lexer.brace_nest,
2826
2846
  lexer.string_nest, # TODO: remove
2827
2847
  lexer.lex_state,
2828
- lexer.lineno,
2829
2848
  ]
2830
2849
 
2831
2850
  lexer.cmdarg.push false
@@ -2840,9 +2859,9 @@ regexp_contents: none
2840
2859
  compstmt
2841
2860
  tSTRING_DEND
2842
2861
  {
2843
- _, memo, stmt, _ = val
2862
+ (_, line), memo, stmt, _ = val
2844
2863
 
2845
- lex_strterm, brace_nest, string_nest, oldlex_state, line = memo
2864
+ lex_strterm, brace_nest, string_nest, oldlex_state = memo
2846
2865
  # TODO: heredoc_indent
2847
2866
 
2848
2867
  lexer.lex_strterm = lex_strterm
@@ -2902,11 +2921,11 @@ regexp_contents: none
2902
2921
 
2903
2922
  dsym: tSYMBEG string_contents tSTRING_END
2904
2923
  {
2905
- _, result, _ = val
2924
+ (_, line), result, _ = val
2906
2925
 
2907
2926
  lexer.lex_state = EXPR_END
2908
2927
 
2909
- result ||= s(:str, "").line lexer.lineno
2928
+ result ||= s(:str, "").line line
2910
2929
 
2911
2930
  case result.sexp_type
2912
2931
  when :dstr then
@@ -2939,15 +2958,15 @@ regexp_contents: none
2939
2958
  | tCONSTANT
2940
2959
  | tCVAR
2941
2960
 
2942
- keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2943
- | kSELF { result = s(:self).line lexer.lineno }
2944
- | kTRUE { result = s(:true).line lexer.lineno }
2945
- | kFALSE { result = s(:false).line lexer.lineno }
2946
- | k__FILE__ { result = s(:str, self.file).line lexer.lineno }
2947
- | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno }
2961
+ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
2962
+ | kSELF { (_, line), = val; result = s(:self).line line }
2963
+ | kTRUE { (_, line), = val; result = s(:true).line line }
2964
+ | kFALSE { (_, line), = val; result = s(:false).line line }
2965
+ | k__FILE__ { (_, line), = val; result = s(:str, self.file).line line }
2966
+ | k__LINE__ { (_, line), = val; result = s(:lit, line).line line }
2948
2967
  | k__ENCODING__
2949
2968
  {
2950
- l = lexer.lineno
2969
+ (_, l), = val
2951
2970
  result =
2952
2971
  if defined? Encoding then
2953
2972
  s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
@@ -3117,12 +3136,12 @@ f_opt_paren_args: f_paren_args
3117
3136
  |
3118
3137
  {
3119
3138
  result = args val
3120
- # result.line lexer.lineno
3121
3139
  }
3122
3140
 
3123
3141
  args_forward: tBDOT3
3124
3142
  {
3125
- result = s(:forward_args).line lexer.lineno
3143
+ (_, line), = val
3144
+ result = s(:forward_args).line line
3126
3145
  }
3127
3146
 
3128
3147
  f_bad_arg: tCONSTANT
@@ -3176,7 +3195,14 @@ f_opt_paren_args: f_paren_args
3176
3195
  result = s(:args, list).line list.line
3177
3196
  end
3178
3197
 
3179
- result << (Sexp === item ? item : item.first)
3198
+ if Sexp === item then
3199
+ line_max = item.line_max
3200
+ else
3201
+ item, line_max = item
3202
+ end
3203
+
3204
+ result << item
3205
+ result.line_max = line_max
3180
3206
  }
3181
3207
 
3182
3208
  f_label: tLABEL
@@ -3253,9 +3279,10 @@ f_opt_paren_args: f_paren_args
3253
3279
  }
3254
3280
  | kwrest_mark
3255
3281
  {
3282
+ (_, line), = val
3256
3283
  id = :"**"
3257
- self.env[id] = :lvar # TODO: needed?!?
3258
- result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
3284
+ self.env[id] = :lvar
3285
+ result = [id, line]
3259
3286
  }
3260
3287
 
3261
3288
  f_opt: f_arg_asgn
@@ -3313,9 +3340,10 @@ f_opt_paren_args: f_paren_args
3313
3340
  }
3314
3341
  | restarg_mark
3315
3342
  {
3343
+ (_, line), = val
3316
3344
  name = :"*"
3317
3345
  self.env[name] = :lvar
3318
- result = [name, lexer.lineno] # FIX: tSTAR to include lineno
3346
+ result = [name, line]
3319
3347
  }
3320
3348
 
3321
3349
  blkarg_mark: tAMPER2 | tAMPER
@@ -3420,11 +3448,10 @@ f_opt_paren_args: f_paren_args
3420
3448
  opt_terms: | terms
3421
3449
  opt_nl: | tNL
3422
3450
  rparen: opt_nl tRPAREN
3423
- # TODO:
3424
- # {
3425
- # _, close = val
3426
- # result = [close, lexer.lineno]
3427
- # }
3451
+ {
3452
+ _, close = val # TODO: include lineno in close?
3453
+ result = [close, lexer.lineno]
3454
+ }
3428
3455
  rbracket: opt_nl tRBRACK
3429
3456
  {
3430
3457
  _, close = val