Sha256: ab2664fa30a93b42c040b7f380c3d3bfa60a10998c07e7eb848cf478d7e26365
Contents?: true
Size: 1.11 KB
Versions: 3
Compression:
Stored size: 1.11 KB
Contents
# frozen_string_literal: true module DeadEnd # Ripper.lex is not guaranteed to lex the entire source document # # lex = LexAll.new(source: source) # lex.each do |value| # puts value.line # end class LexAll include Enumerable def initialize(source:, source_lines: nil) @lex = Ripper::Lexer.new(source, "-", 1).parse.sort_by(&:pos) lineno = @lex.last.pos.first + 1 source_lines ||= source.lines last_lineno = source_lines.length until lineno >= last_lineno lines = source_lines[lineno..-1] @lex.concat( Ripper::Lexer.new(lines.join, "-", lineno + 1).parse.sort_by(&:pos) ) lineno = @lex.last.pos.first + 1 end last_lex = nil @lex.map! { |elem| last_lex = LexValue.new(elem.pos.first, elem.event, elem.tok, elem.state, last_lex) } end def to_a @lex end def each return @lex.each unless block_given? @lex.each do |x| yield x end end def [](index) @lex[index] end def last @lex.last end end end require_relative "lex_value"
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dead_end-4.0.0 | lib/dead_end/lex_all.rb |
dead_end-3.1.2 | lib/dead_end/lex_all.rb |
dead_end-3.1.1 | lib/dead_end/lex_all.rb |