parser 2.7.1.1 → 3.0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/lib/parser.rb +1 -0
  3. data/lib/parser/all.rb +2 -0
  4. data/lib/parser/ast/processor.rb +5 -0
  5. data/lib/parser/base.rb +7 -5
  6. data/lib/parser/builders/default.rb +263 -23
  7. data/lib/parser/context.rb +5 -0
  8. data/lib/parser/current.rb +24 -6
  9. data/lib/parser/current_arg_stack.rb +5 -2
  10. data/lib/parser/diagnostic.rb +1 -1
  11. data/lib/parser/diagnostic/engine.rb +1 -2
  12. data/lib/parser/lexer.rb +887 -803
  13. data/lib/parser/macruby.rb +2214 -2189
  14. data/lib/parser/max_numparam_stack.rb +13 -5
  15. data/lib/parser/messages.rb +18 -0
  16. data/lib/parser/meta.rb +6 -5
  17. data/lib/parser/ruby18.rb +9 -3
  18. data/lib/parser/ruby19.rb +2297 -2289
  19. data/lib/parser/ruby20.rb +2413 -2397
  20. data/lib/parser/ruby21.rb +2419 -2411
  21. data/lib/parser/ruby22.rb +2468 -2460
  22. data/lib/parser/ruby23.rb +2452 -2452
  23. data/lib/parser/ruby24.rb +2435 -2430
  24. data/lib/parser/ruby25.rb +2220 -2214
  25. data/lib/parser/ruby26.rb +2220 -2214
  26. data/lib/parser/ruby27.rb +3715 -3615
  27. data/lib/parser/ruby28.rb +8047 -0
  28. data/lib/parser/ruby30.rb +8060 -0
  29. data/lib/parser/ruby31.rb +8226 -0
  30. data/lib/parser/rubymotion.rb +2190 -2182
  31. data/lib/parser/runner.rb +31 -2
  32. data/lib/parser/runner/ruby_rewrite.rb +2 -2
  33. data/lib/parser/source/buffer.rb +53 -28
  34. data/lib/parser/source/comment.rb +14 -1
  35. data/lib/parser/source/comment/associator.rb +31 -8
  36. data/lib/parser/source/map/method_definition.rb +25 -0
  37. data/lib/parser/source/range.rb +10 -3
  38. data/lib/parser/source/tree_rewriter.rb +100 -10
  39. data/lib/parser/source/tree_rewriter/action.rb +114 -21
  40. data/lib/parser/static_environment.rb +4 -0
  41. data/lib/parser/tree_rewriter.rb +1 -2
  42. data/lib/parser/variables_stack.rb +4 -0
  43. data/lib/parser/version.rb +1 -1
  44. data/parser.gemspec +3 -18
  45. metadata +17 -98
  46. data/.gitignore +0 -33
  47. data/.travis.yml +0 -42
  48. data/.yardopts +0 -21
  49. data/CHANGELOG.md +0 -1075
  50. data/CONTRIBUTING.md +0 -17
  51. data/Gemfile +0 -10
  52. data/README.md +0 -309
  53. data/Rakefile +0 -166
  54. data/ci/run_rubocop_specs +0 -14
  55. data/doc/AST_FORMAT.md +0 -2180
  56. data/doc/CUSTOMIZATION.md +0 -37
  57. data/doc/INTERNALS.md +0 -21
  58. data/doc/css/.gitkeep +0 -0
  59. data/doc/css/common.css +0 -68
  60. data/lib/parser/lexer.rl +0 -2536
  61. data/lib/parser/macruby.y +0 -2198
  62. data/lib/parser/ruby18.y +0 -1934
  63. data/lib/parser/ruby19.y +0 -2175
  64. data/lib/parser/ruby20.y +0 -2353
  65. data/lib/parser/ruby21.y +0 -2357
  66. data/lib/parser/ruby22.y +0 -2364
  67. data/lib/parser/ruby23.y +0 -2370
  68. data/lib/parser/ruby24.y +0 -2408
  69. data/lib/parser/ruby25.y +0 -2405
  70. data/lib/parser/ruby26.y +0 -2413
  71. data/lib/parser/ruby27.y +0 -2941
  72. data/lib/parser/rubymotion.y +0 -2182
  73. data/test/bug_163/fixtures/input.rb +0 -5
  74. data/test/bug_163/fixtures/output.rb +0 -5
  75. data/test/bug_163/rewriter.rb +0 -20
  76. data/test/helper.rb +0 -60
  77. data/test/parse_helper.rb +0 -319
  78. data/test/racc_coverage_helper.rb +0 -133
  79. data/test/test_base.rb +0 -31
  80. data/test/test_current.rb +0 -29
  81. data/test/test_diagnostic.rb +0 -96
  82. data/test/test_diagnostic_engine.rb +0 -62
  83. data/test/test_encoding.rb +0 -99
  84. data/test/test_lexer.rb +0 -3608
  85. data/test/test_lexer_stack_state.rb +0 -78
  86. data/test/test_parse_helper.rb +0 -80
  87. data/test/test_parser.rb +0 -9430
  88. data/test/test_runner_parse.rb +0 -35
  89. data/test/test_runner_rewrite.rb +0 -47
  90. data/test/test_source_buffer.rb +0 -162
  91. data/test/test_source_comment.rb +0 -36
  92. data/test/test_source_comment_associator.rb +0 -367
  93. data/test/test_source_map.rb +0 -15
  94. data/test/test_source_range.rb +0 -187
  95. data/test/test_source_rewriter.rb +0 -541
  96. data/test/test_source_rewriter_action.rb +0 -46
  97. data/test/test_source_tree_rewriter.rb +0 -253
  98. data/test/test_static_environment.rb +0 -45
  99. data/test/using_tree_rewriter/fixtures/input.rb +0 -3
  100. data/test/using_tree_rewriter/fixtures/output.rb +0 -3
  101. data/test/using_tree_rewriter/using_tree_rewriter.rb +0 -9
