class SyntaxSuggest::LexAll
Ripper.lex garantiert nicht, dass das gesamte Quellcode-Dokument lexikalisiert wird
Diese Klasse garantiert, dass das gesamte Dokument lexikalisiert wird, indem sie das Dokument iterativ lexikalisiert, wo Ripper aufgehört hat.
Prism hat wahrscheinlich nicht dasselbe Problem. Sobald die Ripper-Unterstützung entfernt wird, können wir die Komplexität hier wahrscheinlich reduzieren, wenn nicht sogar das gesamte Konzept entfernen.
Beispielverwendung
lex = LexAll.new(source: source) lex.each do |value| puts value.line end
Öffentliche Klassenmethoden
Source
# File lib/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
Source
# File lib/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
Öffentliche Instanzmethoden
Source
# File lib/syntax_suggest/lex_all.rb, line 57 def each return @lex.each unless block_given? @lex.each do |x| yield x end end