parser 2.7.1.0 → 2.7.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -11
  3. data/CHANGELOG.md +70 -1
  4. data/README.md +2 -2
  5. data/Rakefile +2 -1
  6. data/doc/AST_FORMAT.md +107 -3
  7. data/lib/parser.rb +1 -0
  8. data/lib/parser/all.rb +1 -0
  9. data/lib/parser/ast/processor.rb +2 -0
  10. data/lib/parser/base.rb +6 -5
  11. data/lib/parser/builders/default.rb +146 -19
  12. data/lib/parser/context.rb +1 -0
  13. data/lib/parser/current.rb +9 -0
  14. data/lib/parser/diagnostic.rb +1 -1
  15. data/lib/parser/diagnostic/engine.rb +1 -2
  16. data/lib/parser/lexer.rb +23770 -0
  17. data/lib/parser/lexer.rl +15 -1
  18. data/lib/parser/macruby.rb +6149 -0
  19. data/lib/parser/macruby.y +15 -5
  20. data/lib/parser/max_numparam_stack.rb +1 -1
  21. data/lib/parser/messages.rb +17 -0
  22. data/lib/parser/meta.rb +3 -3
  23. data/lib/parser/ruby18.rb +5663 -0
  24. data/lib/parser/ruby18.y +3 -1
  25. data/lib/parser/ruby19.rb +6092 -0
  26. data/lib/parser/ruby19.y +15 -5
  27. data/lib/parser/ruby20.rb +6527 -0
  28. data/lib/parser/ruby20.y +15 -5
  29. data/lib/parser/ruby21.rb +6578 -0
  30. data/lib/parser/ruby21.y +10 -3
  31. data/lib/parser/ruby22.rb +6613 -0
  32. data/lib/parser/ruby22.y +10 -3
  33. data/lib/parser/ruby23.rb +6624 -0
  34. data/lib/parser/ruby23.y +10 -3
  35. data/lib/parser/ruby24.rb +6694 -0
  36. data/lib/parser/ruby24.y +10 -3
  37. data/lib/parser/ruby25.rb +6662 -0
  38. data/lib/parser/ruby25.y +10 -3
  39. data/lib/parser/ruby26.rb +6676 -0
  40. data/lib/parser/ruby26.y +10 -3
  41. data/lib/parser/ruby27.rb +7803 -0
  42. data/lib/parser/ruby27.y +16 -8
  43. data/lib/parser/ruby30.rb +8052 -0
  44. data/lib/parser/ruby30.y +3048 -0
  45. data/lib/parser/rubymotion.rb +6086 -0
  46. data/lib/parser/rubymotion.y +15 -5
  47. data/lib/parser/runner.rb +26 -2
  48. data/lib/parser/runner/ruby_rewrite.rb +2 -2
  49. data/lib/parser/source/buffer.rb +3 -1
  50. data/lib/parser/source/comment.rb +1 -1
  51. data/lib/parser/source/comment/associator.rb +14 -4
  52. data/lib/parser/source/map/method_definition.rb +25 -0
  53. data/lib/parser/source/range.rb +19 -3
  54. data/lib/parser/source/tree_rewriter.rb +115 -12
  55. data/lib/parser/source/tree_rewriter/action.rb +135 -26
  56. data/lib/parser/tree_rewriter.rb +1 -2
  57. data/lib/parser/version.rb +1 -1
  58. data/parser.gemspec +6 -2
  59. data/test/helper.rb +49 -6
  60. data/test/parse_helper.rb +49 -40
  61. data/test/test_ast_processor.rb +32 -0
  62. data/test/test_base.rb +1 -1
  63. data/test/test_current.rb +2 -0
  64. data/test/test_diagnostic.rb +6 -7
  65. data/test/test_diagnostic_engine.rb +5 -8
  66. data/test/test_lexer.rb +17 -8
  67. data/test/test_meta.rb +12 -0
  68. data/test/test_parse_helper.rb +12 -9
  69. data/test/test_parser.rb +612 -56
  70. data/test/test_runner_parse.rb +22 -1
  71. data/test/test_runner_rewrite.rb +1 -1
  72. data/test/test_source_buffer.rb +4 -1
  73. data/test/test_source_comment.rb +2 -2
  74. data/test/test_source_comment_associator.rb +47 -15
  75. data/test/test_source_map.rb +1 -2
  76. data/test/test_source_range.rb +29 -9
  77. data/test/test_source_rewriter.rb +4 -4
  78. data/test/test_source_rewriter_action.rb +2 -2
  79. data/test/test_source_tree_rewriter.rb +201 -13
  80. metadata +19 -13
  81. data/.gitignore +0 -33
