parser 0.9.2 → 1.0.0
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
- data/AST_FORMAT.md +19 -9
- data/README.md +5 -5
- data/TODO.md +3 -14
- data/bin/parse +1 -1
- data/lib/parser/base.rb +14 -5
- data/lib/parser/builders/default.rb +32 -12
- data/lib/parser/lexer.rl +9 -12
- data/lib/parser/ruby18.y +10 -10
- data/lib/parser/ruby19.y +16 -10
- data/lib/parser/ruby20.y +172 -44
- data/parser.gemspec +1 -1
- data/test/test_lexer.rb +3 -3
- data/test/test_parser.rb +234 -70
- metadata +2 -3
- data/parse.y.diff +0 -12201
data/test/test_lexer.rb
CHANGED
@@ -880,10 +880,10 @@ class TestLexer < MiniTest::Unit::TestCase
|
|
880
880
|
end
|
881
881
|
|
882
882
|
def test_identifier_equals_tilde
|
883
|
-
@lex.state = :expr_fname
|
883
|
+
@lex.state = :expr_fname
|
884
884
|
util_lex_token("identifier=~",
|
885
|
-
:tIDENTIFIER, "identifier",
|
886
|
-
:
|
885
|
+
:tIDENTIFIER, "identifier=",
|
886
|
+
:tTILDE, "~")
|
887
887
|
end
|
888
888
|
|
889
889
|
def test_identifier_gt
|
data/test/test_parser.rb
CHANGED
@@ -430,16 +430,16 @@ class TestParser < MiniTest::Unit::TestCase
|
|
430
430
|
ALL_VERSIONS - %w(1.8))
|
431
431
|
end
|
432
432
|
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
433
|
+
def test_hash_kwsplat
|
434
|
+
assert_parses(
|
435
|
+
s(:hash,
|
436
|
+
s(:pair, s(:sym, :foo), s(:int, 2)),
|
437
|
+
s(:kwsplat, s(:lvar, :bar))),
|
438
|
+
%q[{ foo: 2, **bar }],
|
439
|
+
%q{ ^^ operator (kwsplat)
|
440
|
+
| ~~~~~ expression (kwsplat)},
|
441
|
+
%w(2.0))
|
442
|
+
end
|
443
443
|
|
444
444
|
def test_hash_no_hashrocket
|
445
445
|
assert_parses(
|
@@ -447,7 +447,6 @@ class TestParser < MiniTest::Unit::TestCase
|
|
447
447
|
%q[{ 1, 2 }],
|
448
448
|
%q{^ begin
|
449
449
|
| ^ end
|
450
|
-
| ^ operator (pair)
|
451
450
|
| ~~~~ expression (pair)
|
452
451
|
|~~~~~~~~ expression},
|
453
452
|
%w(1.8))
|
@@ -1479,23 +1478,66 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1479
1478
|
%q{def f(foo=1, bar=2); nil; end})
|
1480
1479
|
end
|
1481
1480
|
|
1482
|
-
def
|
1481
|
+
def test_restarg_named
|
1483
1482
|
assert_parses(
|
1484
1483
|
s(:def, :f,
|
1485
|
-
s(:args, s(:
|
1484
|
+
s(:args, s(:restarg, :foo)),
|
1486
1485
|
s(:nil)),
|
1487
1486
|
%q{def f(*foo); nil; end},
|
1488
|
-
%q{ ~~~ name (args.
|
1489
|
-
| ~~~~ expression (args.
|
1487
|
+
%q{ ~~~ name (args.restarg)
|
1488
|
+
| ~~~~ expression (args.restarg)})
|
1490
1489
|
end
|
1491
1490
|
|
1492
|
-
def
|
1491
|
+
def test_restarg_unnamed
|
1493
1492
|
assert_parses(
|
1494
1493
|
s(:def, :f,
|
1495
|
-
s(:args, s(:
|
1494
|
+
s(:args, s(:restarg)),
|
1496
1495
|
s(:nil)),
|
1497
1496
|
%q{def f(*); nil; end},
|
1498
|
-
%q{ ~ expression (args.
|
1497
|
+
%q{ ~ expression (args.restarg)})
|
1498
|
+
end
|
1499
|
+
|
1500
|
+
def test_kwarg
|
1501
|
+
assert_parses(
|
1502
|
+
s(:def, :f,
|
1503
|
+
s(:args, s(:kwarg, :foo)),
|
1504
|
+
s(:nil)),
|
1505
|
+
%q{def f(foo:); nil; end},
|
1506
|
+
%q{ ~~~ name (args.kwarg)
|
1507
|
+
| ~~~~ expression (args.kwarg)},
|
1508
|
+
ALL_VERSIONS - %w(1.8 1.9 2.0))
|
1509
|
+
end
|
1510
|
+
|
1511
|
+
def test_kwoptarg
|
1512
|
+
assert_parses(
|
1513
|
+
s(:def, :f,
|
1514
|
+
s(:args, s(:kwoptarg, :foo, s(:int, 1))),
|
1515
|
+
s(:nil)),
|
1516
|
+
%q{def f(foo: 1); nil; end},
|
1517
|
+
%q{ ~~~ name (args.kwoptarg)
|
1518
|
+
| ~~~~~~ expression (args.kwoptarg)},
|
1519
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
1520
|
+
end
|
1521
|
+
|
1522
|
+
def test_kwrestarg_named
|
1523
|
+
assert_parses(
|
1524
|
+
s(:def, :f,
|
1525
|
+
s(:args, s(:kwrestarg, :foo)),
|
1526
|
+
s(:nil)),
|
1527
|
+
%q{def f(**foo); nil; end},
|
1528
|
+
%q{ ~~~ name (args.kwrestarg)
|
1529
|
+
| ~~~~~ expression (args.kwrestarg)},
|
1530
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
1531
|
+
end
|
1532
|
+
|
1533
|
+
def test_kwrestarg_unnamed
|
1534
|
+
assert_parses(
|
1535
|
+
s(:def, :f,
|
1536
|
+
s(:args, s(:kwrestarg)),
|
1537
|
+
s(:nil)),
|
1538
|
+
%q{def f(**); nil; end},
|
1539
|
+
%q{ ~~ expression (args.kwrestarg)},
|
1540
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
1499
1541
|
end
|
1500
1542
|
|
1501
1543
|
def test_blockarg
|
@@ -1522,7 +1564,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1522
1564
|
s(:args,
|
1523
1565
|
s(:arg, :a),
|
1524
1566
|
s(:optarg, :o, s(:int, 1)),
|
1525
|
-
s(:
|
1567
|
+
s(:restarg, :r),
|
1526
1568
|
s(:blockarg, :b)),
|
1527
1569
|
%q{a, o=1, *r, &b})
|
1528
1570
|
|
@@ -1531,7 +1573,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1531
1573
|
s(:args,
|
1532
1574
|
s(:arg, :a),
|
1533
1575
|
s(:optarg, :o, s(:int, 1)),
|
1534
|
-
s(:
|
1576
|
+
s(:restarg, :r),
|
1535
1577
|
s(:arg, :p),
|
1536
1578
|
s(:blockarg, :b)),
|
1537
1579
|
%q{a, o=1, *r, p, &b},
|
@@ -1559,7 +1601,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1559
1601
|
assert_parses_args(
|
1560
1602
|
s(:args,
|
1561
1603
|
s(:arg, :a),
|
1562
|
-
s(:
|
1604
|
+
s(:restarg, :r),
|
1563
1605
|
s(:blockarg, :b)),
|
1564
1606
|
%q{a, *r, &b})
|
1565
1607
|
|
@@ -1567,7 +1609,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1567
1609
|
assert_parses_args(
|
1568
1610
|
s(:args,
|
1569
1611
|
s(:arg, :a),
|
1570
|
-
s(:
|
1612
|
+
s(:restarg, :r),
|
1571
1613
|
s(:arg, :p),
|
1572
1614
|
s(:blockarg, :b)),
|
1573
1615
|
%q{a, *r, p, &b},
|
@@ -1584,7 +1626,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1584
1626
|
assert_parses_args(
|
1585
1627
|
s(:args,
|
1586
1628
|
s(:optarg, :o, s(:int, 1)),
|
1587
|
-
s(:
|
1629
|
+
s(:restarg, :r),
|
1588
1630
|
s(:blockarg, :b)),
|
1589
1631
|
%q{o=1, *r, &b})
|
1590
1632
|
|
@@ -1592,7 +1634,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1592
1634
|
assert_parses_args(
|
1593
1635
|
s(:args,
|
1594
1636
|
s(:optarg, :o, s(:int, 1)),
|
1595
|
-
s(:
|
1637
|
+
s(:restarg, :r),
|
1596
1638
|
s(:arg, :p),
|
1597
1639
|
s(:blockarg, :b)),
|
1598
1640
|
%q{o=1, *r, p, &b},
|
@@ -1617,14 +1659,14 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1617
1659
|
# f_rest_arg opt_f_block_arg
|
1618
1660
|
assert_parses_args(
|
1619
1661
|
s(:args,
|
1620
|
-
s(:
|
1662
|
+
s(:restarg, :r),
|
1621
1663
|
s(:blockarg, :b)),
|
1622
1664
|
%q{*r, &b})
|
1623
1665
|
|
1624
1666
|
# f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1625
1667
|
assert_parses_args(
|
1626
1668
|
s(:args,
|
1627
|
-
s(:
|
1669
|
+
s(:restarg, :r),
|
1628
1670
|
s(:arg, :p),
|
1629
1671
|
s(:blockarg, :b)),
|
1630
1672
|
%q{*r, p, &b},
|
@@ -1642,6 +1684,34 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1642
1684
|
%q{})
|
1643
1685
|
end
|
1644
1686
|
|
1687
|
+
def test_kwarg_combinations
|
1688
|
+
# f_kwarg tCOMMA f_kwrest opt_f_block_arg
|
1689
|
+
assert_parses_args(
|
1690
|
+
s(:args,
|
1691
|
+
s(:kwoptarg, :foo, s(:int, 1)),
|
1692
|
+
s(:kwoptarg, :bar, s(:int, 2)),
|
1693
|
+
s(:kwrestarg, :baz),
|
1694
|
+
s(:blockarg, :b)),
|
1695
|
+
%q{(foo: 1, bar: 2, **baz, &b)},
|
1696
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
1697
|
+
|
1698
|
+
# f_kwarg opt_f_block_arg
|
1699
|
+
assert_parses_args(
|
1700
|
+
s(:args,
|
1701
|
+
s(:kwoptarg, :foo, s(:int, 1)),
|
1702
|
+
s(:blockarg, :b)),
|
1703
|
+
%q{(foo: 1, &b)},
|
1704
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
1705
|
+
|
1706
|
+
# f_kwrest opt_f_block_arg
|
1707
|
+
assert_parses_args(
|
1708
|
+
s(:args,
|
1709
|
+
s(:kwrestarg, :baz),
|
1710
|
+
s(:blockarg, :b)),
|
1711
|
+
%q{**baz, &b},
|
1712
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
1713
|
+
end
|
1714
|
+
|
1645
1715
|
def assert_parses_margs(ast, code, versions=ALL_VERSIONS - %w(1.8))
|
1646
1716
|
assert_parses_args(
|
1647
1717
|
s(:args, ast),
|
@@ -1663,42 +1733,42 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1663
1733
|
|
1664
1734
|
# f_marg_list tCOMMA tSTAR f_norm_arg
|
1665
1735
|
assert_parses_margs(
|
1666
|
-
s(:mlhs, s(:arg, :a), s(:
|
1667
|
-
%q{(a, *
|
1736
|
+
s(:mlhs, s(:arg, :a), s(:restarg, :r)),
|
1737
|
+
%q{(a, *r)})
|
1668
1738
|
|
1669
1739
|
# f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
|
1670
1740
|
assert_parses_margs(
|
1671
|
-
s(:mlhs, s(:arg, :a), s(:
|
1672
|
-
%q{(a, *
|
1741
|
+
s(:mlhs, s(:arg, :a), s(:restarg, :r), s(:arg, :p)),
|
1742
|
+
%q{(a, *r, p)})
|
1673
1743
|
|
1674
1744
|
# f_marg_list tCOMMA tSTAR
|
1675
1745
|
assert_parses_margs(
|
1676
|
-
s(:mlhs, s(:arg, :a), s(:
|
1746
|
+
s(:mlhs, s(:arg, :a), s(:restarg)),
|
1677
1747
|
%q{(a, *)})
|
1678
1748
|
|
1679
1749
|
# f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
|
1680
1750
|
assert_parses_margs(
|
1681
|
-
s(:mlhs, s(:arg, :a), s(:
|
1751
|
+
s(:mlhs, s(:arg, :a), s(:restarg), s(:arg, :p)),
|
1682
1752
|
%q{(a, *, p)})
|
1683
1753
|
|
1684
1754
|
# tSTAR f_norm_arg
|
1685
1755
|
assert_parses_margs(
|
1686
|
-
s(:mlhs, s(:
|
1687
|
-
%q{(*
|
1756
|
+
s(:mlhs, s(:restarg, :r)),
|
1757
|
+
%q{(*r)})
|
1688
1758
|
|
1689
1759
|
# tSTAR f_norm_arg tCOMMA f_marg_list
|
1690
1760
|
assert_parses_margs(
|
1691
|
-
s(:mlhs, s(:
|
1692
|
-
%q{(*
|
1761
|
+
s(:mlhs, s(:restarg, :r), s(:arg, :p)),
|
1762
|
+
%q{(*r, p)})
|
1693
1763
|
|
1694
1764
|
# tSTAR
|
1695
1765
|
assert_parses_margs(
|
1696
|
-
s(:mlhs, s(:
|
1766
|
+
s(:mlhs, s(:restarg)),
|
1697
1767
|
%q{(*)})
|
1698
1768
|
|
1699
1769
|
# tSTAR tCOMMA f_marg_list
|
1700
1770
|
assert_parses_margs(
|
1701
|
-
s(:mlhs, s(:
|
1771
|
+
s(:mlhs, s(:restarg), s(:arg, :p)),
|
1702
1772
|
%q{(*, p)})
|
1703
1773
|
end
|
1704
1774
|
|
@@ -1776,39 +1846,39 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1776
1846
|
# block_par tCOMMA tSTAR
|
1777
1847
|
# f_arg tCOMMA f_rest_arg opt_f_block_arg
|
1778
1848
|
assert_parses_blockargs(
|
1779
|
-
s(:args, s(:arg, :a), s(:
|
1849
|
+
s(:args, s(:arg, :a), s(:restarg, :s), s(:blockarg, :b)),
|
1780
1850
|
%q{|a, *s, &b|})
|
1781
1851
|
|
1782
1852
|
assert_parses_blockargs(
|
1783
1853
|
s(:args, s(:arg, :a),
|
1784
|
-
s(:
|
1854
|
+
s(:restarg_expr, s(:ivasgn, :@s)),
|
1785
1855
|
s(:blockarg_expr, s(:ivasgn, :@b))),
|
1786
1856
|
%q{|a, *@s, &@b|},
|
1787
1857
|
%w(1.8))
|
1788
1858
|
|
1789
1859
|
assert_parses_blockargs(
|
1790
|
-
s(:args, s(:arg, :a), s(:
|
1860
|
+
s(:args, s(:arg, :a), s(:restarg), s(:blockarg, :b)),
|
1791
1861
|
%q{|a, *, &b|})
|
1792
1862
|
|
1793
1863
|
assert_parses_blockargs(
|
1794
1864
|
s(:args, s(:arg, :a),
|
1795
|
-
s(:
|
1865
|
+
s(:restarg),
|
1796
1866
|
s(:blockarg_expr, s(:ivasgn, :@b))),
|
1797
1867
|
%q{|a, *, &@b|},
|
1798
1868
|
%w(1.8))
|
1799
1869
|
|
1800
1870
|
assert_parses_blockargs(
|
1801
|
-
s(:args, s(:arg, :a), s(:
|
1871
|
+
s(:args, s(:arg, :a), s(:restarg, :s)),
|
1802
1872
|
%q{|a, *s|})
|
1803
1873
|
|
1804
1874
|
assert_parses_blockargs(
|
1805
1875
|
s(:args, s(:arg, :a),
|
1806
|
-
s(:
|
1876
|
+
s(:restarg_expr, s(:ivasgn, :@s))),
|
1807
1877
|
%q{|a, *@s|},
|
1808
1878
|
%w(1.8))
|
1809
1879
|
|
1810
1880
|
assert_parses_blockargs(
|
1811
|
-
s(:args, s(:arg, :a), s(:
|
1881
|
+
s(:args, s(:arg, :a), s(:restarg)),
|
1812
1882
|
%q{|a, *|})
|
1813
1883
|
|
1814
1884
|
# tSTAR lhs tCOMMA tAMPER lhs
|
@@ -1817,39 +1887,39 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1817
1887
|
# tSTAR tCOMMA tAMPER lhs
|
1818
1888
|
# f_rest_arg opt_f_block_arg
|
1819
1889
|
assert_parses_blockargs(
|
1820
|
-
s(:args, s(:
|
1890
|
+
s(:args, s(:restarg, :s), s(:blockarg, :b)),
|
1821
1891
|
%q{|*s, &b|})
|
1822
1892
|
|
1823
1893
|
assert_parses_blockargs(
|
1824
1894
|
s(:args,
|
1825
|
-
s(:
|
1895
|
+
s(:restarg_expr, s(:ivasgn, :@s)),
|
1826
1896
|
s(:blockarg_expr, s(:ivasgn, :@b))),
|
1827
1897
|
%q{|*@s, &@b|},
|
1828
1898
|
%w(1.8))
|
1829
1899
|
|
1830
1900
|
assert_parses_blockargs(
|
1831
|
-
s(:args, s(:
|
1901
|
+
s(:args, s(:restarg), s(:blockarg, :b)),
|
1832
1902
|
%q{|*, &b|})
|
1833
1903
|
|
1834
1904
|
assert_parses_blockargs(
|
1835
1905
|
s(:args,
|
1836
|
-
s(:
|
1906
|
+
s(:restarg),
|
1837
1907
|
s(:blockarg_expr, s(:ivasgn, :@b))),
|
1838
1908
|
%q{|*, &@b|},
|
1839
1909
|
%w(1.8))
|
1840
1910
|
|
1841
1911
|
assert_parses_blockargs(
|
1842
|
-
s(:args, s(:
|
1912
|
+
s(:args, s(:restarg, :s)),
|
1843
1913
|
%q{|*s|})
|
1844
1914
|
|
1845
1915
|
assert_parses_blockargs(
|
1846
1916
|
s(:args,
|
1847
|
-
s(:
|
1917
|
+
s(:restarg_expr, s(:ivasgn, :@s))),
|
1848
1918
|
%q{|*@s|},
|
1849
1919
|
%w(1.8))
|
1850
1920
|
|
1851
1921
|
assert_parses_blockargs(
|
1852
|
-
s(:args, s(:
|
1922
|
+
s(:args, s(:restarg)),
|
1853
1923
|
%q{|*|})
|
1854
1924
|
|
1855
1925
|
# tAMPER lhs
|
@@ -1870,7 +1940,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1870
1940
|
s(:arg, :a),
|
1871
1941
|
s(:optarg, :o, s(:int, 1)),
|
1872
1942
|
s(:optarg, :o1, s(:int, 2)),
|
1873
|
-
s(:
|
1943
|
+
s(:restarg, :r),
|
1874
1944
|
s(:blockarg, :b)),
|
1875
1945
|
%q{|a, o=1, o1=2, *r, &b|},
|
1876
1946
|
ALL_VERSIONS - %w(1.8))
|
@@ -1880,7 +1950,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1880
1950
|
s(:args,
|
1881
1951
|
s(:arg, :a),
|
1882
1952
|
s(:optarg, :o, s(:int, 1)),
|
1883
|
-
s(:
|
1953
|
+
s(:restarg, :r),
|
1884
1954
|
s(:arg, :p),
|
1885
1955
|
s(:blockarg, :b)),
|
1886
1956
|
%q{|a, o=1, *r, p, &b|},
|
@@ -1909,7 +1979,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1909
1979
|
assert_parses_blockargs(
|
1910
1980
|
s(:args,
|
1911
1981
|
s(:arg, :a),
|
1912
|
-
s(:
|
1982
|
+
s(:restarg, :r),
|
1913
1983
|
s(:arg, :p),
|
1914
1984
|
s(:blockarg, :b)),
|
1915
1985
|
%q{|a, *r, p, &b|},
|
@@ -1919,7 +1989,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1919
1989
|
assert_parses_blockargs(
|
1920
1990
|
s(:args,
|
1921
1991
|
s(:optarg, :o, s(:int, 1)),
|
1922
|
-
s(:
|
1992
|
+
s(:restarg, :r),
|
1923
1993
|
s(:blockarg, :b)),
|
1924
1994
|
%q{|o=1, *r, &b|},
|
1925
1995
|
ALL_VERSIONS - %w(1.8))
|
@@ -1928,7 +1998,7 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1928
1998
|
assert_parses_blockargs(
|
1929
1999
|
s(:args,
|
1930
2000
|
s(:optarg, :o, s(:int, 1)),
|
1931
|
-
s(:
|
2001
|
+
s(:restarg, :r),
|
1932
2002
|
s(:arg, :p),
|
1933
2003
|
s(:blockarg, :b)),
|
1934
2004
|
%q{|o=1, *r, p, &b|},
|
@@ -1954,13 +2024,41 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1954
2024
|
# f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1955
2025
|
assert_parses_blockargs(
|
1956
2026
|
s(:args,
|
1957
|
-
s(:
|
2027
|
+
s(:restarg, :r),
|
1958
2028
|
s(:arg, :p),
|
1959
2029
|
s(:blockarg, :b)),
|
1960
2030
|
%q{|*r, p, &b|},
|
1961
2031
|
ALL_VERSIONS - %w(1.8))
|
1962
2032
|
end
|
1963
2033
|
|
2034
|
+
def test_block_kwarg_combinations
|
2035
|
+
# f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
|
2036
|
+
assert_parses_blockargs(
|
2037
|
+
s(:args,
|
2038
|
+
s(:kwoptarg, :foo, s(:int, 1)),
|
2039
|
+
s(:kwoptarg, :bar, s(:int, 2)),
|
2040
|
+
s(:kwrestarg, :baz),
|
2041
|
+
s(:blockarg, :b)),
|
2042
|
+
%q{|foo: 1, bar: 2, **baz, &b|},
|
2043
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2044
|
+
|
2045
|
+
# f_block_kwarg opt_f_block_arg
|
2046
|
+
assert_parses_blockargs(
|
2047
|
+
s(:args,
|
2048
|
+
s(:kwoptarg, :foo, s(:int, 1)),
|
2049
|
+
s(:blockarg, :b)),
|
2050
|
+
%q{|foo: 1, &b|},
|
2051
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2052
|
+
|
2053
|
+
# f_kwrest opt_f_block_arg
|
2054
|
+
assert_parses_blockargs(
|
2055
|
+
s(:args,
|
2056
|
+
s(:kwrestarg, :baz),
|
2057
|
+
s(:blockarg, :b)),
|
2058
|
+
%q{|**baz, &b|},
|
2059
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2060
|
+
end
|
2061
|
+
|
1964
2062
|
def test_arg_invalid
|
1965
2063
|
assert_diagnoses(
|
1966
2064
|
[:error, :argument_const],
|
@@ -1983,6 +2081,20 @@ class TestParser < MiniTest::Unit::TestCase
|
|
1983
2081
|
%q{ ~~~~~ location})
|
1984
2082
|
end
|
1985
2083
|
|
2084
|
+
def test_kwarg_invalid
|
2085
|
+
assert_diagnoses(
|
2086
|
+
[:error, :argument_const],
|
2087
|
+
%q{def foo(Abc: 1); end},
|
2088
|
+
%q{ ~~~~ location},
|
2089
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2090
|
+
|
2091
|
+
assert_diagnoses(
|
2092
|
+
[:error, :argument_const],
|
2093
|
+
%q{def foo(Abc:); end},
|
2094
|
+
%q{ ~~~~ location},
|
2095
|
+
ALL_VERSIONS - %w(1.8 1.9 2.0))
|
2096
|
+
end
|
2097
|
+
|
1986
2098
|
def test_arg_label
|
1987
2099
|
assert_parses(
|
1988
2100
|
s(:def, :foo, s(:args),
|
@@ -2009,18 +2121,6 @@ class TestParser < MiniTest::Unit::TestCase
|
|
2009
2121
|
ALL_VERSIONS - %w(1.8))
|
2010
2122
|
end
|
2011
2123
|
|
2012
|
-
# def test_kwoptarg
|
2013
|
-
# flunk
|
2014
|
-
# end
|
2015
|
-
|
2016
|
-
# def test_kwsplat_named
|
2017
|
-
# flunk
|
2018
|
-
# end
|
2019
|
-
|
2020
|
-
# def test_kwsplat_unnamed
|
2021
|
-
# flunk
|
2022
|
-
# end
|
2023
|
-
|
2024
2124
|
#
|
2025
2125
|
# Sends
|
2026
2126
|
#
|
@@ -2116,6 +2216,34 @@ class TestParser < MiniTest::Unit::TestCase
|
|
2116
2216
|
|~~~~~~~~~~~~ expression})
|
2117
2217
|
end
|
2118
2218
|
|
2219
|
+
def test_send_plain_cmd_ambiguous_prefix
|
2220
|
+
assert_diagnoses(
|
2221
|
+
[:warning, :ambiguous_prefix, { :prefix => '+' }],
|
2222
|
+
%q{m +foo},
|
2223
|
+
%q{ ^ location})
|
2224
|
+
|
2225
|
+
assert_diagnoses(
|
2226
|
+
[:warning, :ambiguous_prefix, { :prefix => '-' }],
|
2227
|
+
%q{m -foo},
|
2228
|
+
%q{ ^ location})
|
2229
|
+
|
2230
|
+
assert_diagnoses(
|
2231
|
+
[:warning, :ambiguous_prefix, { :prefix => '&' }],
|
2232
|
+
%q{m &foo},
|
2233
|
+
%q{ ^ location})
|
2234
|
+
|
2235
|
+
assert_diagnoses(
|
2236
|
+
[:warning, :ambiguous_prefix, { :prefix => '*' }],
|
2237
|
+
%q{m *foo},
|
2238
|
+
%q{ ^ location})
|
2239
|
+
|
2240
|
+
assert_diagnoses(
|
2241
|
+
[:warning, :ambiguous_prefix, { :prefix => '**' }],
|
2242
|
+
%q{m **foo},
|
2243
|
+
%q{ ^^ location},
|
2244
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2245
|
+
end
|
2246
|
+
|
2119
2247
|
def test_send_block_chain_cmd
|
2120
2248
|
assert_parses(
|
2121
2249
|
s(:send,
|
@@ -2160,6 +2288,42 @@ class TestParser < MiniTest::Unit::TestCase
|
|
2160
2288
|
| ^ begin
|
2161
2289
|
| ^ end
|
2162
2290
|
|~~~~~~~~~~~~~~~~~~~~~~~ expression})
|
2291
|
+
|
2292
|
+
assert_parses(
|
2293
|
+
s(:block,
|
2294
|
+
s(:send,
|
2295
|
+
s(:block,
|
2296
|
+
s(:send, nil, :meth, s(:int, 1)),
|
2297
|
+
s(:args), s(:nil)),
|
2298
|
+
:fun, s(:lvar, :bar)),
|
2299
|
+
s(:args), s(:nil)),
|
2300
|
+
%q{meth 1 do end.fun bar do end},
|
2301
|
+
%q{},
|
2302
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2303
|
+
|
2304
|
+
assert_parses(
|
2305
|
+
s(:block,
|
2306
|
+
s(:send,
|
2307
|
+
s(:block,
|
2308
|
+
s(:send, nil, :meth, s(:int, 1)),
|
2309
|
+
s(:args), s(:nil)),
|
2310
|
+
:fun, s(:lvar, :bar)),
|
2311
|
+
s(:args), s(:nil)),
|
2312
|
+
%q{meth 1 do end.fun(bar) {}},
|
2313
|
+
%q{},
|
2314
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2315
|
+
|
2316
|
+
assert_parses(
|
2317
|
+
s(:block,
|
2318
|
+
s(:send,
|
2319
|
+
s(:block,
|
2320
|
+
s(:send, nil, :meth, s(:int, 1)),
|
2321
|
+
s(:args), s(:nil)),
|
2322
|
+
:fun),
|
2323
|
+
s(:args), s(:nil)),
|
2324
|
+
%q{meth 1 do end.fun {}},
|
2325
|
+
%q{},
|
2326
|
+
ALL_VERSIONS - %w(1.8 1.9))
|
2163
2327
|
end
|
2164
2328
|
|
2165
2329
|
def test_send_paren_block_cmd
|