From 4c32fcb84f19a3821c25f7a01ac995af3826d83e Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Wed, 27 Oct 2021 11:25:58 +0900 Subject: [PATCH] [ruby/error_highlight] Make the formatter mechanism support Ractor Now the formatter configuration is per Ractor. DefaultFormatter is used if not set. DefaultFormatter#message_for is now a class method to allow sub-Ractors to call the method. https://github.com/ruby/error_highlight/commit/9fbaa8ab7c --- lib/error_highlight/formatter.rb | 8 +++----- test/error_highlight/test_error_highlight.rb | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/error_highlight/formatter.rb b/lib/error_highlight/formatter.rb index ce687fb2a2..20ca78d468 100644 --- a/lib/error_highlight/formatter.rb +++ b/lib/error_highlight/formatter.rb @@ -1,6 +1,6 @@ module ErrorHighlight class DefaultFormatter - def message_for(spot) + def self.message_for(spot) # currently only a one-line code snippet is supported if spot[:first_lineno] == spot[:last_lineno] indent = spot[:snippet][0...spot[:first_column]].gsub(/[^\t]/, " ") @@ -14,12 +14,10 @@ module ErrorHighlight end def self.formatter - @@formatter + Ractor.current[:__error_highlight_formatter__] || DefaultFormatter end def self.formatter=(formatter) - @@formatter = formatter + Ractor.current[:__error_highlight_formatter__] = formatter end - - self.formatter = DefaultFormatter.new end diff --git a/test/error_highlight/test_error_highlight.rb b/test/error_highlight/test_error_highlight.rb index 9fc14202b5..08036bca54 100644 --- a/test/error_highlight/test_error_highlight.rb +++ b/test/error_highlight/test_error_highlight.rb @@ -5,7 +5,7 @@ require "tempfile" class ErrorHighlightTest < Test::Unit::TestCase class DummyFormatter - def message_for(corrections) + def self.message_for(corrections) "" end end @@ -13,7 +13,7 @@ class ErrorHighlightTest < Test::Unit::TestCase def setup if defined?(DidYouMean) @did_you_mean_old_formatter = DidYouMean.formatter - DidYouMean.formatter = DummyFormatter.new + DidYouMean.formatter = DummyFormatter end end