class Prism::Translation::RubyParser

This module is the entry-point for converting a prism syntax tree into the seattlerb/ruby_parser gem’s syntax tree.

Public Class Methods

parse(source, filepath = "(string)") click to toggle source

Parse the given source and translate it into the seattlerb/ruby_parser gem’s Sexp format.

# File lib/prism/translation/ruby_parser.rb, line 1938
def parse(source, filepath = "(string)")
  new.parse(source, filepath)
end
parse_file(filepath) click to toggle source

Parse the given file and translate it into the seattlerb/ruby_parser gem’s Sexp format.

# File lib/prism/translation/ruby_parser.rb, line 1944
def parse_file(filepath)
  new.parse_file(filepath)
end

Public Instance Methods

parse(source, filepath = "(string)") click to toggle source

Parse the given source and translate it into the seattlerb/ruby_parser gem’s Sexp format.

# File lib/prism/translation/ruby_parser.rb, line 1917
def parse(source, filepath = "(string)")
  translate(Prism.parse(source, filepath: filepath, partial_script: true), filepath)
end
parse_file(filepath) click to toggle source

Parse the given file and translate it into the seattlerb/ruby_parser gem’s Sexp format.

# File lib/prism/translation/ruby_parser.rb, line 1923
def parse_file(filepath)
  translate(Prism.parse_file(filepath, partial_script: true), filepath)
end
process(ruby, file = "(string)", timeout = nil) click to toggle source

Parse the give file and translate it into the seattlerb/ruby_parser gem’s Sexp format. This method is provided for API compatibility to RubyParser and takes an optional timeout argument.

# File lib/prism/translation/ruby_parser.rb, line 1931
def process(ruby, file = "(string)", timeout = nil)
  Timeout.timeout(timeout) { parse(ruby, file) }
end

Private Instance Methods

translate(result, filepath) click to toggle source

Translate the given parse result and filepath into the seattlerb/ruby_parser gem’s Sexp format.

# File lib/prism/translation/ruby_parser.rb, line 1953
def translate(result, filepath)
  if result.failure?
    error = result.errors.first
    raise ::RubyParser::SyntaxError, "#{filepath}:#{error.location.start_line} :: #{error.message}"
  end

  result.attach_comments!
  result.value.accept(Compiler.new(filepath))
end