@@ -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.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parser
4
- VERSION = '2.7.1.0'
4
+ VERSION = '2.7.1.5'
5
5
  end
@@ -32,19 +32,23 @@ Gem::Specification.new do |spec|
32
32
  lib/parser/ruby25.rb
33
33
  lib/parser/ruby26.rb
34
34
  lib/parser/ruby27.rb
35
+ lib/parser/ruby30.rb
35
36
  lib/parser/macruby.rb
36
37
  lib/parser/rubymotion.rb
38
+ ) - %w(
39
+ .gitignore
37
40
  )
41
+
38
42
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
39
43
  spec.test_files = spec.files.grep(%r{^test/})
40
44
  spec.require_paths = ['lib']
41
45
 
42
46
  spec.required_ruby_version = '>= 2.0.0'
43
47
 
44
- spec.add_dependency 'ast', '~> 2.4.0'
48
+ spec.add_dependency 'ast', '~> 2.4.1'
45
49
 
46
50
  spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0'
47
- spec.add_development_dependency 'rake', '~> 10.0'
51
+ spec.add_development_dependency 'rake', '~> 13.0.1'
48
52
  spec.add_development_dependency 'racc', '= 1.4.15'
49
53
  spec.add_development_dependency 'cliver', '~> 0.3.2'
50
54
 
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'tempfile'
4
- require 'minitest/test'
5
-
6
4
  require 'simplecov'
7
5
 
8
6
  if ENV.include?('COVERAGE') && SimpleCov.usable?
@@ -20,6 +18,7 @@ if ENV.include?('COVERAGE') && SimpleCov.usable?
20
18
  ruby25.y
21
19
  ruby26.y
22
20
  ruby27.y
21
+ ruby30.y
23
22
  ),
24
23
  File.expand_path('../../lib/parser', __FILE__))
25
24
 
@@ -27,9 +26,9 @@ if ENV.include?('COVERAGE') && SimpleCov.usable?
27
26
  at_exit { RaccCoverage.stop }
28
27
 
29
28
  SimpleCov.start do
30
- self.formatter = SimpleCov::Formatter::MultiFormatter[
31
- SimpleCov::Formatter::HTMLFormatter,
32
- ]
29
+ self.formatter = SimpleCov::Formatter::MultiFormatter.new(
30
+ SimpleCov::Formatter::HTMLFormatter
31
+ )
33
32
 
34
33
  add_group 'Grammars' do |source_file|
35
34
  source_file.filename =~ %r{\.y$}
@@ -52,9 +51,53 @@ require 'minitest/autorun'
52
51
  $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
53
52
  require 'parser'
54
53
 
54
+ module NodeCollector
55
+ extend self
56
+ attr_accessor :callbacks, :nodes
57
+ self.callbacks = []
58
+ self.nodes = []
59
+
60
+ def check
61
+ @callbacks.each do |callback|
62
+ @nodes.each { |node| callback.call(node) }
63
+ end
64
+ puts "#{callbacks.size} additional tests on #{nodes.size} nodes ran successfully"
65
+ end
66
+
67
+ Minitest.after_run { check }
68
+ end
69
+
70
+ def for_each_node(&block)
71
+ NodeCollector.callbacks << block
72
+ end
73
+
55
74
  class Parser::AST::Node
56
75
  def initialize(type, *)
57
- raise "Type #{type} missing from Parser::Meta::NODE_TYPES" unless Parser::Meta::NODE_TYPES.include?(type)
76
+ NodeCollector.nodes << self
58
77
  super
59
78
  end
60
79
  end
