summaryrefslogtreecommitdiff
diff options
authorJean Boussier <[email protected]>2023-07-17 11:41:46 +0200
committergit <[email protected]>2023-07-20 17:58:52 +0000
commit460c27dc15b5efc46a74cb2a7809ca3fa6ce72a7 (patch)
tree15e4da74dc45635380e17ea10d2f3ce4b52c2984
parentb41fc9b9a4ad2043a9fabce15814eade9b252569 (diff)
[ruby/syntax_suggest] Handle new eval source location
See https://bugs.ruby-lang.org/issues/19755 In Ruby 3.3, using `eval` without providing a source location will now default to `"(eval at #{__FILE__}:#{__LINE__})"`. https://github.com/ruby/syntax_suggest/commit/8e5076472e
-rw-r--r--lib/syntax_suggest/pathname_from_message.rb2
-rw-r--r--spec/syntax_suggest/integration/ruby_command_line_spec.rb2
-rw-r--r--spec/syntax_suggest/unit/pathname_from_message_spec.rb9
3 files changed, 11 insertions, 2 deletions
diff --git a/lib/syntax_suggest/pathname_from_message.rb b/lib/syntax_suggest/pathname_from_message.rb
index b6fe1617be..ab90227427 100644
--- a/lib/syntax_suggest/pathname_from_message.rb
+++ b/lib/syntax_suggest/pathname_from_message.rb
@@ -13,7 +13,7 @@ module SyntaxSuggest
# # => "/tmp/scratch.rb"
#
class PathnameFromMessage
- EVAL_RE = /^\(eval\):\d+/
+ EVAL_RE = /^\(eval.*\):\d+/
STREAMING_RE = /^-:\d+/
attr_reader :name
diff --git a/spec/syntax_suggest/integration/ruby_command_line_spec.rb b/spec/syntax_suggest/integration/ruby_command_line_spec.rb
index b41a4c86e3..d3cc4ca9d9 100644
--- a/spec/syntax_suggest/integration/ruby_command_line_spec.rb
+++ b/spec/syntax_suggest/integration/ruby_command_line_spec.rb
@@ -167,7 +167,7 @@ module SyntaxSuggest
out = `#{ruby} -I#{lib_dir} -rsyntax_suggest #{script} 2>&1`
expect($?.success?).to be_falsey
- expect(out).to include("(eval):1")
+ expect(out).to match(/\(eval.*\):1/)
expect(out).to_not include("SyntaxSuggest")
expect(out).to_not include("Could not find filename")
diff --git a/spec/syntax_suggest/unit/pathname_from_message_spec.rb b/spec/syntax_suggest/unit/pathname_from_message_spec.rb
index 76756efda9..de58acebaa 100644
--- a/spec/syntax_suggest/unit/pathname_from_message_spec.rb
+++ b/spec/syntax_suggest/unit/pathname_from_message_spec.rb
@@ -43,6 +43,15 @@ module SyntaxSuggest
expect(file).to be_falsey
end
+ it "does not output error message on syntax error inside of an (eval at __FILE__:__LINE__)" do
+ message = "(eval at #{__FILE__}:#{__LINE__}):1: invalid multibyte char (UTF-8) (SyntaxError)\n"
+ io = StringIO.new
+ file = PathnameFromMessage.new(message, io: io).call.name
+
+ expect(io.string).to eq("")
+ expect(file).to be_falsey
+ end
+
it "does not output error message on syntax error inside of streamed code" do
# An example of streamed code is: $ echo "def foo" | ruby
message = "-:1: syntax error, unexpected end-of-input\n"