@@ -7,7 +7,7 @@ module Parser
7
7
  #
8
8
  # Actions are arranged in a tree and get combined so that:
9
9
  # children are strictly contained by their parent
10
- # sibblings all disjoint from one another
10
+ # sibblings all disjoint from one another and ordered
11
11
  # only actions with replacement==nil may have children
12
12
  #
13
13
  class TreeRewriter::Action
@@ -41,15 +41,54 @@ module Parser
41
41
  reps = []
42
42
  reps << [@range.begin, @insert_before] unless @insert_before.empty?
43
43
  reps << [@range, @replacement] if @replacement
44
- reps.concat(@children.sort_by(&:range).flat_map(&:ordered_replacements))
44
+ reps.concat(@children.flat_map(&:ordered_replacements))
45
45
  reps << [@range.end, @insert_after] unless @insert_after.empty?
46
46
  reps
47
47
  end
48
48
 
49
+ def nested_actions
50
+ actions = []
51
+ actions << [:wrap, @range, @insert_before, @insert_after] if !@insert_before.empty? ||
52
+ !@insert_after.empty?
53
+ actions << [:replace, @range, @replacement] if @replacement
54
+ actions.concat(@children.flat_map(&:nested_actions))
55
+ end
56
+
49
57
  def insertion?
50
58
  !insert_before.empty? || !insert_after.empty? || (replacement && !replacement.empty?)
51
59
  end
52
60
 
61
+ ##
62
+ # A root action has its range set to the whole source range, even
63
+ # though it typically do not act on that range.
64
+ # This method returns the action as if it was a child action with
65
+ # its range contracted.
66
+ # @return [Action]
67
+ def contract
68
+ raise 'Empty actions can not be contracted' if empty?
69
+ return self if insertion?
70
+ range = @range.with(
71
+ begin_pos: children.first.range.begin_pos,
72
+ end_pos: children.last.range.end_pos,
73
+ )
74
+ with(range: range)
75
+ end
76
+
77
+ ##
78
+ # @return [Action] that has been moved to the given source_buffer and with the given offset
79
+ # No check is done on validity of resulting range.
80
+ def moved(source_buffer, offset)
81
+ moved_range = ::Parser::Source::Range.new(
82
+ source_buffer,
83
+ @range.begin_pos + offset,
84
+ @range.end_pos + offset
85
+ )
86
+ with(
87
+ range: moved_range,
88
+ children: children.map { |child| child.moved(source_buffer, offset) }
89
+ )
90
+ end
91
+
53
92
  protected