80
+
81
+ # Special test extension that records a context of the parser
82
+ # for any node that is created
83
+ module NodeContextExt
84
+ module NodeExt
85
+ attr_reader :context
86
+
87
+ def assign_properties(properties)
88
+ super
89
+
90
+ if (context = properties[:context])
91
+ @context = context
92
+ end
93
+ end
94
+ end
95
+ Parser::AST::Node.prepend(NodeExt)
96
+
97
+ module BuilderExt
98
+ def n(type, children, source_map)
99
+ super.updated(nil, nil, context: @parser.context.stack.dup)
100
+ end
101
+ end
102
+ Parser::Builders::Default.prepend(BuilderExt)
103
+ end
@@ -7,7 +7,7 @@ module ParseHelper
7
7
  require 'parser/macruby'
8
8
  require 'parser/rubymotion'
9
9
 
10
- ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 mac ios)
10
+ ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3.0 mac ios)
11
11
 
12
12
  def setup
13
13
  @diagnostics = []
@@ -27,6 +27,7 @@ module ParseHelper
27
27
  when '2.5' then parser = Parser::Ruby25.new
28
28
  when '2.6' then parser = Parser::Ruby26.new
29
29
  when '2.7' then parser = Parser::Ruby27.new
30
+ when '3.0' then parser = Parser::Ruby30.new
30
31
  when 'mac' then parser = Parser::MacRuby.new
31
32
  when 'ios' then parser = Parser::RubyMotion.new
32
33
  else raise "Unrecognized Ruby version #{version}"
@@ -48,15 +49,17 @@ module ParseHelper
48
49
  end
49
50
  end
50
51
 
51
- def assert_source_range(begin_pos, end_pos, range, version, what)
52
- assert range.is_a?(Parser::Source::Range),
53
- "(#{version}) #{range.inspect}.is_a?(Source::Range) for #{what}"
54
-
55
- assert_equal begin_pos, range.begin_pos,
56
- "(#{version}) begin of #{what}"
57
-
58
- assert_equal end_pos, range.end_pos,
59
- "(#{version}) end of #{what}"
52
+ def assert_source_range(expect_range, range, version, what)
53
+ if expect_range == nil
54
+ # Avoid "Use assert_nil if expecting nil from .... This will fail in Minitest 6.""
55
+ assert_nil range,
56
+ "(#{version}) range of #{what}"
57
+ else
58
+ assert range.is_a?(Parser::Source::Range),
59
+ "(#{version}) #{range.inspect}.is_a?(Source::Range) for #{what}"
60
+ assert_equal expect_range, range.to_range,
61
+ "(#{version}) range of #{what}"
62
+ end
60
63
  end
61
64
 
62
65
  # Use like this:
@@ -84,8 +87,7 @@ module ParseHelper
84
87
  end
85
88
 
86
89
  def try_parsing(ast, code, parser, source_maps, version)
87
- source_file = Parser::Source::Buffer.new('(assert_parses)')
88
- source_file.source = code
90
+ source_file = Parser::Source::Buffer.new('(assert_parses)', source: code)
89
91
 
90
92
  begin
91
93
  parsed_ast = parser.parse(source_file)
@@ -105,8 +107,7 @@ module ParseHelper
105
107
  assert_equal ast, parsed_ast,
106
108
  "(#{version}) AST equality"
107
109
 
108
- parse_source_map_descriptions(source_maps) \
109
- do |begin_pos, end_pos, map_field, ast_path, line|
110
+ parse_source_map_descriptions(source_maps) do |range, map_field, ast_path, line|
110
111
 
111
112
  astlet = traverse_ast(parsed_ast, ast_path)
112
113
 
@@ -120,9 +121,9 @@ module ParseHelper
120
121
  assert astlet.location.respond_to?(map_field),
121
122
  "(#{version}) #{astlet.location.inspect}.respond_to?(#{map_field.inspect}) for:\n#{parsed_ast.inspect}"
122
123
 
123
- range = astlet.location.send(map_field)
124
+ found_range = astlet.location.send(map_field)
124
125
 
125
- assert_source_range(begin_pos, end_pos, range, version, line.inspect)
126
+ assert_source_range(range, found_range, version, line.inspect)
126
127
  end
127
128
 
128
129
  assert parser.instance_eval { @lexer }.cmdarg.empty?,
@@ -142,8 +143,7 @@ module ParseHelper
142
143
  # ~~~
143
144
  def assert_diagnoses(diagnostic, code, source_maps='', versions=ALL_VERSIONS)
144
145
  with_versions(versions) do |version, parser|
