PHP 8.2.31
Preview: lex_ripper.rb Size: 1.50 KB
/proc/thread-self/root/opt/alt/ruby40/share/ruby/prism/lex_ripper.rb

# frozen_string_literal: true
# :markup: markdown

require "ripper"

module Prism
  # This is a class that wraps the Ripper lexer to produce almost exactly the
  # same tokens.
  class LexRipper # :nodoc:
    attr_reader :source

    def initialize(source)
      @source = source
    end

    def result
      previous = [] #: [[Integer, Integer], Symbol, String, untyped] | []
      results = [] #: Array[[[Integer, Integer], Symbol, String, untyped]]

      lex(source).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

    private

    if Ripper.method(:lex).parameters.assoc(:keyrest)
      def lex(source)
        Ripper.lex(source, raise_errors: true)
      end
    else
      def lex(source)
        ripper = Ripper::Lexer.new(source)
        ripper.lex.tap do |result|
          raise SyntaxError, ripper.errors.map(&:message).join(' ;') if ripper.errors.any?
        end
      end
    end
  end

  private_constant :LexRipper
end

Directory Contents

Dirs: 3 × Files: 21

Name Size Perms Modified Actions
- drwxr-xr-x 2026-06-09 07:03:21
Edit Download
polyfill DIR
- drwxr-xr-x 2026-06-09 07:03:21
Edit Download
- drwxr-xr-x 2026-06-09 07:03:21
Edit Download
23.17 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
9.89 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
111.71 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
118.26 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
56.79 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
19.63 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
124.70 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
31.18 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
1.50 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
21.10 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
623.78 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
14.97 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
5.88 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
29.17 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
8.16 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
28.86 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
15.12 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
124.83 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download
775 B lrw-r--r-- 2026-05-21 12:15:22
Edit Download
727 B lrw-r--r-- 2026-05-21 12:15:22
Edit Download
22.79 KB lrw-r--r-- 2026-05-21 12:15:22
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).