module RDoc::Parser::RubyColorizer

Ruby code syntax highlighter. Colorize result is an array of RDoc::Parser::RubyColorizer::ColoredToken Actual color for each token kind is determined elsewhere (e.g., HTML generator)

Constants

ColoredToken
OP_TOKENS

Prism operator token types except assignment ‘=’

TOKEN_TYPE_MAP

Prism token type to ColoredToken kind map

Public Class Methods

Colorize the entire code and returns colored token stream.

# File lib/rdoc/parser/ruby_colorizer.rb, line 101
def colorize(code)
  result = Prism.parse_lex(code)
  program_node, unordered_tokens = result.value
  prism_tokens = unordered_tokens.map(&:first).sort_by! { |token| token.location.start_offset }
  partial_colorize(code, program_node, prism_tokens, 0, code.bytesize)
end

Colorize partial node in whole_code and returns colored token stream.

# File lib/rdoc/parser/ruby_colorizer.rb, line 109
def partial_colorize(whole_code, node, prism_tokens, start_offset = nil, end_offset = nil)
  start_offset ||= node.location.start_offset
  end_offset ||= node.location.end_offset
  visitor = NodeColorizeVisitor.new
  node.accept(visitor)
  prior_tokens = visitor.tokens.sort_by {|_, start_offset, _| start_offset }
  normal_tokens = normal_tokens(slice_by_location(prism_tokens, start_offset, end_offset))
  colored_tokens = unify_tokens(whole_code, prior_tokens, normal_tokens, start_offset, end_offset)
  colored_tokens.unshift(ColoredToken.new(:plain, ' ' * node.location.start_column)) if node.location.start_column > 0
  colored_tokens
end