class Parser::Runner::RubyParse::LocationProcessor
Public Instance Methods
process(node)
click to toggle source
Calls superclass method
# File lib/parser/runner/ruby_parse.rb, line 12 def process(node) if node p node source_line_no = nil source_line = '' hilight_line = '' print_line = lambda do unless hilight_line.empty? puts hilight_line. gsub(/[a-z_]+/) { |m| Color.yellow(m, bold: true) }. gsub(/[~.]+/) { |m| Color.magenta(m, bold: true) } hilight_line = '' end end print_source = lambda do |range| source_line = range.source_line puts Color.green(source_line) source_line end (node.loc || {}).to_hash. sort_by do |name, range| [(range ? range.line : 0), (name == :expression ? 1 : 0)] end. each do |name, range| next if range.nil? if source_line_no != range.line print_line.call() source_line = print_source.call(range) source_line_no = range.line end beg_col = range.begin.column if beg_col + range.length > source_line.length multiline = true range_length = source_line.length - beg_col + 3 else multiline = false range_length = range.length end length = range_length + 1 + name.length end_col = beg_col + length if beg_col > 0 col_range = (beg_col - 1)...end_col else col_range = beg_col...end_col end if hilight_line.length < end_col hilight_line = hilight_line.ljust(end_col) end if hilight_line[col_range] =~ /^\s*$/ if multiline tail = ('~' * (source_line.length - beg_col)) + '...' else tail = '~' * range_length end tail = ' ' + tail if beg_col > 0 hilight_line[col_range] = tail + " #{name}" else print_line.call redo end end print_line.call end super end