parser 2.7.1.0 → 2.7.1.5

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 (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)