54
93
 
55
94
  attr_reader :children
@@ -69,24 +108,24 @@ module Parser
69
108
  end
70
109
 
71
110
  def place_in_hierarchy(action)
72
- family = @children.group_by { |child| child.relationship_with(action) }
111
+ family = analyse_hierarchy(action)
73
112
 
74
113
  if family[:fusible]
75
- fuse_deletions(action, family[:fusible], [*family[:sibbling], *family[:child]])
114
+ fuse_deletions(action, family[:fusible], [*family[:sibbling_left], *family[:child], *family[:sibbling_right]])
76
115
  else
77
116
  extra_sibbling = if family[:parent] # action should be a descendant of one of the children
78
- family[:parent][0].do_combine(action)
117
+ family[:parent].do_combine(action)
79
118
  elsif family[:child] # or it should become the parent of some of the children,
80
119
  action.with(children: family[:child], enforcer: @enforcer)
81
120
  .combine_children(action.children)
82
121
  else # or else it should become an additional child
83
122
  action
84
123
  end
85
- with(children: [*family[:sibbling], extra_sibbling])
124
+ with(children: [*family[:sibbling_left], extra_sibbling, *family[:sibbling_right]])
86
125
  end
87
126
  end
88
127
 
89
- # Assumes more_children all contained within @range
128
+ # Assumes `more_children` all contained within `@range`
90
129
  def combine_children(more_children)
91
130
  more_children.inject(self) do |parent, new_child|
92
131
  parent.place_in_hierarchy(new_child)
@@ -100,22 +139,76 @@ module Parser
100
139
  without_fusible.do_combine(fused_deletion)
101
140
  end
102
141
 
103
- # Returns what relationship self should have with `action`; either of
104
- # :sibbling, :parent, :child, :fusible or raises a CloberingError
105
- # In case of equal range, returns :parent
106
- def relationship_with(action)
107
- if action.range == @range || @range.contains?(action.range)
108
- :parent
109
- elsif @range.contained?(action.range)
110
- :child
111
- elsif @range.disjoint?(action.range)
112
- :sibbling
113
- elsif !action.insertion? && !insertion?
114
- @enforcer.call(:crossing_deletions) { {range: action.range, conflict: @range} }
115
- :fusible
142
+ # Similar to @children.bsearch_index || size
143
+ # except allows for a starting point
144
+ # and `bsearch_index` is only Ruby 2.3+
145
+ def bsearch_child_index(from = 0)
146
+ size = @children.size
147
+ (from...size).bsearch { |i| yield @children[i] } || size
148
+ end
149
+
150
+ # Returns the children in a hierarchy with respect to `action`:
151
+ # :sibbling_left, sibbling_right (for those that are disjoint from `action`)
152
+ # :parent (in case one of our children contains `action`)
153
+ # :child (in case `action` strictly contains some of our children)
154
+ # :fusible (in case `action` overlaps some children but they can be fused in one deletion)
155
+ # or raises a `CloberingError`
156
+ # In case a child has equal range to `action`, it is returned as `:parent`
157
+ # Reminder: an empty range 1...1 is considered disjoint from 1...10
158
+ def analyse_hierarchy(action)
159
+ r = action.range
160
+ # left_index is the index of the first child that isn't completely to the left of action
161
+ left_index = bsearch_child_index { |child| child.range.end_pos > r.begin_pos }
162
+ # right_index is the index of the first child that is completely on the right of action
163
+ start = left_index == 0 ? 0 : left_index - 1 # See "corner case" below for reason of -1
164
+ right_index = bsearch_child_index(start) { |child| child.range.begin_pos >= r.end_pos }
165
+ center = right_index - left_index
166
+ case center
167
+ when 0
168
+ # All children are disjoint from action, nothing else to do
169
+ when -1
170
+ # Corner case: if a child has empty range == action's range
171
+ # then it will appear to be both disjoint and to the left of action,
172
+ # as well as disjoint and to the right of action.
173
+ # Since ranges are equal, we return it as parent
174
+ left_index -= 1 # Fix indices, as otherwise this child would be
175
+ right_index += 1 # considered as a sibbling (both left and right!)
176
+ parent = @children[left_index]
116
177
  else
