summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Silin <silin@kyrylo.org>2020-03-22 00:35:33 +0800
committerGitHub <noreply@github.com>2020-03-22 00:35:33 +0800
commite9ad44799670db0543e285f24372908b009b68ab (patch)
tree824683180ee5da0ab33f8bc4698d358097bd53f3
parent2208ed30f246b4dbeb512745021e00052781ece6 (diff)
parentf6736d526260b2aa9f50b61150a67fcfa2045893 (diff)
downloadpry-e9ad44799670db0543e285f24372908b009b68ab.tar.gz
Merge pull request #2117 from barrettkingram/fix-syntax-error-display
Display all syntax error messages when catching SyntaxException
-rw-r--r--lib/pry/pry_instance.rb2
-rw-r--r--spec/syntax_checking_spec.rb28
2 files changed, 24 insertions, 6 deletions
diff --git a/lib/pry/pry_instance.rb b/lib/pry/pry_instance.rb
index 9ccca364..d1de5c4d 100644
--- a/lib/pry/pry_instance.rb
+++ b/lib/pry/pry_instance.rb
@@ -627,7 +627,7 @@ class Pry
begin
complete_expr = Pry::Code.complete_expression?(@eval_string)
rescue SyntaxError => e
- output.puts "SyntaxError: #{e.message.sub(/.*syntax error, */m, '')}"
+ output.puts e.message.gsub(/^.*syntax error, */, "SyntaxError: ")
reset_eval_string
end
diff --git a/spec/syntax_checking_spec.rb b/spec/syntax_checking_spec.rb
index ec7f5b36..ca75ba9f 100644
--- a/spec/syntax_checking_spec.rb
+++ b/spec/syntax_checking_spec.rb
@@ -23,17 +23,21 @@ describe Pry do
end
end
- ([
+ [
["end"],
["puts )("],
["1 1"],
- ["puts :"]
- ] + [
+ ["puts :"],
+
# in this case the syntax error is "expecting ')'".
["def", "method(1"],
+
# in this case the syntax error is "expecting keyword_end".
- ["o = Object.new.tap{ def o.render;", "'MEH'", "}"]
- ]).compact.each do |foo|
+ ["o = Object.new.tap{ def o.render;", "'MEH'", "}"],
+
+ # multiple syntax errors reported in one SyntaxException
+ ["puts {'key'=>'val'}.to_json"]
+ ].compact.each do |foo|
it "should raise an error on invalid syntax like #{foo.inspect}" do
redirect_pry_io(InputTester.new(*foo), @str_output) do
Pry.start
@@ -41,6 +45,20 @@ describe Pry do
expect(@str_output.string).to match(/SyntaxError/)
end
+
+ it "should display correct number of errors on invalid syntax like #{foo.inspect}" do
+ begin
+ # rubocop:disable Security/Eval
+ eval(foo.join("\n"))
+ # rubocop:enable Security/Eval
+ rescue SyntaxError => e
+ error_count = e.message.scan(/syntax error/).count
+ end
+ expect(error_count).not_to be_nil
+
+ pry_output = mock_pry(*foo)
+ expect(pry_output.scan(/SyntaxError/).count).to eq(error_count)
+ end
end
it "should not intefere with syntax errors explicitly raised" do