Class: RDoc::Parser::RubyColorizer::NodeColorizeVisitor
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Prism::Visitor
|
|
|
Instance Chain:
self,
Prism::Visitor
|
|
| Inherits: |
Prism::Visitor
|
| Defined in: | lib/rdoc/parser/ruby_colorizer.rb |
Overview
Visitor to determine node colorizing which can't be determined by tokens. STRING_CONTENT/EMBEXPR_BEGIN/EMBEXPR_END in string/regexp/symbol have different colorizing
Class Method Summary
- .new ⇒ NodeColorizeVisitor constructor
Instance Attribute Summary
- #tokens readonly
Instance Method Summary
- #visit_array_node(node)
- #visit_def_node(node)
- #visit_interpolated_match_last_line_node(node)
- #visit_interpolated_regular_expression_node(node) (also: #visit_interpolated_match_last_line_node)
- #visit_interpolated_string_node(node)
- #visit_interpolated_symbol_node(node)
- #visit_interpolated_x_string_node(node)
- #visit_match_last_line_node(node)
- #visit_regular_expression_node(node) (also: #visit_match_last_line_node)
- #visit_string_node(node)
- #visit_symbol_node(node)
- #visit_x_string_node(node)
- #handle_interpolated_parts(kind, parts) private
- #push_location(kind, location) private
Constructor Details
.new ⇒ NodeColorizeVisitor
# File 'lib/rdoc/parser/ruby_colorizer.rb', line 138
def initialize @tokens = [] end
Instance Attribute Details
#tokens (readonly)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 136
attr_reader :tokens
Instance Method Details
#handle_interpolated_parts(kind, parts) (private)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 228
def handle_interpolated_parts(kind, parts) # StringNode, EmbeddedStatementsNode brackets, and EmbeddedVariableNode hash in # interpolated regexp/symbol/string parts should be colored as regexp/symbol/string respectively. parts.each do |part| case part when Prism::StringNode # InterpolatedStringNode#parts may have its own opening/closing. e.g., `'a' "b"` push_location(kind, part.opening_loc) push_location(kind, part.content_loc) push_location(kind, part.closing_loc) when Prism::InterpolatedStringNode # InterpolatedStringNode#parts may contain InterpolatedStringNode. e.g., `'a' "#{}"` part.accept(self) when Prism::EmbeddedStatementsNode push_location(kind, part.opening_loc) push_location(kind, part.closing_loc) part.accept(self) when Prism::EmbeddedVariableNode push_location(kind, part.operator_loc) end end end
#push_location(kind, location) (private)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 221
def push_location(kind, location) # Only push tokens that have a non-zero length if location && location.start_offset < location.end_offset @tokens << [kind, location.start_offset, location.end_offset] end end
#visit_array_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 199
def visit_array_node(node) super # Colorize %w[...] array literal like string literals, and %i[...] like symbol literals case node.opening when /\A%[wW].\z/ push_location(:string, node.opening_loc) push_location(:string, node.closing_loc) when /\A%[iI].\z/ push_location(:symbol, node.opening_loc) push_location(:symbol, node.closing_loc) end end
#visit_def_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 212
def visit_def_node(node) # For special colorizing of method name in def node # e.g., `def <=>; end` push_location(:identifier, node.name_loc) super end
#visit_interpolated_match_last_line_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 168
alias visit_interpolated_match_last_line_node visit_interpolated_regular_expression_node
#visit_interpolated_regular_expression_node(node) Also known as: #visit_interpolated_match_last_line_node
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 161
def visit_interpolated_regular_expression_node(node) push_location(:regexp, node.opening_loc) handle_interpolated_parts(:regexp, node.parts) push_location(:regexp, node.closing_loc) end
#visit_interpolated_string_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 179
def visit_interpolated_string_node(node) push_location(:string, node.opening_loc) handle_interpolated_parts(:string, node.parts) push_location(:string, node.closing_loc) end
#visit_interpolated_symbol_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 151
def visit_interpolated_symbol_node(node) push_location(:symbol, node.opening_loc) handle_interpolated_parts(:symbol, node.parts) push_location(:symbol, node.closing_loc) end
#visit_interpolated_x_string_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 193
def visit_interpolated_x_string_node(node) push_location(:x_string, node.opening_loc) handle_interpolated_parts(:x_string, node.parts) push_location(:x_string, node.closing_loc) end
#visit_match_last_line_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 167
alias visit_match_last_line_node visit_regular_expression_node
#visit_regular_expression_node(node) Also known as: #visit_match_last_line_node
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 157
def visit_regular_expression_node(node) push_location(:regexp, node.location) end
#visit_string_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 170
def visit_string_node(node) # Node's location may not cover the entire string literal. # For example, in a heredoc string, the node's location covers only the heredoc opening. # We need to colorize opening, content and closing separately. push_location(:string, node.opening_loc) push_location(:string, node.content_loc) push_location(:string, node.closing_loc) end
#visit_symbol_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 142
def visit_symbol_node(node) # SymbolNode#location may contain heredoc content and closing # e.g., `<<A; :\\\nA\nsymbol` # So we need to colorize opening, content and closing separately. push_location(:symbol, node.opening_loc) push_location(:symbol, node.value_loc) push_location(:symbol, node.closing_loc) end
#visit_x_string_node(node)
[ GitHub ]# File 'lib/rdoc/parser/ruby_colorizer.rb', line 185
def visit_x_string_node(node) # Same as visit_string_node, node.location of <<`X` only covers opening, # so we need to colorize opening, content and closing separately. push_location(:x_string, node.opening_loc) push_location(:x_string, node.content_loc) push_location(:x_string, node.closing_loc) end