# This file is generated by the templates/template.rb script and should not be # modified manually. See templates/sig/prism.rbs.erb # if you are looking to modify the template

module Prism

BACKEND: :CEXT | :FFI
VERSION: String

class CurrentVersionError < ArgumentError
  def initialize: (String version) -> void
end

# Methods taking a Ruby source code string:

def self.parse: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> ParseResult

def self.profile: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> nil

def self.lex: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> LexResult

def self.lex_compat: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> LexCompat::Result

def self.parse_lex: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> ParseLexResult

def self.dump: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> String

def self.parse_comments: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> Array[comment]

def self.parse_success?: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> bool

def self.parse_failure?: (
  String source,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> bool

def self.load: (
  String source,
  String serialized,
  ?bool freeze
) -> ParseResult

# Methods taking a path to a Ruby file:

def self.parse_file: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> ParseResult

def self.profile_file: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> nil

def self.lex_file: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> LexResult

def self.parse_lex_file: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> ParseLexResult

def self.dump_file: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> String

def self.parse_file_comments: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> Array[comment]

def self.parse_file_success?: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> bool

def self.parse_file_failure?: (
  String filepath,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> bool

interface _Stream
  def gets: (?Integer integer) -> (String | nil)
end

def self.parse_stream: (
  _Stream stream,
  ?command_line: String,
  ?encoding: Encoding | false,
  ?filepath: String,
  ?freeze: bool,
  ?frozen_string_literal: bool,
  ?line: Integer,
  ?main_script: bool,
  ?partial_script: bool,
  ?scopes: Array[Array[Symbol]],
  ?version: String
) -> ParseResult

def self.scope: (?locals: Array[Symbol], ?forwarding: Array[Symbol]) -> Scope

end