[前][次][番号順一覧][スレッド一覧]

ruby-changes:66758

From: Yusuke <ko1@a...>
Date: Tue, 13 Jul 2021 16:51:13 +0900 (JST)
Subject: [ruby-changes:66758] 23c8bc367c (master): [ruby/error_highlight] Support hard tabs

https://git.ruby-lang.org/ruby.git/commit/?id=23c8bc367c

From 23c8bc367c6d700789a4059b831606966efb674c Mon Sep 17 00:00:00 2001
From: Yusuke Endoh <mame@r...>
Date: Tue, 13 Jul 2021 16:47:35 +0900
Subject: [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
---
 lib/error_highlight/formatter.rb             |  3 ++-
 test/error_highlight/test_error_highlight.rb | 17 +++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/lib/error_highlight/formatter.rb b/lib/error_highlight/formatter.rb
index a3d6510..ce687fb 100644
--- a/lib/error_highlight/formatter.rb
+++ b/lib/error_highlight/formatter.rb
@@ -3,7 +3,8 @@ module ErrorHighlight https://github.com/ruby/ruby/blob/trunk/lib/error_highlight/formatter.rb#L3
     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 c8effb7..071b3bf 100644
--- a/test/error_highlight/test_error_highlight.rb
+++ b/test/error_highlight/test_error_highlight.rb
@@ -1,6 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/test/error_highlight/test_error_highlight.rb#L1
 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 https://github.com/ruby/ruby/blob/trunk/test/error_highlight/test_error_highlight.rb#L1000
   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
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]