Ripper: Refined error callbacks [Bug #17345]

This commit is contained in:
Nobuyoshi Nakada 2020-12-15 14:14:13 +09:00
parent 2e436982ee
commit e0bdd54348
Notes: git 2020-12-15 21:36:48 +09:00
4 changed files with 68 additions and 47 deletions

View file

@ -101,7 +101,11 @@ class DummyParser < Ripper
Node.new('valias', a, b)
end
def on_alias_error(a)
def on_assign_error(mesg = nil, a)
Node.new('assign_error', a)
end
def on_alias_error(mesg = nil, a)
Node.new('aliaserr', a)
end

View file

@ -147,18 +147,18 @@ class TestRipper::Lexer < Test::Unit::TestCase
end
BAD_CODE = {
parse_error: 'def req(true) end',
assign_error: 'begin; nil = 1; end',
alias_error: 'begin; alias $x $1; end',
class_name_error: 'class bad; end',
param_error: 'def req(@a) end',
parse_error: ['def req(true) end', %r[unexpected `true']],
assign_error: ['begin; nil = 1; end', %r[assign to nil]],
alias_error: ['begin; alias $x $1; end', %r[number variables]],
class_name_error: ['class bad; end', %r[class/module name]],
param_error: ['def req(@a) end', %r[formal argument.*instance]],
}
def test_raise_errors_keyword
all_assertions do |all|
BAD_CODE.each do |err, code|
BAD_CODE.each do |err, (code, message)|
all.for(err) do
assert_raise(SyntaxError) { Ripper.tokenize(code, raise_errors: true) }
assert_raise_with_message(SyntaxError, message) { Ripper.tokenize(code, raise_errors: true) }
end
end
end
@ -166,7 +166,7 @@ class TestRipper::Lexer < Test::Unit::TestCase
def test_tokenize_with_syntax_error
all_assertions do |all|
BAD_CODE.each do |err, code|
BAD_CODE.each do |err, (code)|
all.for(err) do
assert_equal "end", Ripper.tokenize(code).last
end
@ -176,7 +176,7 @@ class TestRipper::Lexer < Test::Unit::TestCase
def test_lex_with_syntax_error
all_assertions do |all|
BAD_CODE.each do |err, code|
BAD_CODE.each do |err, (code)|
all.for(err) do
assert_equal [[1, code.size-3], :on_kw, "end", state(:EXPR_END)], Ripper.lex(code).last
end