117
- @enforcer.call(:crossing_insertions) { {range: action.range, conflict: @range} }
178
+ overlap_left = @children[left_index].range.begin_pos <=> r.begin_pos
179
+ overlap_right = @children[right_index-1].range.end_pos <=> r.end_pos
180
+
181
+ # For one child to be the parent of action, we must have:
182
+ if center == 1 && overlap_left <= 0 && overlap_right >= 0
183
+ parent = @children[left_index]
184
+ else
185
+ # Otherwise consider all non disjoint elements (center) to be contained...
186
+ contained = @children[left_index...right_index]
187
+ fusible = check_fusible(action,
188
+ (contained.shift if overlap_left < 0), # ... but check first and last one
189
+ (contained.pop if overlap_right > 0) # ... for overlaps
190
+ )
191
+ end
192
+ end
193
+
194
+ {
195
+ parent: parent,
196
+ sibbling_left: @children[0...left_index],
197
+ sibbling_right: @children[right_index...@children.size],
198
+ fusible: fusible,
199
+ child: contained,
200
+ }
201
+ end
202
+
203
+ # @param [Array(Action | nil)] fusible
204
+ def check_fusible(action, *fusible)
205
+ fusible.compact!
206
+ return if fusible.empty?
207
+ fusible.each do |child|
208
+ kind = action.insertion? || child.insertion? ? :crossing_insertions : :crossing_deletions
209
+ @enforcer.call(kind) { {range: action.range, conflict: child.range} }
118
210
  end
211
+ fusible
119
212
  end
120
213
 
121
214
  # Assumes action.range == range && action.children.empty?
@@ -51,6 +51,10 @@ module Parser
51
51
  def declared_forward_args?
52
52
  declared?(FORWARD_ARGS)
53
53
  end
54
+
55
+ def empty?
56
+ @stack.empty?
57
+ end
54
58
  end
55
59
 
56
60
  end
@@ -28,8 +28,7 @@ module Parser
28
28
  # EOF
29
29
  #
30
30
  # ast = Parser::CurrentRuby.parse code
31
- # buffer = Parser::Source::Buffer.new('(example)')
32
- # buffer.source = code
31
+ # buffer = Parser::Source::Buffer.new('(example)', source: code)
33
32
  # rewriter = RemoveDo.new
34
33
  #
35
34
  # # Rewrite the AST, returns a String with the new form.
@@ -8,6 +8,10 @@ module Parser
8
8
  push
9
9
  end
10
10
 
11
+ def empty?
12
+ @stack.empty?
13
+ end
14
+
11
15
  def push
12
16
  @stack << Set.new
13
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parser
4
- VERSION = '2.7.1.1'
4
+ VERSION = '3.0.2.0'
5
5
  end
data/parser.gemspec CHANGED
@@ -20,31 +20,16 @@ Gem::Specification.new do |spec|
20
20
  'source_code_uri' => "https://github.com/whitequark/parser/tree/v#{spec.version}"
21
21
  }
22
22
 
23
- spec.files = `git ls-files`.split + %w(
24
- lib/parser/lexer.rb
25
- lib/parser/ruby18.rb
26
- lib/parser/ruby19.rb
27
- lib/parser/ruby20.rb
28
- lib/parser/ruby21.rb
29
- lib/parser/ruby22.rb
30
- lib/parser/ruby23.rb
31
- lib/parser/ruby24.rb
32
- lib/parser/ruby25.rb
33
- lib/parser/ruby26.rb
34
- lib/parser/ruby27.rb
35
- lib/parser/macruby.rb
36
- lib/parser/rubymotion.rb
37
- )
23
+ spec.files = Dir['bin/*', 'lib/**/*.rb', 'parser.gemspec', 'LICENSE.txt']
38
24
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
39
- spec.test_files = spec.files.grep(%r{^test/})
40
25
  spec.require_paths = ['lib']
41
26
 
42
27
  spec.required_ruby_version = '>= 2.0.0'
