module Prism

class Node
  def deprecated: (*String replacements) -> void
end

class InterpolatedMatchLastLineNode < Node
  def options: () -> Integer
end

class InterpolatedRegularExpressionNode < Node
  def options: () -> Integer
end

class MatchLastLineNode < Node
  def options: () -> Integer
end

class RegularExpressionNode < Node
  def options: () -> Integer
end

class InterpolatedStringNode < Node
  def heredoc?: () -> bool
end

class InterpolatedXStringNode < Node
  def heredoc?: () -> bool
end

class StringNode < Node
  def heredoc?: () -> bool
  def to_interpolated: () -> InterpolatedStringNode
end

class XStringNode < Node
  def heredoc?: () -> bool
  def to_interpolated: () -> InterpolatedXStringNode
end

class ImaginaryNode < Node
  def value: () -> Complex
end

class RationalNode < Node
  def value: () -> Rational
  def numeric: () -> (IntegerNode | FloatNode)
end

class ConstantReadNode < Node
  def full_name_parts: () -> Array[Symbol]
  def full_name: () -> String
end

class ConstantWriteNode < Node
  def full_name_parts: () -> Array[Symbol]
  def full_name: () -> String
end

class ConstantPathNode < Node
  class DynamicPartsInConstantPathError < StandardError
  end

  class MissingNodesInConstantPathError < StandardError
  end

  def full_name_parts: () -> Array[Symbol]
  def full_name: () -> String
  def child: () -> (ConstantReadNode | MissingNode)
end

class ConstantPathTargetNode < Node
  def full_name_parts: () -> Array[Symbol]
  def full_name: () -> String
  def child: () -> (ConstantReadNode | MissingNode)
end

class ConstantTargetNode < Node
  def full_name_parts: () -> Array[Symbol]
  def full_name: () -> String
end

class ParametersNode < Node
  def signature: () -> Array[[Symbol, Symbol] | [Symbol]]
end

class CallNode < Node
  def full_message_loc: () -> Location?
end

class CallOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class ClassVariableOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class ConstantOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class ConstantPathOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class GlobalVariableOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class IndexOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class InstanceVariableOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class LocalVariableOperatorWriteNode < Node
  def operator: () -> Symbol
  def operator_loc: () -> Location
end

class CaseMatchNode < Node
  def consequent: () -> ElseNode?
end

class CaseNode < Node
  def consequent: () -> ElseNode?
end

class IfNode < Node
  def consequent: () -> (ElseNode | IfNode | nil)
end

class RescueNode < Node
  def consequent: () -> RescueNode?
end

class UnlessNode < Node
  def consequent: () -> ElseNode?
end

end