Bug #12295
closed
Updated by lsegal (Loren Segal) about 9 years ago
After looking into this a little more it looks like the Ruby error is not a "parse error", though it probably should be? This might no longer be Ripper specific. Ruby just seems to give up on the above code no matter where it is placed in source:
$ ruby -e 'puts "one"; :~$ ; puts "two"'
-e:1: `$' without identifiers is not allowed as a global variable name
I would expect that if there is no syntax error that Ruby should print "one\ntwo".
Updated by usa (Usaku NAKAMURA) about 9 years ago
You can handle the case by using compile_error
instead of on_parse_error
as below:
$ ruby -rripper -e 'class X < Ripper; def compile_error(m) puts "ERROR #{m}" end end; X.parse ":~$"'
ERROR `$' without identifiers is not allowed as a global variable name
IMO, ripper expects that all syntax errors are "compile errors", not "parse errors".
But current implementation of the ruby parser is not so.
Then, we must define both on_parse_error
and compile_error
to handle syntax errors at this time.
Updated by shyouhei (Shyouhei Urabe) about 9 years ago
- Status changed from Open to Assigned
- Assignee set to aamine (Minero Aoki)
Updated by aamine (Minero Aoki) about 9 years ago
Ripper is just a thin wrapper over ruby parser, so the original parser differentiate them, ripper just inherits difference directly.
Extra work such as unifying two errors should be done by upper layer.
Updated by aamine (Minero Aoki) about 9 years ago
- Status changed from Assigned to Closed
Updated by usa (Usaku NAKAMURA) almost 9 years ago
- Status changed from Closed to Rejected