diff options
author | Koichi Sasada <ko1@atdot.net> | 2019-05-29 04:30:36 +0100 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2019-05-29 04:30:36 +0100 |
commit | 8187ffa461be6c1ee198c0b8f2c3a22ca2681d9a (patch) | |
tree | 362d513ac3fcf77d81756e95aa2e05c7f2d7bdfd | |
parent | c7f3c222c9b82736c993419daa6bfb643e5c0793 (diff) | |
download | ruby-8187ffa461be6c1ee198c0b8f2c3a22ca2681d9a.tar.gz |
Revert "Colorize error part more"
This reverts commit c7f3c222c9b82736c993419daa6bfb643e5c0793.
-rw-r--r-- | lib/irb/color.rb | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/lib/irb/color.rb b/lib/irb/color.rb index df3c4ff63d..aa4c60aa12 100644 --- a/lib/irb/color.rb +++ b/lib/irb/color.rb @@ -56,7 +56,7 @@ module IRB # :nodoc: on_tstring_content: [[RED], ALL], on_tstring_end: [[RED], ALL], on_words_beg: [[RED], ALL], - ERROR: [[RED, REVERSE], ALL], + on_parse_error: [[RED, REVERSE], ALL], } rescue NameError # Give up highlighting Ripper-incompatible older Ruby @@ -66,16 +66,9 @@ module IRB # :nodoc: class Lexer < Ripper::Lexer if method_defined?(:token) - def self.lex(code) - new(code).parse.sort_by {|elem| elem.pos.dup << elem.event} + def on_parse_error(mesg) + @buf.push Elem.new([lineno(), column()], __callee__, token(), state()) end - - def on_error(mesg) - # :ERROR comes before other :on_ symbols - @buf.push Elem.new([lineno(), column()], :ERROR, token(), state()) - end - alias compile_error on_error - alias on_parse_error on_error end end @@ -117,33 +110,25 @@ module IRB # :nodoc: symbol_state = SymbolState.new colored = +'' length = 0 - pos = [1, 0] - Lexer.lex(code).each do |elem| + Lexer.new(code).parse.sort_by(&:pos).each do |elem| token = elem.event str = elem.tok expr = elem.state in_symbol = symbol_state.scan_token(token) - next if ([elem.pos[0], elem.pos[1] + str.bytesize] <=> pos) <= 0 - Reline::Unicode.escape_for_print(str).each_line do |line| - if seq = dispatch_seq(token, expr, str, in_symbol: in_symbol) + if seq = dispatch_seq(token, expr, str, in_symbol: in_symbol) + Reline::Unicode.escape_for_print(str).each_line do |line| colored << seq.map { |s| "\e[#{s}m" }.join('') colored << line.sub(/\Z/, clear) - else - colored << line - end - if line.end_with?("\n") - pos[0] += 1 - pos[1] = 0 - else - pos[1] += line.bytesize end + else + colored << Reline::Unicode.escape_for_print(str) end - length += str.bytesize + length += str.length end # give up colorizing incomplete Ripper tokens - return code if length != code.bytesize + return code if length != code.length colored end @@ -151,9 +136,7 @@ module IRB # :nodoc: private def dispatch_seq(token, expr, str, in_symbol:) - if token == :ERROR - TOKEN_SEQ_EXPRS[token][0] - elsif in_symbol + if in_symbol [YELLOW] elsif TOKEN_KEYWORDS.fetch(token, []).include?(str) [CYAN, BOLD] |