123456789_123456789_123456789_123456789_123456789_

Class: Prism::LexRipper

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
Defined in: lib/prism/lex_compat.rb

Overview

This is a class that wraps the Ripper lexer to produce almost exactly the same tokens.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(source) ⇒ LexRipper

[ GitHub ]

  
# File 'lib/prism/lex_compat.rb', line 855

def initialize(source)
  @source = source
end

Instance Attribute Details

#source (readonly)

[ GitHub ]

  
# File 'lib/prism/lex_compat.rb', line 853

attr_reader :source

Instance Method Details

#result

[ GitHub ]

  
# File 'lib/prism/lex_compat.rb', line 859

def result
  previous = []
  results = []

  Ripper.lex(source, raise_errors: true).each do |token|
    case token[1]
    when :on_sp
      # skip
    when :on_tstring_content
      if previous[1] == :on_tstring_content && (token[2].start_with?("\#$") || token[2].start_with?("\#@"))
        previous[2] << token[2]
      else
        results << token
        previous = token
      end
    when :on_words_sep
      if previous[1] == :on_words_sep
        previous[2] << token[2]
      else
        results << token
        previous = token
      end
    else
      results << token
      previous = token
    end
  end

  results
end