43
28
 
44
- spec.add_dependency 'ast', '~> 2.4.0'
29
+ spec.add_dependency 'ast', '~> 2.4.1'
45
30
 
46
31
  spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0'
47
- spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'rake', '~> 13.0.1'
48
33
  spec.add_development_dependency 'racc', '= 1.4.15'
49
34
  spec.add_development_dependency 'cliver', '~> 0.3.2'
50
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.1.1
4
+ version: 3.0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - whitequark
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-14 00:00:00.000000000 Z
11
+ date: 2021-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.0
19
+ version: 2.4.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.4.0
26
+ version: 2.4.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '10.0'
53
+ version: 13.0.1
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '10.0'
60
+ version: 13.0.1
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: racc
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -165,23 +165,9 @@ executables:
165
165
  extensions: []
166
166
  extra_rdoc_files: []
167
167
  files:
168
- - ".gitignore"
169
- - ".travis.yml"
170
- - ".yardopts"
171
- - CHANGELOG.md
172
- - CONTRIBUTING.md
173
- - Gemfile
174
168
  - LICENSE.txt
175
- - README.md
176
- - Rakefile
177
169
  - bin/ruby-parse
178
170
  - bin/ruby-rewrite
179
- - ci/run_rubocop_specs
180
- - doc/AST_FORMAT.md
181
- - doc/CUSTOMIZATION.md
182
- - doc/INTERNALS.md
183
- - doc/css/.gitkeep
184
- - doc/css/common.css
185
171
  - lib/gauntlet_parser.rb
186
172
  - lib/parser.rb
187
173
  - lib/parser/all.rb
@@ -198,39 +184,29 @@ files:
198
184
  - lib/parser/diagnostic.rb
199
185
  - lib/parser/diagnostic/engine.rb
200
186
  - lib/parser/lexer.rb
201
- - lib/parser/lexer.rl
202
187
  - lib/parser/lexer/dedenter.rb
203
188
  - lib/parser/lexer/explanation.rb
204
189
  - lib/parser/lexer/literal.rb
205
190
  - lib/parser/lexer/stack_state.rb
206
191
  - lib/parser/macruby.rb
207
- - lib/parser/macruby.y
208
192
  - lib/parser/max_numparam_stack.rb
209
193
  - lib/parser/messages.rb
210
194
  - lib/parser/meta.rb
211
195
  - lib/parser/rewriter.rb
212
196
  - lib/parser/ruby18.rb
213
- - lib/parser/ruby18.y
214
197
  - lib/parser/ruby19.rb
215
- - lib/parser/ruby19.y
216
198
  - lib/parser/ruby20.rb
217
- - lib/parser/ruby20.y
218
199
  - lib/parser/ruby21.rb
219
- - lib/parser/ruby21.y
220
200
  - lib/parser/ruby22.rb
221
- - lib/parser/ruby22.y
222
201
  - lib/parser/ruby23.rb
223
- - lib/parser/ruby23.y
224
202
  - lib/parser/ruby24.rb
225
- - lib/parser/ruby24.y
226
203
  - lib/parser/ruby25.rb
227
- - lib/parser/ruby25.y
228
204
  - lib/parser/ruby26.rb
229
- - lib/parser/ruby26.y
230
205
  - lib/parser/ruby27.rb
231
- - lib/parser/ruby27.y
206
+ - lib/parser/ruby28.rb
207
+ - lib/parser/ruby30.rb
208
+ - lib/parser/ruby31.rb
232
209
  - lib/parser/rubymotion.rb
233
- - lib/parser/rubymotion.y
234
210
  - lib/parser/runner.rb
235
211
  - lib/parser/runner/ruby_parse.rb
236
212
  - lib/parser/runner/ruby_rewrite.rb
@@ -246,6 +222,7 @@ files:
246
222
  - lib/parser/source/map/heredoc.rb
247
223
  - lib/parser/source/map/index.rb
248
224
  - lib/parser/source/map/keyword.rb
225
+ - lib/parser/source/map/method_definition.rb
249
226
  - lib/parser/source/map/objc_kwarg.rb
250
227
  - lib/parser/source/map/operator.rb
