ripper2ruby 0.0.1

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.
Files changed (111) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.markdown +10 -0
  3. data/lib/core_ext/array/flush.rb +5 -0
  4. data/lib/core_ext/hash/delete_at.rb +5 -0
  5. data/lib/core_ext/object/meta_class.rb +5 -0
  6. data/lib/core_ext/object/try.rb +12 -0
  7. data/lib/erb/stripper.rb +48 -0
  8. data/lib/highlighters/ansi.rb +29 -0
  9. data/lib/ripper/event_log.rb +45 -0
  10. data/lib/ripper/ruby_builder.rb +168 -0
  11. data/lib/ripper/ruby_builder/buffer.rb +34 -0
  12. data/lib/ripper/ruby_builder/events/args.rb +40 -0
  13. data/lib/ripper/ruby_builder/events/array.rb +71 -0
  14. data/lib/ripper/ruby_builder/events/assignment.rb +55 -0
  15. data/lib/ripper/ruby_builder/events/block.rb +80 -0
  16. data/lib/ripper/ruby_builder/events/call.rb +123 -0
  17. data/lib/ripper/ruby_builder/events/case.rb +17 -0
  18. data/lib/ripper/ruby_builder/events/const.rb +47 -0
  19. data/lib/ripper/ruby_builder/events/for.rb +13 -0
  20. data/lib/ripper/ruby_builder/events/hash.rb +24 -0
  21. data/lib/ripper/ruby_builder/events/identifier.rb +41 -0
  22. data/lib/ripper/ruby_builder/events/if.rb +37 -0
  23. data/lib/ripper/ruby_builder/events/lexer.rb +159 -0
  24. data/lib/ripper/ruby_builder/events/literal.rb +47 -0
  25. data/lib/ripper/ruby_builder/events/method.rb +21 -0
  26. data/lib/ripper/ruby_builder/events/operator.rb +23 -0
  27. data/lib/ripper/ruby_builder/events/statements.rb +50 -0
  28. data/lib/ripper/ruby_builder/events/string.rb +117 -0
  29. data/lib/ripper/ruby_builder/events/symbol.rb +22 -0
  30. data/lib/ripper/ruby_builder/events/while.rb +27 -0
  31. data/lib/ripper/ruby_builder/queue.rb +33 -0
  32. data/lib/ripper/ruby_builder/stack.rb +125 -0
  33. data/lib/ripper/ruby_builder/token.rb +91 -0
  34. data/lib/ripper2ruby.rb +1 -0
  35. data/lib/ruby.rb +28 -0
  36. data/lib/ruby/aggregate.rb +71 -0
  37. data/lib/ruby/alternation/args.rb +25 -0
  38. data/lib/ruby/alternation/hash.rb +25 -0
  39. data/lib/ruby/alternation/list.rb +19 -0
  40. data/lib/ruby/args.rb +36 -0
  41. data/lib/ruby/array.rb +27 -0
  42. data/lib/ruby/assignment.rb +32 -0
  43. data/lib/ruby/assoc.rb +17 -0
  44. data/lib/ruby/block.rb +42 -0
  45. data/lib/ruby/call.rb +34 -0
  46. data/lib/ruby/case.rb +30 -0
  47. data/lib/ruby/const.rb +49 -0
  48. data/lib/ruby/for.rb +18 -0
  49. data/lib/ruby/hash.rb +14 -0
  50. data/lib/ruby/if.rb +35 -0
  51. data/lib/ruby/list.rb +40 -0
  52. data/lib/ruby/literal.rb +45 -0
  53. data/lib/ruby/method.rb +19 -0
  54. data/lib/ruby/node.rb +47 -0
  55. data/lib/ruby/node/composite.rb +68 -0
  56. data/lib/ruby/node/conversions.rb +66 -0
  57. data/lib/ruby/node/position.rb +35 -0
  58. data/lib/ruby/node/source.rb +29 -0
  59. data/lib/ruby/node/text.rb +121 -0
  60. data/lib/ruby/node/traversal.rb +82 -0
  61. data/lib/ruby/operator.rb +49 -0
  62. data/lib/ruby/params.rb +41 -0
  63. data/lib/ruby/statements.rb +45 -0
  64. data/lib/ruby/string.rb +40 -0
  65. data/lib/ruby/symbol.rb +27 -0
  66. data/lib/ruby/token.rb +51 -0
  67. data/lib/ruby/while.rb +32 -0
  68. data/test/all.rb +3 -0
  69. data/test/builder/stack_test.rb +67 -0
  70. data/test/builder/text_test.rb +118 -0
  71. data/test/context_test.rb +54 -0
  72. data/test/erb_stripper_test.rb +29 -0
  73. data/test/fixtures/all.rb.src +150 -0
  74. data/test/fixtures/source_1.rb +16 -0
  75. data/test/fixtures/source_2.rb +1 -0
  76. data/test/fixtures/stuff.rb +371 -0
  77. data/test/fixtures/template.html.erb +22 -0
  78. data/test/fixtures/tmp.rb +6 -0
  79. data/test/lib_test.rb +92 -0
  80. data/test/lib_test_helper.rb +103 -0
  81. data/test/libs.txt +227 -0
  82. data/test/nodes/args_test.rb +100 -0
  83. data/test/nodes/array_test.rb +141 -0
  84. data/test/nodes/assignment_test.rb +49 -0
  85. data/test/nodes/block_test.rb +125 -0
  86. data/test/nodes/call_test.rb +229 -0
  87. data/test/nodes/case_test.rb +68 -0
  88. data/test/nodes/comments_test.rb +25 -0
  89. data/test/nodes/const_test.rb +46 -0
  90. data/test/nodes/conversions_test.rb +9 -0
  91. data/test/nodes/for_test.rb +34 -0
  92. data/test/nodes/hash_test.rb +71 -0
  93. data/test/nodes/heredoc_test.rb +202 -0
  94. data/test/nodes/identifier_test.rb +51 -0
  95. data/test/nodes/if_test.rb +100 -0
  96. data/test/nodes/literals_test.rb +63 -0
  97. data/test/nodes/method_test.rb +92 -0
  98. data/test/nodes/namespaces_test.rb +65 -0
  99. data/test/nodes/node_test.rb +74 -0
  100. data/test/nodes/nodes_test.rb +23 -0
  101. data/test/nodes/operator_test.rb +241 -0
  102. data/test/nodes/separators_test.rb +97 -0
  103. data/test/nodes/statements_test.rb +70 -0
  104. data/test/nodes/string_test.rb +92 -0
  105. data/test/nodes/symbol_test.rb +57 -0
  106. data/test/nodes/unless_test.rb +42 -0
  107. data/test/nodes/until_test.rb +61 -0
  108. data/test/nodes/while_test.rb +71 -0
  109. data/test/test_helper.rb +51 -0
  110. data/test/traversal_test.rb +53 -0
  111. metadata +163 -0