145
- source_file = Parser::Source::Buffer.new('(assert_diagnoses)')
146
- source_file.source = code
146
+ source_file = Parser::Source::Buffer.new('(assert_diagnoses)', source: code)
147
147
 
148
148
  begin
149
149
  parser = parser.parse(source_file)
@@ -159,26 +159,25 @@ module ParseHelper
159
159
 
160
160
  level, reason, arguments = diagnostic
161
161
  arguments ||= {}
162
- message = Parser::MESSAGES[reason] % arguments
162
+ message = Parser::Messages.compile(reason, arguments)
163
163
 
164
164
  assert_equal level, emitted_diagnostic.level
165
165
  assert_equal reason, emitted_diagnostic.reason
166
166
  assert_equal arguments, emitted_diagnostic.arguments
167
167
  assert_equal message, emitted_diagnostic.message
168
168
 
169
- parse_source_map_descriptions(source_maps) \
170
- do |begin_pos, end_pos, map_field, ast_path, line|
169
+ parse_source_map_descriptions(source_maps) do |range, map_field, ast_path, line|
171
170
 
172
171
  case map_field
173
172
  when 'location'
174
- assert_source_range begin_pos, end_pos,
173
+ assert_source_range range,
175
174
  emitted_diagnostic.location,
176
175
  version, 'location'
177
176
 
178
177
  when 'highlights'
179
178
  index = ast_path.first.to_i
180
179
 
181
- assert_source_range begin_pos, end_pos,
180
+ assert_source_range range,
182
181
  emitted_diagnostic.highlights[index],
183
182
  version, "#{index}th highlight"
184
183
 
@@ -201,8 +200,7 @@ module ParseHelper
201
200
  # ~~~
202
201
  def assert_diagnoses_many(diagnostics, code, versions=ALL_VERSIONS)
203
202
  with_versions(versions) do |version, parser|
204
- source_file = Parser::Source::Buffer.new('(assert_diagnoses_many)')
205
- source_file.source = code
203
+ source_file = Parser::Source::Buffer.new('(assert_diagnoses_many)', source: code)
206
204
 
207
205
  begin
208
206
  parser = parser.parse(source_file)
@@ -215,7 +213,7 @@ module ParseHelper
215
213
  diagnostics.zip(@diagnostics) do |expected_diagnostic, actual_diagnostic|
216
214
  level, reason, arguments = expected_diagnostic
217
215
  arguments ||= {}
218
- message = Parser::MESSAGES[reason] % arguments
216
+ message = Parser::Messages.compile(reason, arguments)
219
217
 
220
218
  assert_equal level, actual_diagnostic.level
221
219
  assert_equal reason, actual_diagnostic.reason
@@ -227,8 +225,7 @@ module ParseHelper
227
225
 
228
226
  def refute_diagnoses(code, versions=ALL_VERSIONS)
229
227
  with_versions(versions) do |version, parser|
230
- source_file = Parser::Source::Buffer.new('(refute_diagnoses)')
231
- source_file.source = code
228
+ source_file = Parser::Source::Buffer.new('(refute_diagnoses)', source: code)
232
229
 
233
230
  begin
234
231
  parser = parser.parse(source_file)
@@ -244,23 +241,22 @@ module ParseHelper
244
241
 
245
242
  def assert_context(context, code, versions=ALL_VERSIONS)
246
243
  with_versions(versions) do |version, parser|
247
- source_file = Parser::Source::Buffer.new('(assert_context)')
248
- source_file.source = code
244
+ source_file = Parser::Source::Buffer.new('(assert_context)', source: code)
249
245
 
250
- begin
251
- parser.parse(source_file)
252
- rescue Parser::SyntaxError
253
- # do nothing; the diagnostic was reported
254
- end
246
+ parsed_ast = parser.parse(source_file)
247
+
248
+ nodes = find_matching_nodes(parsed_ast) { |node| node.type == :send && node.children[1] == :get_context }
249
+ assert_equal 1, nodes.count, "there must exactly 1 `get_context()` call"
255
250
 
256
- assert_equal parser.context.stack, context, "(#{version}) parsing context"
251
+ node = nodes.first
252
+ assert_equal context, node.context, "(#{version}) expect parsing context to match"
257
253
  end
258
254
  end
259
255
 
260
256
  SOURCE_MAP_DESCRIPTION_RE =
