diff --git a/lib/error_highlight/base.rb b/lib/error_highlight/base.rb index fc23508a5d..696df76ff9 100644 --- a/lib/error_highlight/base.rb +++ b/lib/error_highlight/base.rb @@ -35,6 +35,7 @@ module ErrorHighlight @fetch = -> (lineno, last_lineno = lineno) do snippet = @node.script_lines[lineno - 1 .. last_lineno - 1].join("") + snippet += "\n" unless snippet.end_with?("\n") # It require some work to support Unicode (or multibyte) characters. # Tentatively, we stop highlighting if the code snippet has non-ascii characters. diff --git a/test/error_highlight/test_error_highlight.rb b/test/error_highlight/test_error_highlight.rb index 071b3bfd3e..03909bd593 100644 --- a/test/error_highlight/test_error_highlight.rb +++ b/test/error_highlight/test_error_highlight.rb @@ -1016,4 +1016,20 @@ _ _ ^^^^^ load tmp.path end end + + def test_no_final_newline + tmp = Tempfile.new(["error_highlight_test", ".rb"]) + tmp << "1.time {}" + tmp.close(false) + + assert_error_message(NoMethodError, <<~END) do +undefined method `time' for 1:Integer + +1.time {} + ^^^^^ + END + + load tmp.path + end + end end