class RDoc::Parser::RubyColorizer::DeferredContext
Defers colorization for all nodes in one source file until first access.
Public Class Methods
(String) → void
Source
# File lib/rdoc/parser/ruby_colorizer.rb, line 16 def initialize(source) @source = source @token_streams = {} end
Public Instance Methods
() → void
Source
# File lib/rdoc/parser/ruby_colorizer.rb, line 34 def materialize return unless @source 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] = RDoc::Parser::RubyColorizer.partial_colorize(@source, node, prism_tokens) end nodes.concat(node.compact_child_nodes) end @token_streams.replace(@token_streams.to_h { |node_id,| [node_id, staged_tokens.fetch(node_id)] }) @source = nil end
(Integer) → Array[ColoredToken]
Source
# File lib/rdoc/parser/ruby_colorizer.rb, line 28 def token_stream_for(node_id) materialize if @source @token_streams.fetch(node_id) end
(Integer) → ^() → Array[ColoredToken]
Source
# File lib/rdoc/parser/ruby_colorizer.rb, line 22 def token_stream_loader(node_id) @token_streams[node_id] = nil -> { token_stream_for(node_id) } end