summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/error_highlight/formatter.rb3
-rw-r--r--test/error_highlight/test_error_highlight.rb17
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/error_highlight/formatter.rb b/lib/error_highlight/formatter.rb
index a3d6510dc2..ce687fb2a2 100644
--- a/lib/error_highlight/formatter.rb
+++ b/lib/error_highlight/formatter.rb
@@ -3,7 +3,8 @@ module ErrorHighlight
def message_for(spot)
# currently only a one-line code snippet is supported
if spot[:first_lineno] == spot[:last_lineno]
- marker = " " * spot[:first_column] + "^" * (spot[:last_column] - spot[:first_column])
+ indent = spot[:snippet][0...spot[:first_column]].gsub(/[^\t]/, " ")
+ marker = indent + "^" * (spot[:last_column] - spot[:first_column])
"\n\n#{ spot[:snippet] }#{ marker }"
else
diff --git a/test/error_highlight/test_error_highlight.rb b/test/error_highlight/test_error_highlight.rb
index c8effb7cd8..071b3bfd3e 100644
--- a/test/error_highlight/test_error_highlight.rb
+++ b/test/error_highlight/test_error_highlight.rb
@@ -1,6 +1,7 @@
require "test/unit"
require "error_highlight"
+require "tempfile"
class ErrorHighlightTest < Test::Unit::TestCase
class DummyFormatter
@@ -999,4 +1000,20 @@ undefined method `time' for 1:Integer
ensure
ErrorHighlight.formatter = original_formatter
end
+
+ def test_hard_tabs
+ tmp = Tempfile.new(["error_highlight_test", ".rb"])
+ tmp << "\t \t1.time {}\n"
+ tmp.close(false)
+
+ assert_error_message(NoMethodError, <<~END.gsub("_", "\t")) do
+undefined method `time' for 1:Integer
+
+_ _1.time {}
+_ _ ^^^^^
+ END
+
+ load tmp.path
+ end
+ end
end