22
33module ErrorHighlight
44 module CoreExt
5- # This is a marker to let `DidYouMean::Correctable#original_message` skip
6- # the following method definition of `to_s`.
7- # See https://github.com/ruby/did_you_mean/pull/152
8- SKIP_TO_S_FOR_SUPER_LOOKUP = true
9- private_constant :SKIP_TO_S_FOR_SUPER_LOOKUP
10-
11- def to_s
12- msg = super . dup
13-
5+ private def generate_snippet
146 locs = backtrace_locations
15- return msg unless locs
7+ return "" unless locs
168
179 loc = locs . first
18- return msg unless loc
10+ return "" unless loc
11+
1912 begin
2013 node = RubyVM ::AbstractSyntaxTree . of ( loc , keep_script_lines : true )
2114 opts = { }
@@ -36,11 +29,37 @@ def to_s
3629 end
3730
3831 if spot
39- points = ErrorHighlight . formatter . message_for ( spot )
40- msg << points if !msg . include? ( points )
32+ return ErrorHighlight . formatter . message_for ( spot )
33+ end
34+
35+ ""
36+ end
37+
38+ if Exception . method_defined? ( :detailed_message )
39+ def detailed_message ( highlight : false , error_highlight : true , **)
40+ return super unless error_highlight
41+ snippet = generate_snippet
42+ if highlight
43+ snippet = snippet . gsub ( /.+/ ) { "\e [1m" + $& + "\e [m" }
44+ end
45+ super + snippet
4146 end
47+ else
48+ # This is a marker to let `DidYouMean::Correctable#original_message` skip
49+ # the following method definition of `to_s`.
50+ # See https://github.com/ruby/did_you_mean/pull/152
51+ SKIP_TO_S_FOR_SUPER_LOOKUP = true
52+ private_constant :SKIP_TO_S_FOR_SUPER_LOOKUP
4253
43- msg
54+ def to_s
55+ msg = super
56+ snippet = generate_snippet
57+ if snippet != "" && !msg . include? ( snippet )
58+ msg + snippet
59+ else
60+ msg
61+ end
62+ end
4463 end
4564 end
4665
0 commit comments