Class: RDoc::Parser::RubyColorizer::DeferredContext
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/rdoc/parser/ruby_colorizer.rb |
Overview
Defers colorization for all nodes in one source file until first access.
Class Method Summary
-
.new(source) ⇒ DeferredContext
constructor
: (String) -> void.
Instance Attribute Summary
-
#materialized? ⇒ Boolean
readonly
private
: () -> Boolean.
Instance Method Summary
-
#token_stream_for(node_id)
: (Integer) -> Array.
-
#token_stream_loader(node_id)
: (Integer) -> ^() -> Array.
-
#materialize
private
: () -> void.
Constructor Details
.new(source) ⇒ DeferredContext
: (String) -> void
# File 'lib/rdoc/parser/ruby_colorizer.rb', line 18
def initialize(source) @source = source @token_streams = {} end
Instance Attribute Details
#materialized? ⇒ Boolean (readonly, private)
: () -> Boolean
# File 'lib/rdoc/parser/ruby_colorizer.rb', line 38
def materialized? !@source end
Instance Method Details
#materialize (private)
: () -> void
# File 'lib/rdoc/parser/ruby_colorizer.rb', line 43
def materialize program_node, unordered_tokens = Prism.parse_lex(@source).value prism_tokens = unordered_tokens.map(&:first).sort_by! { |token| token.location.start_offset } staged_tokens = {} nodes = [program_node] until nodes.empty? node = nodes.pop if @token_streams.key?(node.node_id) staged_tokens[node.node_id] = RubyColorizer.partial_colorize(@source, node, prism_tokens) end nodes.concat(node.compact_child_nodes) end @token_streams = staged_tokens @source = nil end
#token_stream_for(node_id)
: (Integer) -> Array
# File 'lib/rdoc/parser/ruby_colorizer.rb', line 30
def token_stream_for(node_id) materialize unless materialized? @token_streams.fetch(node_id) end
#token_stream_loader(node_id)
: (Integer) -> ^() -> Array
# File 'lib/rdoc/parser/ruby_colorizer.rb', line 24
def token_stream_loader(node_id) @token_streams[node_id] = nil #=> { token_stream_for(node_id) } end