251
228
  - lib/parser/source/map/rescue_body.rb
@@ -263,44 +240,15 @@ files:
263
240
  - lib/parser/variables_stack.rb
264
241
  - lib/parser/version.rb
265
242
  - parser.gemspec
266
- - test/bug_163/fixtures/input.rb
267
- - test/bug_163/fixtures/output.rb
268
- - test/bug_163/rewriter.rb
269
- - test/helper.rb
270
- - test/parse_helper.rb
271
- - test/racc_coverage_helper.rb
272
- - test/test_base.rb
273
- - test/test_current.rb
274
- - test/test_diagnostic.rb
275
- - test/test_diagnostic_engine.rb
276
- - test/test_encoding.rb
277
- - test/test_lexer.rb
278
- - test/test_lexer_stack_state.rb
279
- - test/test_parse_helper.rb
280
- - test/test_parser.rb
281
- - test/test_runner_parse.rb
282
- - test/test_runner_rewrite.rb
283
- - test/test_source_buffer.rb
284
- - test/test_source_comment.rb
285
- - test/test_source_comment_associator.rb
286
- - test/test_source_map.rb
287
- - test/test_source_range.rb
288
- - test/test_source_rewriter.rb
289
- - test/test_source_rewriter_action.rb
290
- - test/test_source_tree_rewriter.rb
291
- - test/test_static_environment.rb
292
- - test/using_tree_rewriter/fixtures/input.rb
293
- - test/using_tree_rewriter/fixtures/output.rb
294
- - test/using_tree_rewriter/using_tree_rewriter.rb
295
243
  homepage: https://github.com/whitequark/parser
296
244
  licenses:
297
245
  - MIT
298
246
  metadata:
299
247
  bug_tracker_uri: https://github.com/whitequark/parser/issues
300
- changelog_uri: https://github.com/whitequark/parser/blob/v2.7.1.1/CHANGELOG.md
301
- documentation_uri: https://www.rubydoc.info/gems/parser/2.7.1.1
302
- source_code_uri: https://github.com/whitequark/parser/tree/v2.7.1.1
303
- post_install_message:
248
+ changelog_uri: https://github.com/whitequark/parser/blob/v3.0.2.0/CHANGELOG.md
249
+ documentation_uri: https://www.rubydoc.info/gems/parser/3.0.2.0
250
+ source_code_uri: https://github.com/whitequark/parser/tree/v3.0.2.0
251
+ post_install_message:
304
252
  rdoc_options: []
305
253
  require_paths:
306
254
  - lib
@@ -316,36 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
316
264
  version: '0'
317
265
  requirements: []
318
266
  rubygems_version: 3.0.6
319
- signing_key:
267
+ signing_key:
320
268
  specification_version: 4
321
269
  summary: A Ruby parser written in pure Ruby.
322
- test_files:
323
- - test/bug_163/fixtures/input.rb
324
- - test/bug_163/fixtures/output.rb
325
- - test/bug_163/rewriter.rb
326
- - test/helper.rb
327
- - test/parse_helper.rb
328
- - test/racc_coverage_helper.rb
329
- - test/test_base.rb
330
- - test/test_current.rb
331
- - test/test_diagnostic.rb
332
- - test/test_diagnostic_engine.rb
333
- - test/test_encoding.rb
334
- - test/test_lexer.rb
335
- - test/test_lexer_stack_state.rb
336
- - test/test_parse_helper.rb
337
- - test/test_parser.rb
338
- - test/test_runner_parse.rb
339
- - test/test_runner_rewrite.rb
340
- - test/test_source_buffer.rb
341
- - test/test_source_comment.rb
342
- - test/test_source_comment_associator.rb
343
- - test/test_source_map.rb
344
- - test/test_source_range.rb
345
- - test/test_source_rewriter.rb
346
- - test/test_source_rewriter_action.rb
347
- - test/test_source_tree_rewriter.rb
348
- - test/test_static_environment.rb
349
- - test/using_tree_rewriter/fixtures/input.rb
350
- - test/using_tree_rewriter/fixtures/output.rb
351
- - test/using_tree_rewriter/using_tree_rewriter.rb
270
+ test_files: []