mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/error_highlight] Support hard tabs
Now, the highlight line is created by replacing non-tab characters with spaces, and keeping all hard tabs as-is. This means the highlight line has the completely same indentation as the code snippet line. Fixes #7 https://github.com/ruby/error_highlight/commit/38f20fa542
This commit is contained in:
parent
b18f6fff69
commit
23c8bc367c
2 changed files with 19 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue