cucumber 0.4.4 → 0.4.5.rc1
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/.gitignore +2 -1
- data/Caliper.yml +5 -0
- data/History.txt +24 -1
- data/Rakefile +1 -1
- data/VERSION.yml +2 -2
- data/cucumber.gemspec +18 -27
- data/cucumber.yml +10 -4
- data/examples/i18n/README.textile +1 -1
- data/examples/i18n/bg/features/consecutive_calculations.feature +1 -1
- data/examples/i18n/bg/features/division.feature +1 -1
- data/examples/i18n/en-lol/Rakefile +1 -3
- data/examples/i18n/en/features/division.feature +4 -4
- data/examples/i18n/et/features/jagamine.feature +1 -1
- data/examples/i18n/fr/features/addition2.feature +17 -0
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +13 -0
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +3 -3
- data/examples/i18n/lt/features/addition.feature +2 -2
- data/examples/i18n/lt/features/division.feature +1 -1
- data/examples/i18n/zh-CN/Rakefile +1 -3
- data/examples/i18n/zh-TW/Rakefile +1 -3
- data/examples/tcl/README.textile +11 -0
- data/examples/tcl/Rakefile +6 -0
- data/examples/tcl/features/fibonnacci.feature +17 -0
- data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
- data/examples/tcl/features/support/env.rb +6 -0
- data/examples/tcl/src/fib.tcl +3 -0
- data/examples/tickets/features/177/1.feature +3 -4
- data/examples/tickets/features/177/2.feature +2 -3
- data/examples/tickets/features/241.feature +2 -3
- data/examples/tickets/features/301/filter_background_tagged_hooks.feature +1 -1
- data/features/cucumber_cli.feature +4 -2
- data/features/custom_formatter.feature +32 -31
- data/features/html_formatter/a.html +319 -102
- data/features/language_help.feature +12 -14
- data/features/support/env.rb +1 -1
- data/features/transform.feature +17 -3
- data/gem_tasks/features.rake +3 -1
- data/lib/cucumber/ast/scenario_outline.rb +1 -1
- data/lib/cucumber/ast/step_invocation.rb +2 -2
- data/lib/cucumber/cli/configuration.rb +2 -17
- data/lib/cucumber/cli/language_help_formatter.rb +1 -1
- data/lib/cucumber/cli/options.rb +5 -4
- data/lib/cucumber/formatter/cucumber.css +198 -82
- data/lib/cucumber/formatter/cucumber.sass +173 -71
- data/lib/cucumber/formatter/html.rb +371 -195
- data/lib/cucumber/formatter/io.rb +33 -0
- data/lib/cucumber/formatter/junit.rb +16 -7
- data/lib/cucumber/formatter/pdf.rb +5 -5
- data/lib/cucumber/formatter/pretty.rb +6 -8
- data/lib/cucumber/formatter/progress.rb +4 -2
- data/lib/cucumber/formatter/rerun.rb +4 -2
- data/lib/cucumber/formatter/steps.rb +2 -2
- data/lib/cucumber/formatter/tag_cloud.rb +6 -2
- data/lib/cucumber/formatter/usage.rb +2 -2
- data/lib/cucumber/languages.yml +205 -281
- data/lib/cucumber/parser/feature.rb +348 -82
- data/lib/cucumber/parser/feature.tt +47 -11
- data/lib/cucumber/parser/i18n.tt +7 -17
- data/lib/cucumber/parser/natural_language.rb +45 -18
- data/lib/cucumber/rb_support/rb_transform.rb +1 -1
- data/lib/cucumber/step_mother.rb +2 -3
- data/lib/cucumber/webrat/element_locator.rb +9 -5
- data/spec/cucumber/cli/options_spec.rb +0 -3
- data/spec/cucumber/formatter/html_spec.rb +15 -2
- data/spec/cucumber/formatter/junit_spec.rb +3 -0
- data/spec/cucumber/treetop_parser/fit_scenario.feature +2 -2
- data/spec/cucumber/treetop_parser/given_scenario.feature +1 -1
- data/spec/cucumber/treetop_parser/multiple_tables.feature +2 -2
- data/spec/cucumber/treetop_parser/test_dos.feature +1 -1
- metadata +17 -26
- data/Manifest.txt +0 -0
- data/lib/cucumber/rails/action_controller.rb +0 -38
- data/lib/cucumber/rails/active_record.rb +0 -30
- data/lib/cucumber/rails/rspec.rb +0 -10
- data/lib/cucumber/rails/test_unit.rb +0 -9
- data/lib/cucumber/rails/world.rb +0 -30
- data/rails_generators/cucumber/USAGE +0 -11
- data/rails_generators/cucumber/cucumber_generator.rb +0 -117
- data/rails_generators/cucumber/templates/cucumber +0 -17
- data/rails_generators/cucumber/templates/cucumber.rake +0 -46
- data/rails_generators/cucumber/templates/cucumber_environment.rb +0 -30
- data/rails_generators/cucumber/templates/env.rb +0 -49
- data/rails_generators/cucumber/templates/paths.rb +0 -27
- data/rails_generators/cucumber/templates/spork_env.rb +0 -57
- data/rails_generators/cucumber/templates/version_check.rb +0 -31
- data/rails_generators/cucumber/templates/webrat_steps.rb +0 -241
- data/rails_generators/feature/USAGE +0 -12
- data/rails_generators/feature/feature_generator.rb +0 -40
- data/rails_generators/feature/templates/feature.erb +0 -31
- data/rails_generators/feature/templates/steps.erb +0 -14
@@ -491,8 +491,8 @@ module Cucumber
|
|
491
491
|
steps.at_line?(line)
|
492
492
|
end
|
493
493
|
|
494
|
-
def matches_tags?(
|
495
|
-
Ast::Tags.matches?(self.parent.tags.tag_names,
|
494
|
+
def matches_tags?(tag_names)
|
495
|
+
Ast::Tags.matches?(self.parent.tags.tag_names, tag_names)
|
496
496
|
end
|
497
497
|
|
498
498
|
def build
|
@@ -687,10 +687,10 @@ module Cucumber
|
|
687
687
|
tags.at_line?(line)
|
688
688
|
end
|
689
689
|
|
690
|
-
def matches_tags?(
|
690
|
+
def matches_tags?(tag_names)
|
691
691
|
feature_tag_names = self.parent.parent.tags.tag_names
|
692
692
|
source_tag_names = (feature_tag_names + tags.tag_names).uniq
|
693
|
-
Ast::Tags.matches?(source_tag_names,
|
693
|
+
Ast::Tags.matches?(source_tag_names, tag_names)
|
694
694
|
end
|
695
695
|
|
696
696
|
def matches_name?(regexp_to_match)
|
@@ -826,10 +826,10 @@ module Cucumber
|
|
826
826
|
steps.at_line?(line)
|
827
827
|
end
|
828
828
|
|
829
|
-
def matches_tags?(
|
829
|
+
def matches_tags?(tag_names)
|
830
830
|
feature_tag_names = self.parent.parent.tags.tag_names
|
831
831
|
source_tag_names = (feature_tag_names + tags.tag_names).uniq
|
832
|
-
Ast::Tags.matches?(source_tag_names,
|
832
|
+
Ast::Tags.matches?(source_tag_names, tag_names)
|
833
833
|
end
|
834
834
|
|
835
835
|
def matches_name?(regexp_to_match)
|
@@ -968,10 +968,6 @@ module Cucumber
|
|
968
968
|
elements[2]
|
969
969
|
end
|
970
970
|
|
971
|
-
def keyword_space
|
972
|
-
elements[3]
|
973
|
-
end
|
974
|
-
|
975
971
|
def name
|
976
972
|
elements[4]
|
977
973
|
end
|
@@ -993,9 +989,9 @@ module Cucumber
|
|
993
989
|
|
994
990
|
def build
|
995
991
|
if multi.respond_to?(:build)
|
996
|
-
Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip, multi.build)
|
992
|
+
Ast::Step.new(step_keyword.line, step_keyword.text_value.strip, name.text_value.strip, multi.build)
|
997
993
|
else
|
998
|
-
Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip)
|
994
|
+
Ast::Step.new(step_keyword.line, step_keyword.text_value.strip, name.text_value.strip)
|
999
995
|
end
|
1000
996
|
end
|
1001
997
|
end
|
@@ -1027,51 +1023,60 @@ module Cucumber
|
|
1027
1023
|
r4 = _nt_step_keyword
|
1028
1024
|
s0 << r4
|
1029
1025
|
if r4
|
1030
|
-
|
1026
|
+
s5, i5 = [], index
|
1027
|
+
loop do
|
1028
|
+
r6 = _nt_space
|
1029
|
+
if r6
|
1030
|
+
s5 << r6
|
1031
|
+
else
|
1032
|
+
break
|
1033
|
+
end
|
1034
|
+
end
|
1035
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
1031
1036
|
s0 << r5
|
1032
1037
|
if r5
|
1033
|
-
|
1034
|
-
s0 <<
|
1035
|
-
if
|
1036
|
-
|
1037
|
-
|
1038
|
+
r7 = _nt_line_to_eol
|
1039
|
+
s0 << r7
|
1040
|
+
if r7
|
1041
|
+
i8 = index
|
1042
|
+
s9, i9 = [], index
|
1038
1043
|
loop do
|
1039
|
-
|
1040
|
-
if
|
1041
|
-
|
1044
|
+
r10 = _nt_eol
|
1045
|
+
if r10
|
1046
|
+
s9 << r10
|
1042
1047
|
else
|
1043
1048
|
break
|
1044
1049
|
end
|
1045
1050
|
end
|
1046
|
-
if
|
1047
|
-
@index =
|
1048
|
-
|
1051
|
+
if s9.empty?
|
1052
|
+
@index = i9
|
1053
|
+
r9 = nil
|
1049
1054
|
else
|
1050
|
-
|
1055
|
+
r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
|
1051
1056
|
end
|
1052
|
-
if
|
1053
|
-
|
1057
|
+
if r9
|
1058
|
+
r8 = r9
|
1054
1059
|
else
|
1055
|
-
|
1056
|
-
if
|
1057
|
-
|
1060
|
+
r11 = _nt_eof
|
1061
|
+
if r11
|
1062
|
+
r8 = r11
|
1058
1063
|
else
|
1059
|
-
@index =
|
1060
|
-
|
1064
|
+
@index = i8
|
1065
|
+
r8 = nil
|
1061
1066
|
end
|
1062
1067
|
end
|
1063
|
-
s0 <<
|
1064
|
-
if
|
1065
|
-
|
1066
|
-
if
|
1067
|
-
|
1068
|
+
s0 << r8
|
1069
|
+
if r8
|
1070
|
+
r13 = _nt_multiline_arg
|
1071
|
+
if r13
|
1072
|
+
r12 = r13
|
1068
1073
|
else
|
1069
|
-
|
1074
|
+
r12 = instantiate_node(SyntaxNode,input, index...index)
|
1070
1075
|
end
|
1071
|
-
s0 <<
|
1072
|
-
if
|
1073
|
-
|
1074
|
-
s0 <<
|
1076
|
+
s0 << r12
|
1077
|
+
if r12
|
1078
|
+
r14 = _nt_white
|
1079
|
+
s0 << r14
|
1075
1080
|
end
|
1076
1081
|
end
|
1077
1082
|
end
|
@@ -1168,7 +1173,7 @@ module Cucumber
|
|
1168
1173
|
table.at_line?(line)
|
1169
1174
|
end
|
1170
1175
|
|
1171
|
-
def matches_tags?(
|
1176
|
+
def matches_tags?(tag_names)
|
1172
1177
|
true
|
1173
1178
|
end
|
1174
1179
|
|
@@ -1437,16 +1442,6 @@ module Cucumber
|
|
1437
1442
|
r0
|
1438
1443
|
end
|
1439
1444
|
|
1440
|
-
module ReservedWordsAndSymbols0
|
1441
|
-
def step_keyword
|
1442
|
-
elements[0]
|
1443
|
-
end
|
1444
|
-
|
1445
|
-
def keyword_space
|
1446
|
-
elements[1]
|
1447
|
-
end
|
1448
|
-
end
|
1449
|
-
|
1450
1445
|
def _nt_reserved_words_and_symbols
|
1451
1446
|
start_index = index
|
1452
1447
|
if node_cache[:reserved_words_and_symbols].has_key?(index)
|
@@ -1456,42 +1451,29 @@ module Cucumber
|
|
1456
1451
|
end
|
1457
1452
|
|
1458
1453
|
i0 = index
|
1459
|
-
|
1460
|
-
r2 = _nt_step_keyword
|
1461
|
-
s1 << r2
|
1462
|
-
if r2
|
1463
|
-
r3 = _nt_keyword_space
|
1464
|
-
s1 << r3
|
1465
|
-
end
|
1466
|
-
if s1.last
|
1467
|
-
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
|
1468
|
-
r1.extend(ReservedWordsAndSymbols0)
|
1469
|
-
else
|
1470
|
-
@index = i1
|
1471
|
-
r1 = nil
|
1472
|
-
end
|
1454
|
+
r1 = _nt_step_keyword
|
1473
1455
|
if r1
|
1474
1456
|
r0 = r1
|
1475
1457
|
else
|
1476
|
-
|
1477
|
-
if
|
1478
|
-
r0 =
|
1458
|
+
r2 = _nt_scenario_keyword
|
1459
|
+
if r2
|
1460
|
+
r0 = r2
|
1479
1461
|
else
|
1480
|
-
|
1481
|
-
if
|
1482
|
-
r0 =
|
1462
|
+
r3 = _nt_scenario_outline_keyword
|
1463
|
+
if r3
|
1464
|
+
r0 = r3
|
1483
1465
|
else
|
1484
|
-
|
1485
|
-
if
|
1486
|
-
r0 =
|
1466
|
+
r4 = _nt_table
|
1467
|
+
if r4
|
1468
|
+
r0 = r4
|
1487
1469
|
else
|
1488
|
-
|
1489
|
-
if
|
1490
|
-
r0 =
|
1470
|
+
r5 = _nt_tag
|
1471
|
+
if r5
|
1472
|
+
r0 = r5
|
1491
1473
|
else
|
1492
|
-
|
1493
|
-
if
|
1494
|
-
r0 =
|
1474
|
+
r6 = _nt_comment_line
|
1475
|
+
if r6
|
1476
|
+
r0 = r6
|
1495
1477
|
else
|
1496
1478
|
@index = i0
|
1497
1479
|
r0 = nil
|
@@ -1507,6 +1489,290 @@ module Cucumber
|
|
1507
1489
|
r0
|
1508
1490
|
end
|
1509
1491
|
|
1492
|
+
module PyString0
|
1493
|
+
end
|
1494
|
+
|
1495
|
+
module PyString1
|
1496
|
+
def open_py_string
|
1497
|
+
elements[0]
|
1498
|
+
end
|
1499
|
+
|
1500
|
+
def s
|
1501
|
+
elements[1]
|
1502
|
+
end
|
1503
|
+
|
1504
|
+
def close_py_string
|
1505
|
+
elements[2]
|
1506
|
+
end
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
module PyString2
|
1510
|
+
def at_line?(line)
|
1511
|
+
line >= open_py_string.line && line <= close_py_string.line
|
1512
|
+
end
|
1513
|
+
|
1514
|
+
def build
|
1515
|
+
Ast::PyString.new(open_py_string.line, close_py_string.line, s.text_value, open_py_string.indentation)
|
1516
|
+
end
|
1517
|
+
end
|
1518
|
+
|
1519
|
+
def _nt_py_string
|
1520
|
+
start_index = index
|
1521
|
+
if node_cache[:py_string].has_key?(index)
|
1522
|
+
cached = node_cache[:py_string][index]
|
1523
|
+
@index = cached.interval.end if cached
|
1524
|
+
return cached
|
1525
|
+
end
|
1526
|
+
|
1527
|
+
i0, s0 = index, []
|
1528
|
+
r1 = _nt_open_py_string
|
1529
|
+
s0 << r1
|
1530
|
+
if r1
|
1531
|
+
s2, i2 = [], index
|
1532
|
+
loop do
|
1533
|
+
i3, s3 = index, []
|
1534
|
+
i4 = index
|
1535
|
+
r5 = _nt_close_py_string
|
1536
|
+
if r5
|
1537
|
+
r4 = nil
|
1538
|
+
else
|
1539
|
+
@index = i4
|
1540
|
+
r4 = instantiate_node(SyntaxNode,input, index...index)
|
1541
|
+
end
|
1542
|
+
s3 << r4
|
1543
|
+
if r4
|
1544
|
+
if index < input_length
|
1545
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1546
|
+
@index += 1
|
1547
|
+
else
|
1548
|
+
terminal_parse_failure("any character")
|
1549
|
+
r6 = nil
|
1550
|
+
end
|
1551
|
+
s3 << r6
|
1552
|
+
end
|
1553
|
+
if s3.last
|
1554
|
+
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
|
1555
|
+
r3.extend(PyString0)
|
1556
|
+
else
|
1557
|
+
@index = i3
|
1558
|
+
r3 = nil
|
1559
|
+
end
|
1560
|
+
if r3
|
1561
|
+
s2 << r3
|
1562
|
+
else
|
1563
|
+
break
|
1564
|
+
end
|
1565
|
+
end
|
1566
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
1567
|
+
s0 << r2
|
1568
|
+
if r2
|
1569
|
+
r7 = _nt_close_py_string
|
1570
|
+
s0 << r7
|
1571
|
+
end
|
1572
|
+
end
|
1573
|
+
if s0.last
|
1574
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1575
|
+
r0.extend(PyString1)
|
1576
|
+
r0.extend(PyString2)
|
1577
|
+
else
|
1578
|
+
@index = i0
|
1579
|
+
r0 = nil
|
1580
|
+
end
|
1581
|
+
|
1582
|
+
node_cache[:py_string][start_index] = r0
|
1583
|
+
|
1584
|
+
r0
|
1585
|
+
end
|
1586
|
+
|
1587
|
+
module OpenPyString0
|
1588
|
+
def indent
|
1589
|
+
elements[0]
|
1590
|
+
end
|
1591
|
+
|
1592
|
+
def eol
|
1593
|
+
elements[3]
|
1594
|
+
end
|
1595
|
+
end
|
1596
|
+
|
1597
|
+
module OpenPyString1
|
1598
|
+
def indentation
|
1599
|
+
indent.text_value.length
|
1600
|
+
end
|
1601
|
+
|
1602
|
+
def line
|
1603
|
+
indent.line
|
1604
|
+
end
|
1605
|
+
end
|
1606
|
+
|
1607
|
+
def _nt_open_py_string
|
1608
|
+
start_index = index
|
1609
|
+
if node_cache[:open_py_string].has_key?(index)
|
1610
|
+
cached = node_cache[:open_py_string][index]
|
1611
|
+
@index = cached.interval.end if cached
|
1612
|
+
return cached
|
1613
|
+
end
|
1614
|
+
|
1615
|
+
i0, s0 = index, []
|
1616
|
+
s1, i1 = [], index
|
1617
|
+
loop do
|
1618
|
+
r2 = _nt_space
|
1619
|
+
if r2
|
1620
|
+
s1 << r2
|
1621
|
+
else
|
1622
|
+
break
|
1623
|
+
end
|
1624
|
+
end
|
1625
|
+
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
|
1626
|
+
s0 << r1
|
1627
|
+
if r1
|
1628
|
+
if has_terminal?('"""', false, index)
|
1629
|
+
r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
|
1630
|
+
@index += 3
|
1631
|
+
else
|
1632
|
+
terminal_parse_failure('"""')
|
1633
|
+
r3 = nil
|
1634
|
+
end
|
1635
|
+
s0 << r3
|
1636
|
+
if r3
|
1637
|
+
s4, i4 = [], index
|
1638
|
+
loop do
|
1639
|
+
r5 = _nt_space
|
1640
|
+
if r5
|
1641
|
+
s4 << r5
|
1642
|
+
else
|
1643
|
+
break
|
1644
|
+
end
|
1645
|
+
end
|
1646
|
+
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
|
1647
|
+
s0 << r4
|
1648
|
+
if r4
|
1649
|
+
r6 = _nt_eol
|
1650
|
+
s0 << r6
|
1651
|
+
end
|
1652
|
+
end
|
1653
|
+
end
|
1654
|
+
if s0.last
|
1655
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1656
|
+
r0.extend(OpenPyString0)
|
1657
|
+
r0.extend(OpenPyString1)
|
1658
|
+
else
|
1659
|
+
@index = i0
|
1660
|
+
r0 = nil
|
1661
|
+
end
|
1662
|
+
|
1663
|
+
node_cache[:open_py_string][start_index] = r0
|
1664
|
+
|
1665
|
+
r0
|
1666
|
+
end
|
1667
|
+
|
1668
|
+
module ClosePyString0
|
1669
|
+
def eol
|
1670
|
+
elements[0]
|
1671
|
+
end
|
1672
|
+
|
1673
|
+
def quotes
|
1674
|
+
elements[2]
|
1675
|
+
end
|
1676
|
+
|
1677
|
+
def white
|
1678
|
+
elements[3]
|
1679
|
+
end
|
1680
|
+
end
|
1681
|
+
|
1682
|
+
module ClosePyString1
|
1683
|
+
def line
|
1684
|
+
quotes.line
|
1685
|
+
end
|
1686
|
+
end
|
1687
|
+
|
1688
|
+
def _nt_close_py_string
|
1689
|
+
start_index = index
|
1690
|
+
if node_cache[:close_py_string].has_key?(index)
|
1691
|
+
cached = node_cache[:close_py_string][index]
|
1692
|
+
@index = cached.interval.end if cached
|
1693
|
+
return cached
|
1694
|
+
end
|
1695
|
+
|
1696
|
+
i0, s0 = index, []
|
1697
|
+
r1 = _nt_eol
|
1698
|
+
s0 << r1
|
1699
|
+
if r1
|
1700
|
+
s2, i2 = [], index
|
1701
|
+
loop do
|
1702
|
+
r3 = _nt_space
|
1703
|
+
if r3
|
1704
|
+
s2 << r3
|
1705
|
+
else
|
1706
|
+
break
|
1707
|
+
end
|
1708
|
+
end
|
1709
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
1710
|
+
s0 << r2
|
1711
|
+
if r2
|
1712
|
+
if has_terminal?('"""', false, index)
|
1713
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
|
1714
|
+
@index += 3
|
1715
|
+
else
|
1716
|
+
terminal_parse_failure('"""')
|
1717
|
+
r4 = nil
|
1718
|
+
end
|
1719
|
+
s0 << r4
|
1720
|
+
if r4
|
1721
|
+
r5 = _nt_white
|
1722
|
+
s0 << r5
|
1723
|
+
end
|
1724
|
+
end
|
1725
|
+
end
|
1726
|
+
if s0.last
|
1727
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1728
|
+
r0.extend(ClosePyString0)
|
1729
|
+
r0.extend(ClosePyString1)
|
1730
|
+
else
|
1731
|
+
@index = i0
|
1732
|
+
r0 = nil
|
1733
|
+
end
|
1734
|
+
|
1735
|
+
node_cache[:close_py_string][start_index] = r0
|
1736
|
+
|
1737
|
+
r0
|
1738
|
+
end
|
1739
|
+
|
1740
|
+
def _nt_white
|
1741
|
+
start_index = index
|
1742
|
+
if node_cache[:white].has_key?(index)
|
1743
|
+
cached = node_cache[:white][index]
|
1744
|
+
@index = cached.interval.end if cached
|
1745
|
+
return cached
|
1746
|
+
end
|
1747
|
+
|
1748
|
+
s0, i0 = [], index
|
1749
|
+
loop do
|
1750
|
+
i1 = index
|
1751
|
+
r2 = _nt_space
|
1752
|
+
if r2
|
1753
|
+
r1 = r2
|
1754
|
+
else
|
1755
|
+
r3 = _nt_eol
|
1756
|
+
if r3
|
1757
|
+
r1 = r3
|
1758
|
+
else
|
1759
|
+
@index = i1
|
1760
|
+
r1 = nil
|
1761
|
+
end
|
1762
|
+
end
|
1763
|
+
if r1
|
1764
|
+
s0 << r1
|
1765
|
+
else
|
1766
|
+
break
|
1767
|
+
end
|
1768
|
+
end
|
1769
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1770
|
+
|
1771
|
+
node_cache[:white][start_index] = r0
|
1772
|
+
|
1773
|
+
r0
|
1774
|
+
end
|
1775
|
+
|
1510
1776
|
end
|
1511
1777
|
|
1512
1778
|
class FeatureParser < Treetop::Runtime::CompiledParser
|