261
257
  /(?x)
262
258
  ^(?# $1 skip) ^(\s*)
263
- (?# $2 highlight) ([~\^]+)
259
+ (?# $2 highlight) ([~\^]+|\!)
264
260
  \s+
265
261
  (?# $3 source_map_field) ([a-z_]+)
266
262
  (?# $5 ast_path) (\s+\(([a-z_.\/0-9]+)\))?
@@ -278,8 +274,11 @@ module ParseHelper
278
274
  next if line.empty?
279
275
 
280
276
  if (match = SOURCE_MAP_DESCRIPTION_RE.match(line))
281
- begin_pos = match[1].length
282
- end_pos = begin_pos + match[2].length
277
+ if match[2] != '!'
278
+ begin_pos = match[1].length
279
+ end_pos = begin_pos + match[2].length
280
+ range = begin_pos...end_pos
281
+ end
283
282
  source_map_field = match[3]
284
283
 
285
284
  if match[5]
@@ -288,7 +287,7 @@ module ParseHelper
288
287
  ast_path = []
289
288
  end
290
289
 
291
- yield begin_pos, end_pos, source_map_field, ast_path, line
290
+ yield range, source_map_field, ast_path, line
292
291
  else
293
292
  raise "Cannot parse source map description line: #{line.inspect}."
294
293
  end
@@ -316,4 +315,14 @@ module ParseHelper
316
315
  matching_children[index]
317
316
  end
318
317
  end
318
+
319
+ def find_matching_nodes(ast, &block)
320
+ return [] unless ast.is_a?(AST::Node)
321
+
322
+ result = []
323
+ result << ast if block.call(ast)
324
+ ast.children.each { |child| result += find_matching_nodes(child, &block) }
325
+
326
+ result
327
+ end
319
328
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'helper'
4
+
5
+ class TestASTProcessor < Minitest::Test
6
+ LEAF_NODES = %i[
7
+ sym str int float complex rational
8
+ true false nil self
9
+ __FILE__ __LINE__ __ENCODING__
10
+ cbase regopt zsuper
11
+ match_with_trailing_comma match_nil_pattern
12
+ forward_args forwarded_args numargs kwnilarg
13
+ objc_varargs objc_restarg objc_kwarg
14
+ ident
15
+ ].freeze
16
+
17
+ def setup
18
+ @traversible = Parser::AST::Processor
19
+ .instance_methods(false)
20
+ .map { |mid| mid.to_s.scan(/\Aon_(.*)/) }
21
+ .flatten
22
+ .map(&:to_sym)
23
+
24
+ @traversible += LEAF_NODES
25
+ end
26
+
27
+ def test_nodes_are_traversible
28
+ for_each_node do |node|
29
+ assert_includes @traversible, node.type
30
+ end
31
+ end
32
+ end
@@ -26,6 +26,6 @@ class TestBase < Minitest::Test
26
26
  def test_loc_dup
27
27
  ast = Parser::CurrentRuby.parse('1')
28
28
  assert_nil ast.loc.dup.node
29
- Parser::AST::Node.new(:root, [], :location => ast.loc)
29
+ Parser::AST::Node.new(:zsuper, [], :location => ast.loc)
30
30
  end
31
31
  end
@@ -22,6 +22,8 @@ class TestCurrent < Minitest::Test
22
22
  assert_equal Parser::Ruby26, Parser::CurrentRuby
23
23
  when /^2\.7\.\d+/
24
24
  assert_equal Parser::Ruby27, Parser::CurrentRuby
25
+ when /^3\.0\.\d+/
26
+ assert_equal Parser::Ruby30, Parser::CurrentRuby
25
27
  else
26
28
  flunk "Update test_current for #{RUBY_VERSION}"
27
29
  end
@@ -4,8 +4,8 @@ require 'helper'
4
4
 
5
5
  class TestDiagnostic < Minitest::Test
6
6
  def setup
7
- @buffer = Parser::Source::Buffer.new('(string)')
8
- @buffer.source = 'if (this is some bad code + bugs)'
7
+ @buffer = Parser::Source::Buffer.new('(string)',
8
+ source: 'if (this is some bad code + bugs)')
9
9
 
10
10
  @range1 = Parser::Source::Range.new(@buffer, 0, 2) # if
11
11
  @range2 = Parser::Source::Range.new(@buffer, 4, 8) # this
@@ -16,7 +16,7 @@ class TestDiagnostic < Minitest::Test
16
16
  Parser::Diagnostic.new(:foobar, :escape_eof, {}, @range1)
17
17
  end
18
18
 
19
- assert_match /level/, error.message
19
+ assert_match(/level/, error.message)
20
20
  end
21
21
 
22
22
  def test_freezes
@@ -50,8 +50,8 @@ class TestDiagnostic < Minitest::Test
50
50
  end
51
51
 
52
52
  def test_multiline_render
53
- @buffer = Parser::Source::Buffer.new('(string)')
54
- @buffer.source = "abc abc abc\ndef def def\nghi ghi ghi\n"
53
+ @buffer = Parser::Source::Buffer.new('(string)',
54
+ source: "abc abc abc\ndef def def\nghi ghi ghi\n")
55
55
 
56
56
  location = Parser::Source::Range.new(@buffer, 4, 27)
57
57
 
@@ -80,8 +80,7 @@ class TestDiagnostic < Minitest::Test
80
80
  }
81
81
  }
82
82
  CODE
83
- @buffer = Parser::Source::Buffer.new('(string)')
84
- @buffer.source = source
83
+ @buffer = Parser::Source::Buffer.new('(string)', source: source)
85
84
 
86
85
  location = Parser::Source::Range.new(@buffer, 33, 34)
87
86
  diag = Parser::Diagnostic.new(:error, :unexpected_token, { :token => 'tNL' },
@@ -4,9 +4,6 @@ require 'helper'
4
4
 
5
5
  class TestDiagnosticEngine < Minitest::Test
6
6
  def setup
7
- @buffer = Parser::Source::Buffer.new('(source)')
8
- @buffer.source = 'foobar'
9
-
10
7
  @engine = Parser::Diagnostic::Engine.new
11
8
 
12
9
  @queue = []
@@ -14,7 +11,7 @@ class TestDiagnosticEngine < Minitest::Test
14
11
  end
15
12
 
16
13
  def test_process_warnings
17
- warn = Parser::Diagnostic.new(:warning, :invalid_escape, @buffer, 1..2)
14
+ warn = Parser::Diagnostic.new(:warning, :invalid_escape, {}, 1..2)
18
15
  @engine.process(warn)
19
16
 
20
17
  assert_equal [warn], @queue
@@ -23,7 +20,7 @@ class TestDiagnosticEngine < Minitest::Test
23
20
  def test_ignore_warnings
24
21
  @engine.ignore_warnings = true
25
22
 
26
- warn = Parser::Diagnostic.new(:warning, :invalid_escape, @buffer, 1..2)
23
+ warn = Parser::Diagnostic.new(:warning, :invalid_escape, {}, 1..2)
27
24
  @engine.process(warn)
28
25
 
29
26
  assert_equal [], @queue
@@ -32,7 +29,7 @@ class TestDiagnosticEngine < Minitest::Test
32
29
  def test_all_errors_are_fatal
33
30
  @engine.all_errors_are_fatal = true
34
31
 
35
- error = Parser::Diagnostic.new(:error, :invalid_escape, @buffer, 1..2)
32
+ error = Parser::Diagnostic.new(:error, :invalid_escape, {}, 1..2)
36
33
 
37
34
  err = assert_raises Parser::SyntaxError do
38
35
  @engine.process(error)
@@ -44,14 +41,14 @@ class TestDiagnosticEngine < Minitest::Test
44
41
  end
45
42
 
46
43
  def test_all_errors_are_collected
47
- error = Parser::Diagnostic.new(:error, :invalid_escape, @buffer, 1..2)
44
+ error = Parser::Diagnostic.new(:error, :invalid_escape, {}, 1..2)
48
45
  @engine.process(error)
49
46
 
50
47
  assert_equal [error], @queue
51
48
  end
52
49
 
53
50
  def test_fatal_error
54
- fatal = Parser::Diagnostic.new(:fatal, :invalid_escape, @buffer, 1..2)
51
+ fatal = Parser::Diagnostic.new(:fatal, :invalid_escape, {}, 1..2)
55
52
 
56
53
  assert_raises Parser::SyntaxError do
57
54
  @engine.process(fatal)