@@ -0,0 +1,57 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class SymbolTest < Test::Unit::TestCase
4
+ include TestHelper
5
+
6
+ def assert_symbol(src, value = nil, klass = Ruby::Symbol)
7
+ assert_build(src) do |node|
8
+ assert_equal klass, node.first.class
9
+ assert_equal value, node.first.value if value
10
+ end
11
+ end
12
+
13
+ define_method :"test a symbol" do
14
+ src = ':foo'
15
+ assert_symbol(src, :foo)
16
+ end
17
+
18
+ define_method :"test a symbol that is an operator" do
19
+ src = ':!'
20
+ assert_symbol(src, :!)
21
+ end
22
+
23
+ define_method :"test a symbol that is wtf" do
24
+ src = ':-@'
25
+ assert_symbol(src, :-@)
26
+ end
27
+
28
+ define_method :'test a symbol that is also a keyword' do
29
+ src = ":if"
30
+ assert_symbol(src, :if)
31
+ end
32
+
33
+ define_method :"test a symbol that is an array access operator" do
34
+ src = ':[]'
35
+ assert_symbol(src, :[])
36
+ end
37
+
38
+ define_method :"test a symbol that is an array assignment operator" do
39
+ src = ':[]='
40
+ assert_symbol(src, :[]=)
41
+ end
42
+
43
+ define_method :"test a double-quoted dyna-symbol" do
44
+ src = ':"foo.bar"'
45
+ assert_symbol(src, :'foo.bar', Ruby::DynaSymbol)
46
+ end
47
+
48
+ define_method :"test a single-quoted dyna-symbol" do
49
+ src = ":'foo.bar'"
50
+ assert_symbol(src, :'foo.bar', Ruby::DynaSymbol)
51
+ end
52
+
53
+ define_method :"test a double-quoted dyna-symbol w/ an embedded expression" do
54
+ src = ':"@#{token}"'
55
+ assert_symbol(src, nil, Ruby::DynaSymbol)
56
+ end
57
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class UnlessTest < Test::Unit::TestCase
4
+ include TestHelper
5
+
6
+ define_method :'test unless block, semicolon separated' do
7
+ src = "unless true; false end"
8
+ assert_build(src) do |node|
9
+ assert_equal Ruby::Unless, node.first.class
10
+ end
11
+ end
12
+
13
+ define_method :'test unless block, newline separated' do
14
+ src = "unless true\n false end"
15
+ assert_build(src)
16
+ end
17
+
18
+ define_method :'test unless block w/ then, not separated' do
19
+ src = "unless true then false end"
20
+ assert_build(src)
21
+ end
22
+
23
+ define_method :'test unless block w/ else block, semicolon separated' do
24
+ src = "unless true; false; else; true end"
25
+ assert_build(src)
26
+ end
27
+
28
+ define_method :'test unless block w/ else block, newline separated' do
29
+ src = "unless true\n false\n else\n true end"
30
+ assert_build(src)
31
+ end
32
+
33
+ define_method :'test unless modifier' do
34
+ src = "foo unless true"
35
+ assert_build(src)
36
+ end
37
+
38
+ define_method :'test chained unless and if modifiers' do
39
+ src = "1 unless false if true"
40
+ assert_build(src)
41
+ end
42
+ end
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ # until expression; statement; end
4
+ # begin statement end until expression
5
+ # statement until expression
6
+
7
+ class UntilTest < Test::Unit::TestCase
8
+ include TestHelper
9
+
10
+ define_method :'test until block, semicolon separated' do
11
+ src = "until true; false end"
12
+ assert_build(src) do |node|
13
+ assert_equal Ruby::Until, node.first.class
14
+ end
15
+ end
16
+
17
+ define_method :'test until block, semicolon separated (2)' do
18
+ src = "until (true); false end"
19
+ assert_build(src)
20
+ end
21
+
22
+ define_method :'test until block, semicolon separated (3)' do
23
+ src = "until (true;); false end"
24
+ assert_build(src)
25
+ end
26
+
27
+ define_method :'test until block, newline separated' do
28
+ src = "until true\n false end"
29
+ assert_build(src)
30
+ end
31
+
32
+ define_method :'test until block, newline separated (2)' do
33
+ src = "until (true)\n false end"
34
+ assert_build(src)
35
+ end
36
+
37
+ define_method :'test until with do block' do
38
+ src = "until foo do ; end"
39
+ assert_build(src)
40
+ end
41
+
42
+ define_method :'test begin do until block, semicolon separated' do
43
+ src = "begin; false; end until true"
44
+ assert_build(src)
45
+ end
46
+
47
+ define_method :'test begin do until block, newline separated' do
48
+ src = "begin\n false\n end until true"
49
+ assert_build(src)
50
+ end
51
+
52
+ define_method :'test until modifier' do
53
+ src = "foo until true"
54
+ assert_build(src)
55
+ end
56
+
57
+ define_method :'test until modifier (2)' do
58
+ src = "foo until (true)"
59
+ assert_build(src)
60
+ end
61
+ end
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ # while expression; statement; end
4
+ # begin statement end while expression
5
+ # statement while expression
6
+
7
+ class WhileTest < Test::Unit::TestCase
8
+ include TestHelper
9
+
10
+ define_method :'test while block, semicolon separated' do
11
+ src = "while true; false end"
12
+ assert_build(src) do |node|
13
+ assert_equal Ruby::While, node.first.class
14
+ end
15
+ end
16
+
17
+ define_method :'test while block, semicolon separated (2)' do
18
+ src = "while (true); false end"
19
+ assert_build(src)
20
+ end
21
+
22
+ define_method :'test while block, semicolon separated (3)' do
23
+ src = "while (true;true); false end"
24
+ assert_build(src)
25
+ end
26
+
27
+ define_method :'test while block, newline separated' do
28
+ src = "while true\n false end"
29
+ assert_build(src)
30
+ end
31
+
32
+ define_method :'test while block, newline separated (2)' do
33
+ src = "while (true)\n false end"
34
+ assert_build(src)
35
+ end
36
+
37
+ define_method :'test while with do block' do
38
+ src = "while foo do ; end"
39
+ assert_build(src)
40
+ end
41
+
42
+ define_method :'test begin do while block, semicolon separated' do
43
+ src = "begin; false; end while true"
44
+ assert_build(src)
45
+ end
46
+
47
+ define_method :'test begin do while block, semicolon separated (2)' do
48
+ src = "begin; false; end while (true)"
49
+ assert_build(src)
50
+ end
51
+
52
+ define_method :'test begin do while block, newline separated' do
53
+ src = "begin\n false\n end while true"
54
+ assert_build(src)
55
+ end
56
+
57
+ define_method :'test begin do while block, newline separated (2)' do
58
+ src = "begin\n false\n end while (true)"
59
+ assert_build(src)
60
+ end
61
+
62
+ define_method :'test while modifier' do
63
+ src = "foo while true"
64
+ assert_build(src)
65
+ end
66
+
67
+ define_method :'test while modifier (2)' do
68
+ src = "foo while (true)"
69
+ assert_build(src)
70
+ end
71
+ end
@@ -0,0 +1,51 @@
1
+ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'ripper/ruby_builder'
4
+ require 'ripper/event_log'
5
+ require 'test/unit'
6
+ require 'pp'
7
+ require 'highlighters/ansi'
8
+
9
+ module TestHelper
10
+ def build(src, filename = nil)
11
+ Ripper::RubyBuilder.build(src, filename)
12
+ end
13
+
14
+ def sexp(src)
15
+ pp Ripper::SexpBuilder.new(src).parse
16
+ end
17
+
18
+ def log(src)
19
+ Ripper::EventLog.out(src)
20
+ end
21
+
22
+ def assert_build(src)
23
+ expr = build(src)
24
+ assert_equal src, expr.to_ruby(true)
25
+ assert_equal src, expr.src(true)
26
+ # expr.all_nodes.each { |node| assert_equal Ruby::Program, node.root.class }
27
+ yield(expr) if block_given?
28
+ end
29
+
30
+ def assert_node(node, assertions)
31
+ node = node.first if node.is_a?(Array)
32
+ assertions.each do |type, value|
33
+ case type
34
+ when :is_a
35
+ assert node.is_a?(value)
36
+ when :class
37
+ assert_equal value, node.class
38
+ when :pos, :position
39
+ assert_position(value, node)
40
+ end
41
+ end
42
+ end
43
+
44
+ def assert_position(position, node)
45
+ node = node.first if node.is_a?(Array)
46
+ assert_equal position, node.position.to_a
47
+ end
48
+ end
49
+
50
+
51
+
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TraversalTest < Test::Unit::TestCase
4
+ include TestHelper
5
+
6
+ define_method :"test select by token" do
7
+ nodes = build('1 + (1 + (1 + 2))').select(:token => '1')
8
+ assert_equal 3, nodes.size
9
+ assert_equal [Ruby::Integer], nodes.map(&:class).uniq
10
+ assert_equal ['1', '1', '1'], nodes.map(&:token)
11
+ end
12
+
13
+ define_method :"test select by value" do
14
+ nodes = build('1 + (1 + (1 + 2))').select(:value => 2)
15
+ assert_equal 1, nodes.size
16
+ assert_equal [Ruby::Integer], nodes.map(&:class).uniq
17
+ assert_equal ['2'], nodes.map(&:token)
18
+ end
19
+
20
+ define_method :"test select by position" do
21
+ nodes = build('1 + (2 + (3 + 4))').select(:position => [0, 10])
22
+ assert_equal 3, nodes.size
23
+ assert_equal [Ruby::Statements, Ruby::Binary, Ruby::Integer], nodes.map(&:class)
24
+ assert_equal '3', nodes.last.token
25
+ assert_equal [0, 10], nodes.last.position.to_a
26
+ end
27
+
28
+ define_method :"test select by a single klass" do
29
+ nodes = build('1 + (2 + (3 + 4))').select(Ruby::Operator)
30
+ assert_equal 3, nodes.size
31
+ assert_equal [Ruby::Binary], nodes.map(&:class).uniq
32
+ assert_equal '+', nodes.last.operator.token
33
+ assert_equal [0, 10], nodes.last.position.to_a
34
+ end
35
+
36
+ define_method :"test select by :left_of" do
37
+ nodes = build('1 + (2 + (3 + 4))')
38
+ right = nodes.select(Ruby::Integer, :value => 3).first
39
+ nodes = nodes.select(Ruby::Integer, :left_of => right)
40
+ assert_equal 2, nodes.size
41
+ assert_equal [Ruby::Integer], nodes.map(&:class).uniq
42
+ assert_equal ['1', '2'], nodes.map(&:token)
43
+ end
44
+
45
+ define_method :"test select by :right_of" do
46
+ nodes = build('1 + (2 + (3 + 4))')
47
+ right = nodes.select(Ruby::Integer, :value => 3).first
48
+ nodes = nodes.select(Ruby::Integer, :right_of => right)
49
+ assert_equal 1, nodes.size
50
+ assert_equal [Ruby::Integer], nodes.map(&:class).uniq
51
+ assert_equal ['4'], nodes.map(&:token)
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ripper2ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sven Fuchs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-04 09:00:00 +02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Ripper2Ruby builds an object-oriented representation of Ruby code that you can modify and recompile back to Ruby.
17
+ email: svenfuchs@artweb-design.de
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/core_ext/array/flush.rb
26
+ - lib/core_ext/hash/delete_at.rb
27
+ - lib/core_ext/object/meta_class.rb
28
+ - lib/core_ext/object/try.rb
29
+ - lib/erb/stripper.rb
30
+ - lib/highlighters/ansi.rb
31
+ - lib/ripper/event_log.rb
32
+ - lib/ripper/ruby_builder.rb
33
+ - lib/ripper/ruby_builder/buffer.rb
34
+ - lib/ripper/ruby_builder/events/args.rb
35
+ - lib/ripper/ruby_builder/events/array.rb
36
+ - lib/ripper/ruby_builder/events/assignment.rb
37
+ - lib/ripper/ruby_builder/events/block.rb
38
+ - lib/ripper/ruby_builder/events/call.rb
39
+ - lib/ripper/ruby_builder/events/case.rb
40
+ - lib/ripper/ruby_builder/events/const.rb
41
+ - lib/ripper/ruby_builder/events/for.rb
42
+ - lib/ripper/ruby_builder/events/hash.rb
43
+ - lib/ripper/ruby_builder/events/identifier.rb
44
+ - lib/ripper/ruby_builder/events/if.rb
45
+ - lib/ripper/ruby_builder/events/lexer.rb
46
+ - lib/ripper/ruby_builder/events/literal.rb
47
+ - lib/ripper/ruby_builder/events/method.rb
48
+ - lib/ripper/ruby_builder/events/operator.rb
49
+ - lib/ripper/ruby_builder/events/statements.rb
50
+ - lib/ripper/ruby_builder/events/string.rb
51
+ - lib/ripper/ruby_builder/events/symbol.rb
52
+ - lib/ripper/ruby_builder/events/while.rb
53
+ - lib/ripper/ruby_builder/queue.rb
54
+ - lib/ripper/ruby_builder/stack.rb
55
+ - lib/ripper/ruby_builder/token.rb
56
+ - lib/ripper2ruby.rb
57
+ - lib/ruby.rb
58
+ - lib/ruby/aggregate.rb
59
+ - lib/ruby/alternation/args.rb
60
+ - lib/ruby/alternation/hash.rb
61
+ - lib/ruby/alternation/list.rb
62
+ - lib/ruby/args.rb
63
+ - lib/ruby/array.rb
64
+ - lib/ruby/assignment.rb
65
+ - lib/ruby/assoc.rb
66
+ - lib/ruby/block.rb
67
+ - lib/ruby/call.rb
68
+ - lib/ruby/case.rb
69
+ - lib/ruby/const.rb
70
+ - lib/ruby/for.rb
71
+ - lib/ruby/hash.rb
72
+ - lib/ruby/if.rb
73
+ - lib/ruby/list.rb
74
+ - lib/ruby/literal.rb
75
+ - lib/ruby/method.rb
76
+ - lib/ruby/node.rb
77
+ - lib/ruby/node/composite.rb
78
+ - lib/ruby/node/conversions.rb
79
+ - lib/ruby/node/position.rb
80
+ - lib/ruby/node/source.rb
81
+ - lib/ruby/node/text.rb
82
+ - lib/ruby/node/traversal.rb
83
+ - lib/ruby/operator.rb
84
+ - lib/ruby/params.rb
85
+ - lib/ruby/statements.rb
86
+ - lib/ruby/string.rb
87
+ - lib/ruby/symbol.rb
88
+ - lib/ruby/token.rb
89
+ - lib/ruby/while.rb
90
+ - MIT-LICENSE
91
+ - README.markdown
92
+ has_rdoc: false
93
+ homepage: http://github.com/svenfuchs/ripper2ruby
94
+ licenses: []
95
+
96
+ post_install_message:
97
+ rdoc_options: []
98
+
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: "0"
106
+ version:
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: "0"
112
+ version:
113
+ requirements: []
114
+
115
+ rubyforge_project:
116
+ rubygems_version: 1.3.5
117
+ signing_key:
118
+ specification_version: 2
119
+ summary: Ripper2Ruby builds an object-oriented representation of Ruby code that you can modify and recompile back to Ruby
120
+ test_files:
121
+ - test/all.rb
122
+ - test/builder/stack_test.rb
123
+ - test/builder/text_test.rb
124
+ - test/context_test.rb
125
+ - test/erb_stripper_test.rb
126
+ - test/fixtures/all.rb.src
127
+ - test/fixtures/source_1.rb
128
+ - test/fixtures/source_2.rb
129
+ - test/fixtures/stuff.rb
130
+ - test/fixtures/template.html.erb
131
+ - test/fixtures/tmp.rb
132
+ - test/libs.txt
133
+ - test/lib_test.rb
134
+ - test/lib_test_helper.rb
135
+ - test/nodes/args_test.rb
136
+ - test/nodes/array_test.rb
137
+ - test/nodes/assignment_test.rb
138
+ - test/nodes/block_test.rb
139
+ - test/nodes/call_test.rb
140
+ - test/nodes/case_test.rb
141
+ - test/nodes/comments_test.rb
142
+ - test/nodes/const_test.rb
143
+ - test/nodes/conversions_test.rb
144
+ - test/nodes/for_test.rb
145
+ - test/nodes/hash_test.rb
146
+ - test/nodes/heredoc_test.rb
147
+ - test/nodes/identifier_test.rb
148
+ - test/nodes/if_test.rb
149
+ - test/nodes/literals_test.rb
150
+ - test/nodes/method_test.rb
151
+ - test/nodes/namespaces_test.rb
152
+ - test/nodes/nodes_test.rb
153
+ - test/nodes/node_test.rb
154
+ - test/nodes/operator_test.rb
155
+ - test/nodes/separators_test.rb
156
+ - test/nodes/statements_test.rb
157
+ - test/nodes/string_test.rb
158
+ - test/nodes/symbol_test.rb
159
+ - test/nodes/unless_test.rb
160
+ - test/nodes/until_test.rb
161
+ - test/nodes/while_test.rb
162
+ - test/test_helper.rb
163
+ - test/traversal_test.rb