class SyntaxSuggest::LexAll - syntax_suggest: Ruby Standard Library Documentation

# 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