ruby_parser 3.19.1 → 3.19.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +10 -0
- data/Rakefile +1 -0
- data/lib/ruby27_parser.rb +25 -9
- data/lib/ruby27_parser.y +13 -1
- data/lib/ruby30_parser.rb +25 -9
- data/lib/ruby30_parser.y +13 -1
- data/lib/ruby31_parser.rb +25 -9
- data/lib/ruby31_parser.y +13 -1
- data/lib/ruby3_parser.yy +13 -1
- data/lib/ruby_lexer.rb +11 -4
- data/lib/ruby_parser.yy +13 -1
- data/lib/ruby_parser_extras.rb +12 -5
- data/test/test_ruby_lexer.rb +13 -0
- data/test/test_ruby_parser.rb +51 -25
- data.tar.gz.sig +1 -1
- metadata +5 -5
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82ff82f1d9693451e0d2f740f5e7a9cbeaa31034bee66ffa61486bc0f930d60b
|
4
|
+
data.tar.gz: 15d8b71b9533534ffaa4184e50f0e5a795e4a7f190bf13a55858f59b17c1ed99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78332be9c05d511d05f1c47977c74390658fcc00fc412009dba172d0e53c0e698b8e28c4803c4969720f2d2d29ed3fc891be2a990618098ae0cf04d00ad28e9f
|
7
|
+
data.tar.gz: 72f7e1c089bc80662ea2eb8c8056d7bb3bf84ff27224c2d450ffde94abd2fb5ba2317d1405a880bebb2c91ac34bcb7023685065f1a8b2e69f62ed8f6b0362e77
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 3.19.2 / 2022-12-03
|
2
|
+
|
3
|
+
* 5 bug fixes:
|
4
|
+
|
5
|
+
* Fixed bug parsing array patterns using %w, %i, etc.
|
6
|
+
* Fixed dedenting when heredoc has only empty line and interpolation. (mvz)
|
7
|
+
* Fixed dsym unescaping. (mvz)
|
8
|
+
* Fixed vars in pattern matching that should be lasgn, not lvar.
|
9
|
+
* find_pat mid-patterns are now splatted inline, not wrapped in an array_pat.
|
10
|
+
|
1
11
|
=== 3.19.1 / 2022-04-05
|
2
12
|
|
3
13
|
* 2 bug fixes:
|
data/Rakefile
CHANGED
@@ -12,6 +12,7 @@ Hoe.add_include_dirs "lib"
|
|
12
12
|
Hoe.add_include_dirs "../../sexp_processor/dev/lib"
|
13
13
|
Hoe.add_include_dirs "../../minitest/dev/lib"
|
14
14
|
Hoe.add_include_dirs "../../oedipus_lex/dev/lib"
|
15
|
+
Hoe.add_include_dirs "../../ruby2ruby/dev/lib"
|
15
16
|
|
16
17
|
V2 = %w[20 21 22 23 24 25 26 27]
|
17
18
|
V3 = %w[30 31]
|
data/lib/ruby27_parser.rb
CHANGED
@@ -7722,10 +7722,10 @@ racc_reduce_table = [
|
|
7722
7722
|
1, 364, :_reduce_none,
|
7723
7723
|
1, 364, :_reduce_none,
|
7724
7724
|
1, 364, :_reduce_none,
|
7725
|
-
1, 364, :
|
7726
|
-
1, 364, :
|
7727
|
-
1, 364, :
|
7728
|
-
1, 364, :
|
7725
|
+
1, 364, :_reduce_548,
|
7726
|
+
1, 364, :_reduce_549,
|
7727
|
+
1, 364, :_reduce_550,
|
7728
|
+
1, 364, :_reduce_551,
|
7729
7729
|
1, 364, :_reduce_552,
|
7730
7730
|
1, 364, :_reduce_none,
|
7731
7731
|
1, 344, :_reduce_554,
|
@@ -11813,13 +11813,29 @@ end
|
|
11813
11813
|
|
11814
11814
|
# reduce 547 omitted
|
11815
11815
|
|
11816
|
-
|
11816
|
+
def _reduce_548(val, _values, result)
|
11817
|
+
result = ary_to_pat val[0]
|
11818
|
+
|
11819
|
+
result
|
11820
|
+
end
|
11821
|
+
|
11822
|
+
def _reduce_549(val, _values, result)
|
11823
|
+
result = ary_to_pat val[0]
|
11817
11824
|
|
11818
|
-
|
11825
|
+
result
|
11826
|
+
end
|
11827
|
+
|
11828
|
+
def _reduce_550(val, _values, result)
|
11829
|
+
result = ary_to_pat val[0]
|
11830
|
+
|
11831
|
+
result
|
11832
|
+
end
|
11819
11833
|
|
11820
|
-
|
11834
|
+
def _reduce_551(val, _values, result)
|
11835
|
+
result = ary_to_pat val[0]
|
11821
11836
|
|
11822
|
-
|
11837
|
+
result
|
11838
|
+
end
|
11823
11839
|
|
11824
11840
|
def _reduce_552(val, _values, result)
|
11825
11841
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -11835,7 +11851,7 @@ end
|
|
11835
11851
|
def _reduce_554(val, _values, result)
|
11836
11852
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
11837
11853
|
# TODO: assignable(p, $1, 0, &@$);
|
11838
|
-
result = wrap :
|
11854
|
+
result = wrap :lasgn, val[0]
|
11839
11855
|
|
11840
11856
|
result
|
11841
11857
|
end
|
data/lib/ruby27_parser.y
CHANGED
@@ -2453,9 +2453,21 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2453
2453
|
| xstring
|
2454
2454
|
| regexp
|
2455
2455
|
| words
|
2456
|
+
{
|
2457
|
+
result = ary_to_pat val[0]
|
2458
|
+
}
|
2456
2459
|
| qwords
|
2460
|
+
{
|
2461
|
+
result = ary_to_pat val[0]
|
2462
|
+
}
|
2457
2463
|
| symbols
|
2464
|
+
{
|
2465
|
+
result = ary_to_pat val[0]
|
2466
|
+
}
|
2458
2467
|
| qsymbols
|
2468
|
+
{
|
2469
|
+
result = ary_to_pat val[0]
|
2470
|
+
}
|
2459
2471
|
| keyword_variable
|
2460
2472
|
{
|
2461
2473
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -2469,7 +2481,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2469
2481
|
{
|
2470
2482
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
2471
2483
|
# TODO: assignable(p, $1, 0, &@$);
|
2472
|
-
result = wrap :
|
2484
|
+
result = wrap :lasgn, val[0]
|
2473
2485
|
}
|
2474
2486
|
|
2475
2487
|
p_var_ref: tCARET tIDENTIFIER
|
data/lib/ruby30_parser.rb
CHANGED
@@ -7841,10 +7841,10 @@ racc_reduce_table = [
|
|
7841
7841
|
1, 371, :_reduce_none,
|
7842
7842
|
1, 371, :_reduce_none,
|
7843
7843
|
1, 371, :_reduce_none,
|
7844
|
-
1, 371, :
|
7845
|
-
1, 371, :
|
7846
|
-
1, 371, :
|
7847
|
-
1, 371, :
|
7844
|
+
1, 371, :_reduce_561,
|
7845
|
+
1, 371, :_reduce_562,
|
7846
|
+
1, 371, :_reduce_563,
|
7847
|
+
1, 371, :_reduce_564,
|
7848
7848
|
1, 371, :_reduce_565,
|
7849
7849
|
1, 371, :_reduce_none,
|
7850
7850
|
1, 350, :_reduce_567,
|
@@ -12038,13 +12038,29 @@ end
|
|
12038
12038
|
|
12039
12039
|
# reduce 560 omitted
|
12040
12040
|
|
12041
|
-
|
12041
|
+
def _reduce_561(val, _values, result)
|
12042
|
+
result = ary_to_pat val[0]
|
12043
|
+
|
12044
|
+
result
|
12045
|
+
end
|
12046
|
+
|
12047
|
+
def _reduce_562(val, _values, result)
|
12048
|
+
result = ary_to_pat val[0]
|
12042
12049
|
|
12043
|
-
|
12050
|
+
result
|
12051
|
+
end
|
12052
|
+
|
12053
|
+
def _reduce_563(val, _values, result)
|
12054
|
+
result = ary_to_pat val[0]
|
12055
|
+
|
12056
|
+
result
|
12057
|
+
end
|
12044
12058
|
|
12045
|
-
|
12059
|
+
def _reduce_564(val, _values, result)
|
12060
|
+
result = ary_to_pat val[0]
|
12046
12061
|
|
12047
|
-
|
12062
|
+
result
|
12063
|
+
end
|
12048
12064
|
|
12049
12065
|
def _reduce_565(val, _values, result)
|
12050
12066
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -12060,7 +12076,7 @@ end
|
|
12060
12076
|
def _reduce_567(val, _values, result)
|
12061
12077
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
12062
12078
|
# TODO: assignable(p, $1, 0, &@$);
|
12063
|
-
result = wrap :
|
12079
|
+
result = wrap :lasgn, val[0]
|
12064
12080
|
|
12065
12081
|
result
|
12066
12082
|
end
|
data/lib/ruby30_parser.y
CHANGED
@@ -2534,9 +2534,21 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2534
2534
|
| xstring
|
2535
2535
|
| regexp
|
2536
2536
|
| words
|
2537
|
+
{
|
2538
|
+
result = ary_to_pat val[0]
|
2539
|
+
}
|
2537
2540
|
| qwords
|
2541
|
+
{
|
2542
|
+
result = ary_to_pat val[0]
|
2543
|
+
}
|
2538
2544
|
| symbols
|
2545
|
+
{
|
2546
|
+
result = ary_to_pat val[0]
|
2547
|
+
}
|
2539
2548
|
| qsymbols
|
2549
|
+
{
|
2550
|
+
result = ary_to_pat val[0]
|
2551
|
+
}
|
2540
2552
|
| keyword_variable
|
2541
2553
|
{
|
2542
2554
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -2550,7 +2562,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2550
2562
|
{
|
2551
2563
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
2552
2564
|
# TODO: assignable(p, $1, 0, &@$);
|
2553
|
-
result = wrap :
|
2565
|
+
result = wrap :lasgn, val[0]
|
2554
2566
|
}
|
2555
2567
|
|
2556
2568
|
p_var_ref: tCARET tIDENTIFIER
|
data/lib/ruby31_parser.rb
CHANGED
@@ -8153,10 +8153,10 @@ racc_reduce_table = [
|
|
8153
8153
|
1, 373, :_reduce_none,
|
8154
8154
|
1, 373, :_reduce_none,
|
8155
8155
|
1, 373, :_reduce_none,
|
8156
|
-
1, 373, :
|
8157
|
-
1, 373, :
|
8158
|
-
1, 373, :
|
8159
|
-
1, 373, :
|
8156
|
+
1, 373, :_reduce_569,
|
8157
|
+
1, 373, :_reduce_570,
|
8158
|
+
1, 373, :_reduce_571,
|
8159
|
+
1, 373, :_reduce_572,
|
8160
8160
|
1, 373, :_reduce_573,
|
8161
8161
|
1, 373, :_reduce_none,
|
8162
8162
|
1, 351, :_reduce_575,
|
@@ -12399,13 +12399,29 @@ end
|
|
12399
12399
|
|
12400
12400
|
# reduce 568 omitted
|
12401
12401
|
|
12402
|
-
|
12402
|
+
def _reduce_569(val, _values, result)
|
12403
|
+
result = ary_to_pat val[0]
|
12404
|
+
|
12405
|
+
result
|
12406
|
+
end
|
12407
|
+
|
12408
|
+
def _reduce_570(val, _values, result)
|
12409
|
+
result = ary_to_pat val[0]
|
12403
12410
|
|
12404
|
-
|
12411
|
+
result
|
12412
|
+
end
|
12413
|
+
|
12414
|
+
def _reduce_571(val, _values, result)
|
12415
|
+
result = ary_to_pat val[0]
|
12416
|
+
|
12417
|
+
result
|
12418
|
+
end
|
12405
12419
|
|
12406
|
-
|
12420
|
+
def _reduce_572(val, _values, result)
|
12421
|
+
result = ary_to_pat val[0]
|
12407
12422
|
|
12408
|
-
|
12423
|
+
result
|
12424
|
+
end
|
12409
12425
|
|
12410
12426
|
def _reduce_573(val, _values, result)
|
12411
12427
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -12421,7 +12437,7 @@ end
|
|
12421
12437
|
def _reduce_575(val, _values, result)
|
12422
12438
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
12423
12439
|
# TODO: assignable(p, $1, 0, &@$);
|
12424
|
-
result = wrap :
|
12440
|
+
result = wrap :lasgn, val[0]
|
12425
12441
|
|
12426
12442
|
result
|
12427
12443
|
end
|
data/lib/ruby31_parser.y
CHANGED
@@ -2562,9 +2562,21 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2562
2562
|
| xstring
|
2563
2563
|
| regexp
|
2564
2564
|
| words
|
2565
|
+
{
|
2566
|
+
result = ary_to_pat val[0]
|
2567
|
+
}
|
2565
2568
|
| qwords
|
2569
|
+
{
|
2570
|
+
result = ary_to_pat val[0]
|
2571
|
+
}
|
2566
2572
|
| symbols
|
2573
|
+
{
|
2574
|
+
result = ary_to_pat val[0]
|
2575
|
+
}
|
2567
2576
|
| qsymbols
|
2577
|
+
{
|
2578
|
+
result = ary_to_pat val[0]
|
2579
|
+
}
|
2568
2580
|
| keyword_variable
|
2569
2581
|
{
|
2570
2582
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -2578,7 +2590,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2578
2590
|
{
|
2579
2591
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
2580
2592
|
# TODO: assignable(p, $1, 0, &@$);
|
2581
|
-
result = wrap :
|
2593
|
+
result = wrap :lasgn, val[0]
|
2582
2594
|
}
|
2583
2595
|
|
2584
2596
|
p_var_ref: tCARET tIDENTIFIER
|
data/lib/ruby3_parser.yy
CHANGED
@@ -2591,9 +2591,21 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2591
2591
|
| xstring
|
2592
2592
|
| regexp
|
2593
2593
|
| words
|
2594
|
+
{
|
2595
|
+
result = ary_to_pat val[0]
|
2596
|
+
}
|
2594
2597
|
| qwords
|
2598
|
+
{
|
2599
|
+
result = ary_to_pat val[0]
|
2600
|
+
}
|
2595
2601
|
| symbols
|
2602
|
+
{
|
2603
|
+
result = ary_to_pat val[0]
|
2604
|
+
}
|
2596
2605
|
| qsymbols
|
2606
|
+
{
|
2607
|
+
result = ary_to_pat val[0]
|
2608
|
+
}
|
2597
2609
|
| keyword_variable
|
2598
2610
|
{
|
2599
2611
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -2607,7 +2619,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2607
2619
|
{
|
2608
2620
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
2609
2621
|
# TODO: assignable(p, $1, 0, &@$);
|
2610
|
-
result = wrap :
|
2622
|
+
result = wrap :lasgn, val[0]
|
2611
2623
|
}
|
2612
2624
|
|
2613
2625
|
p_var_ref: tCARET tIDENTIFIER
|
data/lib/ruby_lexer.rb
CHANGED
@@ -232,7 +232,7 @@ class RubyLexer
|
|
232
232
|
content = match[1]
|
233
233
|
|
234
234
|
if text =~ check then
|
235
|
-
content
|
235
|
+
unescape_string content
|
236
236
|
else
|
237
237
|
content.gsub(/\\\\/, "\\").gsub(/\\\'/, "'")
|
238
238
|
end
|
@@ -590,9 +590,7 @@ class RubyLexer
|
|
590
590
|
orig_line = lineno
|
591
591
|
self.lineno += text.count("\n")
|
592
592
|
|
593
|
-
str = text[1..-2]
|
594
|
-
.gsub(ESC) { unescape($1).b.force_encoding Encoding::UTF_8 }
|
595
|
-
str = str.b unless str.valid_encoding?
|
593
|
+
str = unescape_string text[1..-2]
|
596
594
|
|
597
595
|
result EXPR_END, :tSTRING, str, orig_line
|
598
596
|
end
|
@@ -817,6 +815,15 @@ class RubyLexer
|
|
817
815
|
end
|
818
816
|
end
|
819
817
|
|
818
|
+
def unescape_string str
|
819
|
+
str = str.gsub(ESC) { unescape($1).b.force_encoding Encoding::UTF_8 }
|
820
|
+
if str.valid_encoding?
|
821
|
+
str
|
822
|
+
else
|
823
|
+
str.b
|
824
|
+
end
|
825
|
+
end
|
826
|
+
|
820
827
|
def unescape s
|
821
828
|
r = ESCAPES[s]
|
822
829
|
|
data/lib/ruby_parser.yy
CHANGED
@@ -2530,9 +2530,21 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2530
2530
|
| xstring
|
2531
2531
|
| regexp
|
2532
2532
|
| words
|
2533
|
+
{
|
2534
|
+
result = ary_to_pat val[0]
|
2535
|
+
}
|
2533
2536
|
| qwords
|
2537
|
+
{
|
2538
|
+
result = ary_to_pat val[0]
|
2539
|
+
}
|
2534
2540
|
| symbols
|
2541
|
+
{
|
2542
|
+
result = ary_to_pat val[0]
|
2543
|
+
}
|
2535
2544
|
| qsymbols
|
2545
|
+
{
|
2546
|
+
result = ary_to_pat val[0]
|
2547
|
+
}
|
2536
2548
|
| keyword_variable
|
2537
2549
|
{
|
2538
2550
|
# TODO? if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$);
|
@@ -2546,7 +2558,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2546
2558
|
{
|
2547
2559
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
2548
2560
|
# TODO: assignable(p, $1, 0, &@$);
|
2549
|
-
result = wrap :
|
2561
|
+
result = wrap :lasgn, val[0]
|
2550
2562
|
}
|
2551
2563
|
|
2552
2564
|
p_var_ref: tCARET tIDENTIFIER
|
data/lib/ruby_parser_extras.rb
CHANGED
@@ -30,7 +30,7 @@ class Sexp
|
|
30
30
|
end
|
31
31
|
|
32
32
|
module RubyParserStuff
|
33
|
-
VERSION = "3.19.
|
33
|
+
VERSION = "3.19.2"
|
34
34
|
|
35
35
|
attr_accessor :lexer, :in_def, :in_single, :file
|
36
36
|
attr_accessor :in_kwarg
|
@@ -471,7 +471,7 @@ module RubyParserStuff
|
|
471
471
|
end
|
472
472
|
else
|
473
473
|
warn "unprocessed: %p" % [s]
|
474
|
-
end.map { |l| whitespace_width l
|
474
|
+
end.map { |l| whitespace_width l }
|
475
475
|
}.compact.min
|
476
476
|
end
|
477
477
|
|
@@ -731,6 +731,13 @@ module RubyParserStuff
|
|
731
731
|
result
|
732
732
|
end
|
733
733
|
|
734
|
+
def ary_to_pat ary
|
735
|
+
pat = ary.dup
|
736
|
+
pat.sexp_type = :array_TAIL
|
737
|
+
|
738
|
+
new_array_pattern nil, nil, pat, ary.line
|
739
|
+
end
|
740
|
+
|
734
741
|
def new_array_pattern const, pre_arg, arypat, loc
|
735
742
|
result = s(:array_pat, const).line loc
|
736
743
|
result << pre_arg if pre_arg
|
@@ -1066,9 +1073,9 @@ module RubyParserStuff
|
|
1066
1073
|
lhs_id = "*#{lhs_id}".to_sym
|
1067
1074
|
rhs_id = "*#{rhs_id}".to_sym
|
1068
1075
|
|
1069
|
-
mid.sexp_type
|
1076
|
+
raise "BAD?" unless mid.sexp_type == :array_TAIL
|
1070
1077
|
|
1071
|
-
s(:find_pat_TAIL, lhs_id, mid, rhs_id).line line
|
1078
|
+
s(:find_pat_TAIL, lhs_id, *mid.sexp_body, rhs_id).line line
|
1072
1079
|
end
|
1073
1080
|
|
1074
1081
|
def new_for expr, var, body
|
@@ -1651,7 +1658,7 @@ module RubyParserStuff
|
|
1651
1658
|
|
1652
1659
|
if remove_width then
|
1653
1660
|
line[idx..-1]
|
1654
|
-
elsif line[idx]
|
1661
|
+
elsif line[idx] == "\n"
|
1655
1662
|
nil
|
1656
1663
|
else
|
1657
1664
|
col
|
data/test/test_ruby_lexer.rb
CHANGED
@@ -3009,6 +3009,19 @@ class TestRubyLexer < Minitest::Test
|
|
3009
3009
|
:tSTRING_END, "\"", EXPR_LIT)
|
3010
3010
|
end
|
3011
3011
|
|
3012
|
+
def test_yylex_symbol_double_escape_octal
|
3013
|
+
setup_lexer ":\"Variet\\303\\240\""
|
3014
|
+
|
3015
|
+
adv = @lex.next_token
|
3016
|
+
act_token, act_value = adv
|
3017
|
+
act_value = act_value.first
|
3018
|
+
|
3019
|
+
assert_equal :tSYMBOL, act_token
|
3020
|
+
assert_match EXPR_LIT, @lex.lex_state
|
3021
|
+
# Force comparison of encodings
|
3022
|
+
assert_equal "Varietà", act_value
|
3023
|
+
end
|
3024
|
+
|
3012
3025
|
def test_yylex_symbol_single
|
3013
3026
|
assert_lex3(":'symbol'",
|
3014
3027
|
nil,
|
data/test/test_ruby_parser.rb
CHANGED
@@ -826,6 +826,13 @@ module TestRubyParserShared
|
|
826
826
|
assert_parse rb, pt
|
827
827
|
end
|
828
828
|
|
829
|
+
def test_dsym_esc_to_sym
|
830
|
+
rb = ':"Variet\303\240"'
|
831
|
+
pt = s(:lit, :Varietà)
|
832
|
+
|
833
|
+
assert_parse rb, pt
|
834
|
+
end
|
835
|
+
|
829
836
|
def test_empty
|
830
837
|
refute_parse ""
|
831
838
|
end
|
@@ -3541,10 +3548,8 @@ module TestRubyParserShared20Plus
|
|
3541
3548
|
end
|
3542
3549
|
|
3543
3550
|
def test_regexp_esc_C_slash
|
3544
|
-
skip "https://bugs.ruby-lang.org/issues/18449" if RUBY_VERSION == "3.1.0"
|
3545
|
-
|
3546
3551
|
rb = "/\\cC\\d/"
|
3547
|
-
pt = s(:lit,
|
3552
|
+
pt = s(:lit, Regexp.new('\cC\d')) # https://bugs.ruby-lang.org/issues/18449
|
3548
3553
|
|
3549
3554
|
assert_parse rb, pt
|
3550
3555
|
end
|
@@ -4270,6 +4275,21 @@ module TestRubyParserShared23Plus
|
|
4270
4275
|
assert_parse rb, pt
|
4271
4276
|
end
|
4272
4277
|
|
4278
|
+
def test_heredoc_squiggly_blank_line_plus_interpolation
|
4279
|
+
rb = "a = foo(<<~EOF.chop)\n\n #\{bar}baz\n EOF"
|
4280
|
+
pt = s(:lasgn, :a,
|
4281
|
+
s(:call,
|
4282
|
+
nil,
|
4283
|
+
:foo,
|
4284
|
+
s(:call,
|
4285
|
+
s(:dstr, "\n",
|
4286
|
+
s(:evstr, s(:call, nil, :bar).line(3)).line(3),
|
4287
|
+
s(:str, "baz\n").line(3)).line(1),
|
4288
|
+
:chop).line(1)).line(1)).line(1)
|
4289
|
+
|
4290
|
+
assert_parse rb, pt
|
4291
|
+
end
|
4292
|
+
|
4273
4293
|
def test_integer_with_if_modifier
|
4274
4294
|
rb = "1_234if true"
|
4275
4295
|
pt = s(:if, s(:true), s(:lit, 1234), nil)
|
@@ -4553,8 +4573,8 @@ module TestPatternMatching
|
|
4553
4573
|
pt = s(:array_pat,
|
4554
4574
|
nil,
|
4555
4575
|
s(:lit, :a).line(2),
|
4556
|
-
s(:
|
4557
|
-
s(:
|
4576
|
+
s(:lasgn, :b).line(2),
|
4577
|
+
s(:lasgn, :c).line(2),
|
4558
4578
|
s(:array_pat,
|
4559
4579
|
nil,
|
4560
4580
|
s(:lit, :d).line(2),
|
@@ -4647,19 +4667,19 @@ module TestPatternMatching
|
|
4647
4667
|
end
|
4648
4668
|
|
4649
4669
|
def test_case_in_78
|
4650
|
-
assert_case_in "%W[a b]", s(:
|
4670
|
+
assert_case_in "%W[a b]", s(:array_pat, nil, s(:str, "a").line(2), s(:str, "b").line(2)).line(2)
|
4651
4671
|
end
|
4652
4672
|
|
4653
4673
|
def test_case_in_79
|
4654
|
-
assert_case_in "%w[a b]", s(:
|
4674
|
+
assert_case_in "%w[a b]", s(:array_pat, nil, s(:str, "a").line(2), s(:str, "b").line(2)).line(2)
|
4655
4675
|
end
|
4656
4676
|
|
4657
4677
|
def test_case_in_80
|
4658
|
-
assert_case_in "%I[a b]", s(:
|
4678
|
+
assert_case_in "%I[a b]", s(:array_pat, nil, s(:lit, :a).line(2), s(:lit, :b).line(2)).line(2)
|
4659
4679
|
end
|
4660
4680
|
|
4661
4681
|
def test_case_in_81
|
4662
|
-
assert_case_in "%i[a b]", s(:
|
4682
|
+
assert_case_in "%i[a b]", s(:array_pat, nil, s(:lit, :a).line(2), s(:lit, :b).line(2)).line(2)
|
4663
4683
|
end
|
4664
4684
|
|
4665
4685
|
def test_case_in_83
|
@@ -4667,7 +4687,7 @@ module TestPatternMatching
|
|
4667
4687
|
pt = s(:array_pat, nil,
|
4668
4688
|
s(:iter, s(:lambda).line(2), s(:args, :b).line(2),
|
4669
4689
|
s(:true).line(2)).line(2),
|
4670
|
-
s(:
|
4690
|
+
s(:lasgn, :c).line(2)).line(2)
|
4671
4691
|
|
4672
4692
|
assert_case_in rb, pt
|
4673
4693
|
end
|
@@ -4677,7 +4697,7 @@ module TestPatternMatching
|
|
4677
4697
|
pt = s(:array_pat, nil,
|
4678
4698
|
s(:array_pat, nil,
|
4679
4699
|
s(:lit, :b).line(2),
|
4680
|
-
s(:
|
4700
|
+
s(:lasgn, :c).line(2)).line(2),
|
4681
4701
|
s(:array_pat,
|
4682
4702
|
nil,
|
4683
4703
|
s(:lit, :d).line(2),
|
@@ -4723,7 +4743,7 @@ module TestPatternMatching
|
|
4723
4743
|
s(:in,
|
4724
4744
|
s(:array_pat,
|
4725
4745
|
s(:const, :B).line(2),
|
4726
|
-
s(:
|
4746
|
+
s(:lasgn, :c).line(2)).line(2),
|
4727
4747
|
s(:lit, :d).line(3)).line(2),
|
4728
4748
|
nil)
|
4729
4749
|
|
@@ -4736,7 +4756,7 @@ module TestPatternMatching
|
|
4736
4756
|
s(:in,
|
4737
4757
|
s(:array_pat,
|
4738
4758
|
s(:const, s(:colon2, s(:const, :B).line(2), :C).line(2)).line(2),
|
4739
|
-
s(:
|
4759
|
+
s(:lasgn, :d).line(2)).line(2),
|
4740
4760
|
s(:lit, :e).line(3)).line(2),
|
4741
4761
|
nil)
|
4742
4762
|
|
@@ -4841,7 +4861,7 @@ module TestPatternMatching
|
|
4841
4861
|
s(:hash_pat,
|
4842
4862
|
nil,
|
4843
4863
|
s(:lit, :b).line(2),
|
4844
|
-
s(:
|
4864
|
+
s(:lasgn, :c).line(2),
|
4845
4865
|
s(:kwrest, :"**rest").line(2)).line(2),
|
4846
4866
|
s(:lit, :d).line(2)).line(2),
|
4847
4867
|
nil)
|
@@ -4934,12 +4954,12 @@ module TestPatternMatching
|
|
4934
4954
|
end
|
4935
4955
|
|
4936
4956
|
def test_parse_pattern_044
|
4937
|
-
|
4938
|
-
|
4939
|
-
|
4940
|
-
|
4941
|
-
|
4942
|
-
|
4957
|
+
rb = <<~RUBY
|
4958
|
+
case obj
|
4959
|
+
in Object[]
|
4960
|
+
true
|
4961
|
+
end
|
4962
|
+
RUBY
|
4943
4963
|
pt = s(:case,
|
4944
4964
|
s(:call, nil, :obj),
|
4945
4965
|
s(:in, s(:array_pat, s(:const, :Object).line(2)).line(2),
|
@@ -5072,7 +5092,7 @@ module TestPatternMatching30
|
|
5072
5092
|
s(:find_pat,
|
5073
5093
|
s(:const, :Symbol).line(2),
|
5074
5094
|
:"*lhs",
|
5075
|
-
s(:
|
5095
|
+
s(:lasgn, :x).line(2),
|
5076
5096
|
:"*rhs").line(2))
|
5077
5097
|
end
|
5078
5098
|
|
@@ -5080,7 +5100,7 @@ module TestPatternMatching30
|
|
5080
5100
|
assert_case_in("Symbol[*lhs, x, *rhs]",
|
5081
5101
|
s(:find_pat, s(:const, :Symbol).line(2),
|
5082
5102
|
:"*lhs",
|
5083
|
-
s(:
|
5103
|
+
s(:lasgn, :x).line(2),
|
5084
5104
|
:"*rhs").line(2))
|
5085
5105
|
end
|
5086
5106
|
end
|
@@ -5196,7 +5216,7 @@ module TestRubyParserShared30Plus
|
|
5196
5216
|
rb = "42 => n"
|
5197
5217
|
pt = s(:case,
|
5198
5218
|
s(:lit, 42),
|
5199
|
-
s(:in, s(:
|
5219
|
+
s(:in, s(:lasgn, :n), nil), nil)
|
5200
5220
|
|
5201
5221
|
assert_parse rb, pt
|
5202
5222
|
end
|
@@ -5208,7 +5228,7 @@ module TestRubyParserShared30Plus
|
|
5208
5228
|
s(:in,
|
5209
5229
|
s(:find_pat, nil,
|
5210
5230
|
:"*a",
|
5211
|
-
s(:
|
5231
|
+
s(:lit, :+).line(2),
|
5212
5232
|
:"*b").line(2),
|
5213
5233
|
nil).line(2),
|
5214
5234
|
nil)
|
@@ -5223,7 +5243,7 @@ module TestRubyParserShared30Plus
|
|
5223
5243
|
s(:in,
|
5224
5244
|
s(:find_pat, nil,
|
5225
5245
|
:*,
|
5226
|
-
s(:
|
5246
|
+
s(:lit, :b).line(2), s(:lasgn, :c).line(2),
|
5227
5247
|
:*).line(2),
|
5228
5248
|
nil).line(2),
|
5229
5249
|
nil)
|
@@ -5524,6 +5544,8 @@ class RubyParserTestCase < ParseTreeTestCase
|
|
5524
5544
|
|
5525
5545
|
attr_accessor :assert_parse_ran
|
5526
5546
|
|
5547
|
+
require "ruby2ruby" if ENV["R2R"]
|
5548
|
+
|
5527
5549
|
def assert_parse rb, pt
|
5528
5550
|
self.processor.reset if assert_parse_ran # allows multiple calls
|
5529
5551
|
self.assert_parse_ran = true
|
@@ -5534,6 +5556,10 @@ class RubyParserTestCase < ParseTreeTestCase
|
|
5534
5556
|
pt.line ||= 1
|
5535
5557
|
|
5536
5558
|
self.result = processor.parse rb, "(string)", timeout
|
5559
|
+
|
5560
|
+
# just try it for now:
|
5561
|
+
Ruby2Ruby.new.process(result.deep_clone) if ENV["R2R"]
|
5562
|
+
|
5537
5563
|
assert_equal pt, result
|
5538
5564
|
end
|
5539
5565
|
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
��4i�L[�.�M���4�D=�EuƜK��� �OegE�WKʱ�Dwc}����lٷ�3P�WV�g�L�_���7v�]{�ؚH>n|���2Y��ZxM@oGz'Yq!���+����oۢ���U�mY����WAQ��^��1�gJ�t�Z[wp�>o�v2�q�h[��"��y/}l���j�߉� ]o�Qi/�[RԄ���b٢T��m^x{���9p�H�JjK.�eKz�B�ɹ�C6U8[$�L��9YV^��
|
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.19.
|
4
|
+
version: 3.19.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
JFmxn4h9YO/pVdB962BdBNNDia0kgIjI3ENnkLq0dKpYU3+F3KhEuTksLO0L6X/V
|
30
30
|
YsuyUzsMz6GQA4khyaMgKNSD
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2022-
|
32
|
+
date: 2022-12-03 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: sexp_processor
|
@@ -119,14 +119,14 @@ dependencies:
|
|
119
119
|
requirements:
|
120
120
|
- - "~>"
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: '3.
|
122
|
+
version: '3.25'
|
123
123
|
type: :development
|
124
124
|
prerelease: false
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
126
126
|
requirements:
|
127
127
|
- - "~>"
|
128
128
|
- !ruby/object:Gem::Version
|
129
|
-
version: '3.
|
129
|
+
version: '3.25'
|
130
130
|
description: |-
|
131
131
|
ruby_parser (RP) is a ruby parser written in pure ruby (utilizing
|
132
132
|
racc--which does by default use a C extension). It outputs
|
@@ -243,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
243
|
- !ruby/object:Gem::Version
|
244
244
|
version: '0'
|
245
245
|
requirements: []
|
246
|
-
rubygems_version: 3.3.
|
246
|
+
rubygems_version: 3.3.12
|
247
247
|
signing_key:
|
248
248
|
specification_version: 4
|
249
249
|
summary: ruby_parser (RP) is a ruby parser written in pure ruby (utilizing racc--which
|
metadata.gz.sig
CHANGED
Binary file
|