Class
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
Class Methods
lib/syntax_suggest/lex_all.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/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
No documentation available
lib/syntax_suggest/lex_all.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/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
No documentation available
Instance Methods
lib/syntax_suggest/lex_all.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/syntax_suggest/lex_all.rb, line 64
def [](index)
@lex[index]
end
No documentation available
lib/syntax_suggest/lex_all.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/syntax_suggest/lex_all.rb, line 57
def each
return @lex.each unless block_given?
@lex.each do |x|
yield x
end
end
No documentation available
#
lib/syntax_suggest/lex_all.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/syntax_suggest/lex_all.rb, line 68
def last
@lex.last
end
No documentation available
#
lib/syntax_suggest/lex_all.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/syntax_suggest/lex_all.rb, line 53
def to_a
@lex
end
No documentation available