class SyntaxSuggest::LexAll
Ripper.lex is not guaranteed to lex the entire source document
This class guarantees the whole document is lex-ed by iteratively lexing the document where ripper stopped.
Prism likely doesn’t have the same problem. Once ripper support is removed we can likely reduce the complexity here if not remove the whole concept.
Example usage:
lex = LexAll.new(source: source) lex.each do |value| puts value.line end
Public Class Methods
lex(source, line_number)
click to toggle source
# File syntax_suggest/lex_all.rb, line 44 def self.lex(source, line_number) Prism.lex_compat(source, line: line_number).value.sort_by { |values| values[0] } end
new(source:, source_lines: nil)
click to toggle source
# File syntax_suggest/lex_all.rb, line 21 def initialize(source:, source_lines: nil) @lex = self.class.lex(source, 1) lineno = @lex.last[0][0] + 1 source_lines ||= source.lines last_lineno = source_lines.length until lineno >= last_lineno lines = source_lines[lineno..] @lex.concat( self.class.lex(lines.join, lineno + 1) ) lineno = @lex.last[0].first + 1 end last_lex = nil @lex.map! { |elem| last_lex = LexValue.new(elem[0].first, elem[1], elem[2], elem[3], last_lex) } end
Public Instance Methods
[](index)
click to toggle source
# File syntax_suggest/lex_all.rb, line 64 def [](index) @lex[index] end
each() { |x| ... }
click to toggle source
# File syntax_suggest/lex_all.rb, line 57 def each return @lex.each unless block_given? @lex.each do |x| yield x end end
last()
click to toggle source
# File syntax_suggest/lex_all.rb, line 68 def last @lex.last end
to_a()
click to toggle source
# File syntax_suggest/lex_all.rb, line 53 def to_a @lex end