Skip to content

Commit

Permalink
[Bug #19016] SyntaxError with parser error messages
Browse files Browse the repository at this point in the history
Raise a `SyntaxError` with the parser error message, in the case
reading from a file instead of the `-e` option or standard input. So
syntax_suggest can get the message from the caught error.
  • Loading branch information
nobu committed Nov 21, 2022
1 parent 5b959e2 commit b7a0ce3
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
5 changes: 3 additions & 2 deletions ruby.c
Expand Up @@ -2085,11 +2085,11 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
ruby_set_argv(argc, argv);
process_sflag(&opt->sflag);

rb_parser_set_context(parser, 0, TRUE);

if (opt->e_script) {
VALUE progname = rb_progname;
rb_encoding *eenc;
rb_parser_set_context(parser, 0, TRUE);

if (opt->src.enc.index >= 0) {
eenc = rb_enc_from_index(opt->src.enc.index);
}
Expand All @@ -2114,6 +2114,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
else {
VALUE f;
f = open_load_file(script_name, &opt->xflag);
rb_parser_set_context(parser, 0, f == rb_stdin);
ast = load_file(parser, opt->script_name, f, 1, opt);
}
ruby_set_script_name(opt->script_name);
Expand Down
12 changes: 12 additions & 0 deletions test/ruby/test_exception.rb
Expand Up @@ -1473,6 +1473,18 @@ def detailed_message(**)
end;
pattern = /^<detail\.rb>/
assert_in_out_err(%W[-r#{dir}/detail -], "1+", [], pattern)

File.write(File.join(dir, "main.rb"), "#{<<~"begin;"}\n#{<<~'end;'}")
begin;
1 +
end;
assert_in_out_err(%W[-r#{dir}/detail #{dir}/main.rb]) do |stdout, stderr,|
assert_empty(stdout)
assert_not_empty(stderr.grep(pattern))
error, = stderr.grep(/unexpected end-of-input/)
assert_not_nil(error)
assert_match(/<.*unexpected end-of-input.*>/, error)
end
end
end
end

0 comments on commit b7a0ce3

Please sign in to comment.