# typed: true

# DO NOT EDIT MANUALLY
# This is an autogenerated file for types exported from the `yarp` gem.
# Please instead update this file by running `bin/tapioca gem yarp`.

# This file is generated by the templates/template.rb script and should not be
# modified manually. See templates/lib/prism/visitor.rb.erb
# if you are looking to modify the template
#
# source://yarp//lib/prism.rb#3
module Prism
  class << self
    # Mirror the Prism.dump API by using the serialization API.
    def dump(*_arg0); end

    # Mirror the Prism.dump_file API by using the serialization API.
    def dump_file(_arg0); end

    # Mirror the Prism.lex API by using the serialization API.
    def lex(*_arg0); end

    # Returns an array of tokens that closely resembles that of the Ripper lexer.
    # The only difference is that since we don't keep track of lexer state in the
    # same way, it's going to always return the NONE state.
    #
    # source://yarp//lib/prism.rb#33
    def lex_compat(source, filepath = T.unsafe(nil)); end

    # Mirror the Prism.lex_file API by using the serialization API.
    def lex_file(_arg0); end

    # This lexes with the Ripper lex. It drops any space events but otherwise
    # returns the same tokens. Raises SyntaxError if the syntax in source is
    # invalid.
    #
    # source://yarp//lib/prism.rb#40
    def lex_ripper(source); end

    # Load the serialized AST using the source as a reference into a tree.
    #
    # source://yarp//lib/prism.rb#45
    def load(source, serialized); end

    # Mirror the Prism.parse API by using the serialization API.
    def parse(*_arg0); end

    # Mirror the Prism.parse_file API by using the serialization API. This uses
    # native strings instead of Ruby strings because it allows us to use mmap when
    # it is available.
    def parse_file(_arg0); end

    # Mirror the Prism.parse_lex API by using the serialization API.
    def parse_lex(*_arg0); end

    # Mirror the Prism.parse_lex_file API by using the serialization API.
    def parse_lex_file(_arg0); end
  end
end

# Represents the use of the `alias` keyword to alias a global variable.
#
#     alias $foo $bar
#     ^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#45
class Prism::AliasGlobalVariableNode < ::Prism::Node
  # def initialize: (new_name: Node, old_name: Node, keyword_loc: Location, location: Location) -> void
  #
  # @return [AliasGlobalVariableNode] a new instance of AliasGlobalVariableNode
  #
  # source://yarp//lib/prism/node.rb#56
  def initialize(new_name, old_name, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#64
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#69
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#79
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#74
  def compact_child_nodes; end

  # def copy: (**params) -> AliasGlobalVariableNode
  #
  # source://yarp//lib/prism/node.rb#84
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#69
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#97
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#106
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#102
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#53
  def keyword_loc; end

  # attr_reader new_name: Node
  #
  # source://yarp//lib/prism/node.rb#47
  def new_name; end

  # attr_reader old_name: Node
  #
  # source://yarp//lib/prism/node.rb#50
  def old_name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#130
  def type; end
end

# Represents the use of the `alias` keyword to alias a method.
#
#     alias foo bar
#     ^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#139
class Prism::AliasMethodNode < ::Prism::Node
  # def initialize: (new_name: Node, old_name: Node, keyword_loc: Location, location: Location) -> void
  #
  # @return [AliasMethodNode] a new instance of AliasMethodNode
  #
  # source://yarp//lib/prism/node.rb#150
  def initialize(new_name, old_name, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#158
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#163
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#173
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#168
  def compact_child_nodes; end

  # def copy: (**params) -> AliasMethodNode
  #
  # source://yarp//lib/prism/node.rb#178
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#163
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#191
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#200
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#196
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#147
  def keyword_loc; end

  # attr_reader new_name: Node
  #
  # source://yarp//lib/prism/node.rb#141
  def new_name; end

  # attr_reader old_name: Node
  #
  # source://yarp//lib/prism/node.rb#144
  def old_name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#224
  def type; end
end

# Represents an alternation pattern in pattern matching.
#
#     foo => bar | baz
#            ^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#233
class Prism::AlternationPatternNode < ::Prism::Node
  # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [AlternationPatternNode] a new instance of AlternationPatternNode
  #
  # source://yarp//lib/prism/node.rb#244
  def initialize(left, right, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#252
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#257
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#267
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#262
  def compact_child_nodes; end

  # def copy: (**params) -> AlternationPatternNode
  #
  # source://yarp//lib/prism/node.rb#272
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#257
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#285
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#294
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node
  #
  # source://yarp//lib/prism/node.rb#235
  def left; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#290
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#241
  def operator_loc; end

  # attr_reader right: Node
  #
  # source://yarp//lib/prism/node.rb#238
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#318
  def type; end
end

# Represents the use of the `&&` operator or the `and` keyword.
#
#     left and right
#     ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#327
class Prism::AndNode < ::Prism::Node
  # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [AndNode] a new instance of AndNode
  #
  # source://yarp//lib/prism/node.rb#338
  def initialize(left, right, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#346
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#351
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#361
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#356
  def compact_child_nodes; end

  # def copy: (**params) -> AndNode
  #
  # source://yarp//lib/prism/node.rb#366
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#351
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#379
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#388
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node
  #
  # source://yarp//lib/prism/node.rb#329
  def left; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#384
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#335
  def operator_loc; end

  # attr_reader right: Node
  #
  # source://yarp//lib/prism/node.rb#332
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#412
  def type; end
end

# Represents a set of arguments to a method or a keyword.
#
#     return foo, bar, baz
#            ^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#421
class Prism::ArgumentsNode < ::Prism::Node
  # def initialize: (arguments: Array[Node], location: Location) -> void
  #
  # @return [ArgumentsNode] a new instance of ArgumentsNode
  #
  # source://yarp//lib/prism/node.rb#426
  def initialize(arguments, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#432
  def accept(visitor); end

  # attr_reader arguments: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#423
  def arguments; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#437
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#447
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#442
  def compact_child_nodes; end

  # def copy: (**params) -> ArgumentsNode
  #
  # source://yarp//lib/prism/node.rb#452
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#437
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#463
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#467
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#487
  def type; end
end

# Represents an array literal. This can be a regular array using brackets or
# a special array using % like %w or %i.
#
#     [1, 2, 3]
#     ^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#497
class Prism::ArrayNode < ::Prism::Node
  # def initialize: (elements: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void
  #
  # @return [ArrayNode] a new instance of ArrayNode
  #
  # source://yarp//lib/prism/node.rb#508
  def initialize(elements, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#516
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#521
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#559
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#505
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#531
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#526
  def compact_child_nodes; end

  # def copy: (**params) -> ArrayNode
  #
  # source://yarp//lib/prism/node.rb#536
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#521
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#549
  def deconstruct_keys(keys); end

  # attr_reader elements: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#499
  def elements; end

  # source://yarp//lib/prism/node.rb#563
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#554
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#502
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#585
  def type; end
end

# Represents an array pattern in pattern matching.
#
#     foo in 1, 2
#     ^^^^^^^^^^^
#
#     foo in [1, 2]
#     ^^^^^^^^^^^^^
#
#     foo in *1
#     ^^^^^^^^^
#
#     foo in Bar[]
#     ^^^^^^^^^^^^
#
#     foo in Bar[1, 2, 3]
#     ^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#606
class Prism::ArrayPatternNode < ::Prism::Node
  # def initialize: (constant: Node?, requireds: Array[Node], rest: Node?, posts: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void
  #
  # @return [ArrayPatternNode] a new instance of ArrayPatternNode
  #
  # source://yarp//lib/prism/node.rb#626
  def initialize(constant, requireds, rest, posts, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#637
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#642
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#688
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#623
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#657
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#647
  def compact_child_nodes; end

  # attr_reader constant: Node?
  #
  # source://yarp//lib/prism/node.rb#608
  def constant; end

  # def copy: (**params) -> ArrayPatternNode
  #
  # source://yarp//lib/prism/node.rb#662
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#642
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#678
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#692
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#683
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#620
  def opening_loc; end

  # attr_reader posts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#617
  def posts; end

  # attr_reader requireds: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#611
  def requireds; end

  # attr_reader rest: Node?
  #
  # source://yarp//lib/prism/node.rb#614
  def rest; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#727
  def type; end
end

# Represents a hash key/value pair.
#
#     { a => b }
#       ^^^^^^
#
# source://yarp//lib/prism/node.rb#736
class Prism::AssocNode < ::Prism::Node
  # def initialize: (key: Node, value: Node?, operator_loc: Location?, location: Location) -> void
  #
  # @return [AssocNode] a new instance of AssocNode
  #
  # source://yarp//lib/prism/node.rb#747
  def initialize(key, value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#755
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#760
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#773
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#765
  def compact_child_nodes; end

  # def copy: (**params) -> AssocNode
  #
  # source://yarp//lib/prism/node.rb#778
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#760
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#791
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#800
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader key: Node
  #
  # source://yarp//lib/prism/node.rb#738
  def key; end

  # def operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#796
  def operator; end

  # attr_reader operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#744
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#828
  def type; end

  # attr_reader value: Node?
  #
  # source://yarp//lib/prism/node.rb#741
  def value; end
end

# Represents a splat in a hash literal.
#
#     { **foo }
#       ^^^^^
#
# source://yarp//lib/prism/node.rb#837
class Prism::AssocSplatNode < ::Prism::Node
  # def initialize: (value: Node?, operator_loc: Location, location: Location) -> void
  #
  # @return [AssocSplatNode] a new instance of AssocSplatNode
  #
  # source://yarp//lib/prism/node.rb#845
  def initialize(value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#852
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#857
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#869
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#862
  def compact_child_nodes; end

  # def copy: (**params) -> AssocSplatNode
  #
  # source://yarp//lib/prism/node.rb#874
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#857
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#886
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#895
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#891
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#842
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#921
  def type; end

  # attr_reader value: Node?
  #
  # source://yarp//lib/prism/node.rb#839
  def value; end
end

Prism::BACKEND = T.let(T.unsafe(nil), Symbol)

# Represents reading a reference to a field in the previous match.
#
#     $'
#     ^^
#
# source://yarp//lib/prism/node.rb#930
class Prism::BackReferenceReadNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [BackReferenceReadNode] a new instance of BackReferenceReadNode
  #
  # source://yarp//lib/prism/node.rb#932
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#937
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#942
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#952
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#947
  def compact_child_nodes; end

  # def copy: (**params) -> BackReferenceReadNode
  #
  # source://yarp//lib/prism/node.rb#957
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#942
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#967
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#971
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#990
  def type; end
end

# A class that knows how to walk down the tree. None of the individual visit
# methods are implemented on this visitor, so it forces the consumer to
# implement each one that they need. For a default implementation that
# continues walking the tree, see the Visitor class.
#
# source://yarp//lib/prism/visitor.rb#13
class Prism::BasicVisitor
  # source://yarp//lib/prism/visitor.rb#14
  def visit(node); end

  # source://yarp//lib/prism/visitor.rb#18
  def visit_all(nodes); end

  # source://yarp//lib/prism/visitor.rb#22
  def visit_child_nodes(node); end
end

# Represents a begin statement.
#
#     begin
#       foo
#     end
#     ^^^^^
#
# source://yarp//lib/prism/node.rb#1001
class Prism::BeginNode < ::Prism::Node
  # def initialize: (begin_keyword_loc: Location?, statements: StatementsNode?, rescue_clause: RescueNode?, else_clause: ElseNode?, ensure_clause: EnsureNode?, end_keyword_loc: Location?, location: Location) -> void
  #
  # @return [BeginNode] a new instance of BeginNode
  #
  # source://yarp//lib/prism/node.rb#1021
  def initialize(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1032
  def accept(visitor); end

  # def begin_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1082
  def begin_keyword; end

  # attr_reader begin_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1003
  def begin_keyword_loc; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1041
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1056
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1046
  def compact_child_nodes; end

  # def copy: (**params) -> BeginNode
  #
  # source://yarp//lib/prism/node.rb#1061
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1041
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1077
  def deconstruct_keys(keys); end

  # attr_reader else_clause: ElseNode?
  #
  # source://yarp//lib/prism/node.rb#1012
  def else_clause; end

  # def end_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1087
  def end_keyword; end

  # attr_reader end_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1018
  def end_keyword_loc; end

  # attr_reader ensure_clause: EnsureNode?
  #
  # source://yarp//lib/prism/node.rb#1015
  def ensure_clause; end

  # source://yarp//lib/prism/node.rb#1091
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader rescue_clause: RescueNode?
  #
  # source://yarp//lib/prism/node.rb#1009
  def rescue_clause; end

  # source://yarp//lib/prism/node.rb#1036
  def set_newline_flag(newline_marked); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#1006
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1136
  def type; end
end

# Represents block method arguments.
#
#     bar(&args)
#     ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#1145
class Prism::BlockArgumentNode < ::Prism::Node
  # def initialize: (expression: Node?, operator_loc: Location, location: Location) -> void
  #
  # @return [BlockArgumentNode] a new instance of BlockArgumentNode
  #
  # source://yarp//lib/prism/node.rb#1153
  def initialize(expression, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1160
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1165
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1177
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1170
  def compact_child_nodes; end

  # def copy: (**params) -> BlockArgumentNode
  #
  # source://yarp//lib/prism/node.rb#1182
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1165
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1194
  def deconstruct_keys(keys); end

  # attr_reader expression: Node?
  #
  # source://yarp//lib/prism/node.rb#1147
  def expression; end

  # source://yarp//lib/prism/node.rb#1203
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#1199
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#1150
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1229
  def type; end
end

# Represents a block local variable.
#
#     a { |; b| }
#            ^
#
# source://yarp//lib/prism/node.rb#1238
class Prism::BlockLocalVariableNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [BlockLocalVariableNode] a new instance of BlockLocalVariableNode
  #
  # source://yarp//lib/prism/node.rb#1243
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1249
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1254
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1264
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1259
  def compact_child_nodes; end

  # def copy: (**params) -> BlockLocalVariableNode
  #
  # source://yarp//lib/prism/node.rb#1269
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1254
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1280
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#1284
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#1240
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1304
  def type; end
end

# Represents a block of ruby code.
#
# [1, 2, 3].each { |i| puts x }
#                ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#1313
class Prism::BlockNode < ::Prism::Node
  # def initialize: (locals: Array[Symbol], parameters: BlockParametersNode?, body: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void
  #
  # @return [BlockNode] a new instance of BlockNode
  #
  # source://yarp//lib/prism/node.rb#1330
  def initialize(locals, parameters, body, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1340
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#1321
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1345
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#1388
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#1327
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1358
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1350
  def compact_child_nodes; end

  # def copy: (**params) -> BlockNode
  #
  # source://yarp//lib/prism/node.rb#1363
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1345
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1378
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#1392
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#1315
  def locals; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#1383
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#1324
  def opening_loc; end

  # attr_reader parameters: BlockParametersNode?
  #
  # source://yarp//lib/prism/node.rb#1318
  def parameters; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1426
  def type; end
end

# Represents a block parameter to a method, block, or lambda definition.
#
#     def a(&b)
#           ^^
#     end
#
# source://yarp//lib/prism/node.rb#1436
class Prism::BlockParameterNode < ::Prism::Node
  # def initialize: (name: Symbol?, name_loc: Location?, operator_loc: Location, location: Location) -> void
  #
  # @return [BlockParameterNode] a new instance of BlockParameterNode
  #
  # source://yarp//lib/prism/node.rb#1447
  def initialize(name, name_loc, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1455
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1460
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1470
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1465
  def compact_child_nodes; end

  # def copy: (**params) -> BlockParameterNode
  #
  # source://yarp//lib/prism/node.rb#1475
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1460
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1488
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#1497
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol?
  #
  # source://yarp//lib/prism/node.rb#1438
  def name; end

  # attr_reader name_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1441
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#1493
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#1444
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1519
  def type; end
end

# Represents a block's parameters declaration.
#
#     -> (a, b = 1; local) { }
#        ^^^^^^^^^^^^^^^^^
#
#     foo do |a, b = 1; local|
#            ^^^^^^^^^^^^^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#1532
class Prism::BlockParametersNode < ::Prism::Node
  # def initialize: (parameters: ParametersNode?, locals: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void
  #
  # @return [BlockParametersNode] a new instance of BlockParametersNode
  #
  # source://yarp//lib/prism/node.rb#1546
  def initialize(parameters, locals, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1555
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1560
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1602
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1543
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1573
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1565
  def compact_child_nodes; end

  # def copy: (**params) -> BlockParametersNode
  #
  # source://yarp//lib/prism/node.rb#1578
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1560
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1592
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#1606
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1537
  def locals; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1597
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1540
  def opening_loc; end

  # attr_reader parameters: ParametersNode?
  #
  # source://yarp//lib/prism/node.rb#1534
  def parameters; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1634
  def type; end
end

# Represents the use of the `break` keyword.
#
#     break foo
#     ^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#1643
class Prism::BreakNode < ::Prism::Node
  # def initialize: (arguments: ArgumentsNode?, keyword_loc: Location, location: Location) -> void
  #
  # @return [BreakNode] a new instance of BreakNode
  #
  # source://yarp//lib/prism/node.rb#1651
  def initialize(arguments, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1658
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#1645
  def arguments; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1663
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1675
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1668
  def compact_child_nodes; end

  # def copy: (**params) -> BreakNode
  #
  # source://yarp//lib/prism/node.rb#1680
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1663
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1692
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#1701
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#1697
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#1648
  def keyword_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1727
  def type; end
end

# Represents the use of the `&&=` operator on a call.
#
#     foo.bar &&= value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#1736
class Prism::CallAndWriteNode < ::Prism::Node
  # def initialize: (receiver: Node?, call_operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, flags: Integer, read_name: String, write_name: String, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [CallAndWriteNode] a new instance of CallAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#1771
  def initialize(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, flags, read_name, write_name, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1787
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#1750
  def arguments; end

  # def call_operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1837
  def call_operator; end

  # attr_reader call_operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1741
  def call_operator_loc; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1792
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1852
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1753
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1806
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1797
  def compact_child_nodes; end

  # def copy: (**params) -> CallAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#1811
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1792
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#1832
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#1871
  def inspect(inspector = T.unsafe(nil)); end

  # def message: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1842
  def message; end

  # attr_reader message_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1744
  def message_loc; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#1847
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1747
  def opening_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#1867
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#1765
  def operator_loc; end

  # attr_reader read_name: String
  #
  # source://yarp//lib/prism/node.rb#1759
  def read_name; end

  # attr_reader receiver: Node?
  #
  # source://yarp//lib/prism/node.rb#1738
  def receiver; end

  # def safe_navigation?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#1857
  def safe_navigation?; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#1913
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#1768
  def value; end

  # def variable_call?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#1862
  def variable_call?; end

  # attr_reader write_name: String
  #
  # source://yarp//lib/prism/node.rb#1762
  def write_name; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#1756
  def flags; end
end

# Represents a method call, in all of the various forms that can take.
#
#     foo
#     ^^^
#
#     foo()
#     ^^^^^
#
#     +foo
#     ^^^^
#
#     foo + bar
#     ^^^^^^^^^
#
#     foo.bar
#     ^^^^^^^
#
#     foo&.bar
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#1937
class Prism::CallNode < ::Prism::Node
  # def initialize: (receiver: Node?, call_operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, block: Node?, flags: Integer, name: String, location: Location) -> void
  #
  # @return [CallNode] a new instance of CallNode
  #
  # source://yarp//lib/prism/node.rb#1966
  def initialize(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#1980
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#1951
  def arguments; end

  # attr_reader block: Node?
  #
  # source://yarp//lib/prism/node.rb#1957
  def block; end

  # def call_operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2028
  def call_operator; end

  # attr_reader call_operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1942
  def call_operator_loc; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1985
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2043
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1954
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#1999
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#1990
  def compact_child_nodes; end

  # def copy: (**params) -> CallNode
  #
  # source://yarp//lib/prism/node.rb#2004
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#1985
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2023
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#2057
  def inspect(inspector = T.unsafe(nil)); end

  # def message: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2033
  def message; end

  # attr_reader message_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1945
  def message_loc; end

  # attr_reader name: String
  #
  # source://yarp//lib/prism/node.rb#1963
  def name; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2038
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#1948
  def opening_loc; end

  # attr_reader receiver: Node?
  #
  # source://yarp//lib/prism/node.rb#1939
  def receiver; end

  # def safe_navigation?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#2048
  def safe_navigation?; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2101
  def type; end

  # def variable_call?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#2053
  def variable_call?; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#1960
  def flags; end
end

# source://yarp//lib/prism/node.rb#14478
module Prism::CallNodeFlags; end

# &. operator
#
# source://yarp//lib/prism/node.rb#14480
Prism::CallNodeFlags::SAFE_NAVIGATION = T.let(T.unsafe(nil), Integer)

# a call that could have been a local variable
#
# source://yarp//lib/prism/node.rb#14483
Prism::CallNodeFlags::VARIABLE_CALL = T.let(T.unsafe(nil), Integer)

# Represents the use of an assignment operator on a call.
#
#     foo.bar += baz
#     ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#2110
class Prism::CallOperatorWriteNode < ::Prism::Node
  # def initialize: (receiver: Node?, call_operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, flags: Integer, read_name: String, write_name: String, operator: Symbol, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [CallOperatorWriteNode] a new instance of CallOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#2148
  def initialize(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, flags, read_name, write_name, operator, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2165
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#2124
  def arguments; end

  # def call_operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2216
  def call_operator; end

  # attr_reader call_operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2115
  def call_operator_loc; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2170
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2231
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2127
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2184
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2175
  def compact_child_nodes; end

  # def copy: (**params) -> CallOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#2189
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2170
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2211
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#2245
  def inspect(inspector = T.unsafe(nil)); end

  # def message: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2221
  def message; end

  # attr_reader message_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2118
  def message_loc; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2226
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2121
  def opening_loc; end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#2139
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2142
  def operator_loc; end

  # attr_reader read_name: String
  #
  # source://yarp//lib/prism/node.rb#2133
  def read_name; end

  # attr_reader receiver: Node?
  #
  # source://yarp//lib/prism/node.rb#2112
  def receiver; end

  # def safe_navigation?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#2236
  def safe_navigation?; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2288
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#2145
  def value; end

  # def variable_call?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#2241
  def variable_call?; end

  # attr_reader write_name: String
  #
  # source://yarp//lib/prism/node.rb#2136
  def write_name; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#2130
  def flags; end
end

# Represents the use of the `||=` operator on a call.
#
#     foo.bar ||= value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#2297
class Prism::CallOrWriteNode < ::Prism::Node
  # def initialize: (receiver: Node?, call_operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, flags: Integer, read_name: String, write_name: String, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [CallOrWriteNode] a new instance of CallOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#2332
  def initialize(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, flags, read_name, write_name, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2348
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#2311
  def arguments; end

  # def call_operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2398
  def call_operator; end

  # attr_reader call_operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2302
  def call_operator_loc; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2353
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2413
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2314
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2367
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2358
  def compact_child_nodes; end

  # def copy: (**params) -> CallOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#2372
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2353
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2393
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#2432
  def inspect(inspector = T.unsafe(nil)); end

  # def message: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2403
  def message; end

  # attr_reader message_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2305
  def message_loc; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2408
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2308
  def opening_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#2428
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2326
  def operator_loc; end

  # attr_reader read_name: String
  #
  # source://yarp//lib/prism/node.rb#2320
  def read_name; end

  # attr_reader receiver: Node?
  #
  # source://yarp//lib/prism/node.rb#2299
  def receiver; end

  # def safe_navigation?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#2418
  def safe_navigation?; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2474
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#2329
  def value; end

  # def variable_call?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#2423
  def variable_call?; end

  # attr_reader write_name: String
  #
  # source://yarp//lib/prism/node.rb#2323
  def write_name; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#2317
  def flags; end
end

# Represents assigning to a local variable in pattern matching.
#
#     foo => [bar => baz]
#            ^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#2483
class Prism::CapturePatternNode < ::Prism::Node
  # def initialize: (value: Node, target: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [CapturePatternNode] a new instance of CapturePatternNode
  #
  # source://yarp//lib/prism/node.rb#2494
  def initialize(value, target, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2502
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2507
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2517
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2512
  def compact_child_nodes; end

  # def copy: (**params) -> CapturePatternNode
  #
  # source://yarp//lib/prism/node.rb#2522
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2507
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2535
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#2544
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#2540
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2491
  def operator_loc; end

  # attr_reader target: Node
  #
  # source://yarp//lib/prism/node.rb#2488
  def target; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2568
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#2485
  def value; end
end

# Represents the use of a case statement.
#
# case true
# ^^^^^^^^^
# when false
# end
#
# source://yarp//lib/prism/node.rb#2579
class Prism::CaseNode < ::Prism::Node
  # def initialize: (predicate: Node?, conditions: Array[Node], consequent: ElseNode?, case_keyword_loc: Location, end_keyword_loc: Location, location: Location) -> void
  #
  # @return [CaseNode] a new instance of CaseNode
  #
  # source://yarp//lib/prism/node.rb#2596
  def initialize(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2606
  def accept(visitor); end

  # def case_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#2650
  def case_keyword; end

  # attr_reader case_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2590
  def case_keyword_loc; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2611
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2625
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2616
  def compact_child_nodes; end

  # attr_reader conditions: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2584
  def conditions; end

  # attr_reader consequent: ElseNode?
  #
  # source://yarp//lib/prism/node.rb#2587
  def consequent; end

  # def copy: (**params) -> CaseNode
  #
  # source://yarp//lib/prism/node.rb#2630
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2611
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2645
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#2655
  def end_keyword; end

  # attr_reader end_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2593
  def end_keyword_loc; end

  # source://yarp//lib/prism/node.rb#2659
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader predicate: Node?
  #
  # source://yarp//lib/prism/node.rb#2581
  def predicate; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2693
  def type; end
end

# Represents a class declaration involving the `class` keyword.
#
#     class Foo end
#     ^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#2702
class Prism::ClassNode < ::Prism::Node
  # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, constant_path: Node, inheritance_operator_loc: Location?, superclass: Node?, body: Node?, end_keyword_loc: Location, name: Symbol, location: Location) -> void
  #
  # @return [ClassNode] a new instance of ClassNode
  #
  # source://yarp//lib/prism/node.rb#2728
  def initialize(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2741
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#2719
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2746
  def child_nodes; end

  # def class_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#2788
  def class_keyword; end

  # attr_reader class_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2707
  def class_keyword_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2760
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2751
  def compact_child_nodes; end

  # attr_reader constant_path: Node
  #
  # source://yarp//lib/prism/node.rb#2710
  def constant_path; end

  # def copy: (**params) -> ClassNode
  #
  # source://yarp//lib/prism/node.rb#2765
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2746
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2783
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#2798
  def end_keyword; end

  # attr_reader end_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2722
  def end_keyword_loc; end

  # def inheritance_operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#2793
  def inheritance_operator; end

  # attr_reader inheritance_operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#2713
  def inheritance_operator_loc; end

  # source://yarp//lib/prism/node.rb#2802
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#2704
  def locals; end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#2725
  def name; end

  # attr_reader superclass: Node?
  #
  # source://yarp//lib/prism/node.rb#2716
  def superclass; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2840
  def type; end
end

# Represents the use of the `&&=` operator for assignment to a class variable.
#
#     @@target &&= value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#2849
class Prism::ClassVariableAndWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ClassVariableAndWriteNode] a new instance of ClassVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#2863
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2872
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2877
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2887
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2882
  def compact_child_nodes; end

  # def copy: (**params) -> ClassVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#2892
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2877
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#2906
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#2915
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#2851
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2854
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#2911
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2857
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#2939
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#2860
  def value; end
end

# Represents assigning to a class variable using an operator that isn't `=`.
#
#     @@target += value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#2948
class Prism::ClassVariableOperatorWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
  #
  # @return [ClassVariableOperatorWriteNode] a new instance of ClassVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#2965
  def initialize(name, name_loc, operator_loc, value, operator, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#2975
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2980
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#2990
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#2985
  def compact_child_nodes; end

  # def copy: (**params) -> ClassVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#2995
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#2980
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3010
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3014
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#2950
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2953
  def name_loc; end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#2962
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#2956
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3039
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#2959
  def value; end
end

# Represents the use of the `||=` operator for assignment to a class variable.
#
#     @@target ||= value
#     ^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3048
class Prism::ClassVariableOrWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ClassVariableOrWriteNode] a new instance of ClassVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#3062
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3071
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3076
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3086
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3081
  def compact_child_nodes; end

  # def copy: (**params) -> ClassVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#3091
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3076
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3105
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3114
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3050
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3053
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#3110
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3056
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3138
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3059
  def value; end
end

# Represents referencing a class variable.
#
#     @@foo
#     ^^^^^
#
# source://yarp//lib/prism/node.rb#3147
class Prism::ClassVariableReadNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [ClassVariableReadNode] a new instance of ClassVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#3152
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3158
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3163
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3173
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3168
  def compact_child_nodes; end

  # def copy: (**params) -> ClassVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#3178
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3163
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3189
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3193
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3149
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3213
  def type; end
end

# Represents writing to a class variable in a context that doesn't have an explicit value.
#
#     @@foo, @@bar = baz
#     ^^^^^  ^^^^^
#
# source://yarp//lib/prism/node.rb#3222
class Prism::ClassVariableTargetNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [ClassVariableTargetNode] a new instance of ClassVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#3227
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3233
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3238
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3248
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3243
  def compact_child_nodes; end

  # def copy: (**params) -> ClassVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#3253
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3238
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3264
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3268
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3224
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3288
  def type; end
end

# Represents writing to a class variable.
#
#     @@foo = 1
#     ^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3297
class Prism::ClassVariableWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, value: Node, operator_loc: Location?, location: Location) -> void
  #
  # @return [ClassVariableWriteNode] a new instance of ClassVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#3311
  def initialize(name, name_loc, value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3320
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3325
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3335
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3330
  def compact_child_nodes; end

  # def copy: (**params) -> ClassVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#3340
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3325
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3354
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3363
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3299
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3302
  def name_loc; end

  # def operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#3359
  def operator; end

  # attr_reader operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#3308
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3387
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3305
  def value; end
end

# This represents a comment that was encountered during parsing.
#
# source://yarp//lib/prism/parse_result.rb#145
class Prism::Comment
  # @return [Comment] a new instance of Comment
  #
  # source://yarp//lib/prism/parse_result.rb#150
  def initialize(type, location); end

  # source://yarp//lib/prism/parse_result.rb#155
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/parse_result.rb#164
  def inspect; end

  # Returns the value of attribute location.
  #
  # source://yarp//lib/prism/parse_result.rb#148
  def location; end

  # Returns true if the comment happens on the same line as other code and false if the comment is by itself
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/parse_result.rb#160
  def trailing?; end

  # Returns the value of attribute type.
  #
  # source://yarp//lib/prism/parse_result.rb#148
  def type; end
end

# source://yarp//lib/prism/parse_result.rb#146
Prism::Comment::TYPES = T.let(T.unsafe(nil), Array)

# A compiler is a visitor that returns the value of each node as it visits.
# This is as opposed to a visitor which will only walk the tree. This can be
# useful when you are trying to compile a tree into a different format.
#
# For example, to build a representation of the tree as s-expressions, you
# could write:
#
#     class SExpressions < Prism::Compiler
#       def visit_arguments_node(node) = [:arguments, super]
#       def visit_call_node(node) = [:call, super]
#       def visit_integer_node(node) = [:integer]
#       def visit_program_node(node) = [:program, super]
#     end
#
#     Prism.parse("1 + 2").value.accept(SExpressions.new)
#     # => [:program, [[[:call, [[:integer], [:arguments, [[:integer]]]]]]]]
#
# source://yarp//lib/prism/compiler.rb#26
class Prism::Compiler
  # Visit an individual node.
  #
  # source://yarp//lib/prism/compiler.rb#28
  def visit(node); end

  # Visit the child nodes of the given node.
  # Compile a AliasGlobalVariableNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_alias_global_variable_node(node); end

  # Visit the child nodes of the given node.
  # Compile a AliasMethodNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_alias_method_node(node); end

  # Visit a list of nodes.
  #
  # source://yarp//lib/prism/compiler.rb#33
  def visit_all(nodes); end

  # Visit the child nodes of the given node.
  # Compile a AlternationPatternNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_alternation_pattern_node(node); end

  # Visit the child nodes of the given node.
  # Compile a AndNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_and_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ArgumentsNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_arguments_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ArrayNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_array_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ArrayPatternNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_array_pattern_node(node); end

  # Visit the child nodes of the given node.
  # Compile a AssocNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_assoc_node(node); end

  # Visit the child nodes of the given node.
  # Compile a AssocSplatNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_assoc_splat_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BackReferenceReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_back_reference_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BeginNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_begin_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BlockArgumentNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_block_argument_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BlockLocalVariableNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_block_local_variable_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BlockNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_block_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BlockParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_block_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BlockParametersNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_block_parameters_node(node); end

  # Visit the child nodes of the given node.
  # Compile a BreakNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_break_node(node); end

  # Visit the child nodes of the given node.
  # Compile a CallAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_call_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a CallNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_call_node(node); end

  # Visit the child nodes of the given node.
  # Compile a CallOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_call_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a CallOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_call_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a CapturePatternNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_capture_pattern_node(node); end

  # Visit the child nodes of the given node.
  # Compile a CaseNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_case_node(node); end

  # Visit the child nodes of the given node.
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_child_nodes(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassVariableAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_variable_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_variable_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassVariableOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_variable_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassVariableReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_variable_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassVariableTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_variable_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ClassVariableWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_class_variable_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantPathAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_path_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantPathNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_path_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantPathOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_path_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantPathOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_path_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantPathTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_path_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantPathWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_path_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ConstantWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_constant_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a DefNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_def_node(node); end

  # Visit the child nodes of the given node.
  # Compile a DefinedNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_defined_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ElseNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_else_node(node); end

  # Visit the child nodes of the given node.
  # Compile a EmbeddedStatementsNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_embedded_statements_node(node); end

  # Visit the child nodes of the given node.
  # Compile a EmbeddedVariableNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_embedded_variable_node(node); end

  # Visit the child nodes of the given node.
  # Compile a EnsureNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_ensure_node(node); end

  # Visit the child nodes of the given node.
  # Compile a FalseNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_false_node(node); end

  # Visit the child nodes of the given node.
  # Compile a FindPatternNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_find_pattern_node(node); end

  # Visit the child nodes of the given node.
  # Compile a FlipFlopNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_flip_flop_node(node); end

  # Visit the child nodes of the given node.
  # Compile a FloatNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_float_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ForNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_for_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ForwardingArgumentsNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_forwarding_arguments_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ForwardingParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_forwarding_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ForwardingSuperNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_forwarding_super_node(node); end

  # Visit the child nodes of the given node.
  # Compile a GlobalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_global_variable_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a GlobalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_global_variable_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a GlobalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_global_variable_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a GlobalVariableReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_global_variable_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a GlobalVariableTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_global_variable_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a GlobalVariableWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_global_variable_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a HashNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_hash_node(node); end

  # Visit the child nodes of the given node.
  # Compile a HashPatternNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_hash_pattern_node(node); end

  # Visit the child nodes of the given node.
  # Compile a IfNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_if_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ImaginaryNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_imaginary_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ImplicitNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_implicit_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_in_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InstanceVariableAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_instance_variable_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InstanceVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_instance_variable_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InstanceVariableOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_instance_variable_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InstanceVariableReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_instance_variable_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InstanceVariableTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_instance_variable_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InstanceVariableWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_instance_variable_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a IntegerNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_integer_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InterpolatedMatchLastLineNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_interpolated_match_last_line_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InterpolatedRegularExpressionNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_interpolated_regular_expression_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InterpolatedStringNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_interpolated_string_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InterpolatedSymbolNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_interpolated_symbol_node(node); end

  # Visit the child nodes of the given node.
  # Compile a InterpolatedXStringNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_interpolated_x_string_node(node); end

  # Visit the child nodes of the given node.
  # Compile a KeywordHashNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_keyword_hash_node(node); end

  # Visit the child nodes of the given node.
  # Compile a KeywordParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_keyword_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a KeywordRestParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_keyword_rest_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LambdaNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_lambda_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LocalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_local_variable_and_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LocalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_local_variable_operator_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LocalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_local_variable_or_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LocalVariableReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_local_variable_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LocalVariableTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_local_variable_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a LocalVariableWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_local_variable_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MatchLastLineNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_match_last_line_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MatchPredicateNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_match_predicate_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MatchRequiredNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_match_required_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MatchWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_match_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MissingNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_missing_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ModuleNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_module_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MultiTargetNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_multi_target_node(node); end

  # Visit the child nodes of the given node.
  # Compile a MultiWriteNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_multi_write_node(node); end

  # Visit the child nodes of the given node.
  # Compile a NextNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_next_node(node); end

  # Visit the child nodes of the given node.
  # Compile a NilNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_nil_node(node); end

  # Visit the child nodes of the given node.
  # Compile a NoKeywordsParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_no_keywords_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a NumberedReferenceReadNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_numbered_reference_read_node(node); end

  # Visit the child nodes of the given node.
  # Compile a OptionalParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_optional_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a OrNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_or_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ParametersNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_parameters_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ParenthesesNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_parentheses_node(node); end

  # Visit the child nodes of the given node.
  # Compile a PinnedExpressionNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_pinned_expression_node(node); end

  # Visit the child nodes of the given node.
  # Compile a PinnedVariableNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_pinned_variable_node(node); end

  # Visit the child nodes of the given node.
  # Compile a PostExecutionNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_post_execution_node(node); end

  # Visit the child nodes of the given node.
  # Compile a PreExecutionNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_pre_execution_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ProgramNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_program_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RangeNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_range_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RationalNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_rational_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RedoNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_redo_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RegularExpressionNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_regular_expression_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RequiredDestructuredParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_required_destructured_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RequiredParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_required_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RescueModifierNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_rescue_modifier_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RescueNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_rescue_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RestParameterNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_rest_parameter_node(node); end

  # Visit the child nodes of the given node.
  # Compile a RetryNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_retry_node(node); end

  # Visit the child nodes of the given node.
  # Compile a ReturnNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_return_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SelfNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_self_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SingletonClassNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_singleton_class_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SourceEncodingNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_source_encoding_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SourceFileNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_source_file_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SourceLineNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_source_line_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SplatNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_splat_node(node); end

  # Visit the child nodes of the given node.
  # Compile a StatementsNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_statements_node(node); end

  # Visit the child nodes of the given node.
  # Compile a StringConcatNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_string_concat_node(node); end

  # Visit the child nodes of the given node.
  # Compile a StringNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_string_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SuperNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_super_node(node); end

  # Visit the child nodes of the given node.
  # Compile a SymbolNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_symbol_node(node); end

  # Visit the child nodes of the given node.
  # Compile a TrueNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_true_node(node); end

  # Visit the child nodes of the given node.
  # Compile a UndefNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_undef_node(node); end

  # Visit the child nodes of the given node.
  # Compile a UnlessNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_unless_node(node); end

  # Visit the child nodes of the given node.
  # Compile a UntilNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_until_node(node); end

  # Visit the child nodes of the given node.
  # Compile a WhenNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_when_node(node); end

  # Visit the child nodes of the given node.
  # Compile a WhileNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_while_node(node); end

  # Visit the child nodes of the given node.
  # Compile a XStringNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_x_string_node(node); end

  # Visit the child nodes of the given node.
  # Compile a YieldNode node
  #
  # source://yarp//lib/prism/compiler.rb#38
  def visit_yield_node(node); end
end

# Represents the use of the `&&=` operator for assignment to a constant.
#
#     Target &&= value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3396
class Prism::ConstantAndWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ConstantAndWriteNode] a new instance of ConstantAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#3410
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3419
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3424
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3434
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3429
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#3439
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3424
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3453
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3462
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3398
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3401
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#3458
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3404
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3486
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3407
  def value; end
end

# Represents assigning to a constant using an operator that isn't `=`.
#
#     Target += value
#     ^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3495
class Prism::ConstantOperatorWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
  #
  # @return [ConstantOperatorWriteNode] a new instance of ConstantOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#3512
  def initialize(name, name_loc, operator_loc, value, operator, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3522
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3527
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3537
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3532
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#3542
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3527
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3557
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3561
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3497
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3500
  def name_loc; end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#3509
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3503
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3586
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3506
  def value; end
end

# Represents the use of the `||=` operator for assignment to a constant.
#
#     Target ||= value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3595
class Prism::ConstantOrWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ConstantOrWriteNode] a new instance of ConstantOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#3609
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3618
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3623
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3633
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3628
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#3638
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3623
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3652
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3661
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#3597
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3600
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#3657
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3603
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3685
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3606
  def value; end
end

# Represents the use of the `&&=` operator for assignment to a constant path.
#
#     Parent::Child &&= value
#     ^^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3694
class Prism::ConstantPathAndWriteNode < ::Prism::Node
  # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ConstantPathAndWriteNode] a new instance of ConstantPathAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#3705
  def initialize(target, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3713
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3718
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3728
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3723
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantPathAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#3733
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3718
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3746
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3755
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#3751
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3699
  def operator_loc; end

  # attr_reader target: ConstantPathNode
  #
  # source://yarp//lib/prism/node.rb#3696
  def target; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3779
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3702
  def value; end
end

# Represents accessing a constant through a path of `::` operators.
#
#     Foo::Bar
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3788
class Prism::ConstantPathNode < ::Prism::Node
  # def initialize: (parent: Node?, child: Node, delimiter_loc: Location, location: Location) -> void
  #
  # @return [ConstantPathNode] a new instance of ConstantPathNode
  #
  # source://yarp//lib/prism/node.rb#3799
  def initialize(parent, child, delimiter_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3807
  def accept(visitor); end

  # attr_reader child: Node
  #
  # source://yarp//lib/prism/node.rb#3793
  def child; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3812
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3825
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3817
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantPathNode
  #
  # source://yarp//lib/prism/node.rb#3830
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3812
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3843
  def deconstruct_keys(keys); end

  # def delimiter: () -> String
  #
  # source://yarp//lib/prism/node.rb#3848
  def delimiter; end

  # attr_reader delimiter_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3796
  def delimiter_loc; end

  # source://yarp//lib/prism/node.rb#3852
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader parent: Node?
  #
  # source://yarp//lib/prism/node.rb#3790
  def parent; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3880
  def type; end
end

# Represents assigning to a constant path using an operator that isn't `=`.
#
#     Parent::Child += value
#     ^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3889
class Prism::ConstantPathOperatorWriteNode < ::Prism::Node
  # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
  #
  # @return [ConstantPathOperatorWriteNode] a new instance of ConstantPathOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#3903
  def initialize(target, operator_loc, value, operator, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#3912
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3917
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#3927
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#3922
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantPathOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#3932
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#3917
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#3946
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#3950
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#3900
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3894
  def operator_loc; end

  # attr_reader target: ConstantPathNode
  #
  # source://yarp//lib/prism/node.rb#3891
  def target; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#3975
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3897
  def value; end
end

# Represents the use of the `||=` operator for assignment to a constant path.
#
#     Parent::Child ||= value
#     ^^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#3984
class Prism::ConstantPathOrWriteNode < ::Prism::Node
  # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ConstantPathOrWriteNode] a new instance of ConstantPathOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#3995
  def initialize(target, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4003
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4008
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4018
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4013
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantPathOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#4023
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4008
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4036
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#4045
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#4041
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#3989
  def operator_loc; end

  # attr_reader target: ConstantPathNode
  #
  # source://yarp//lib/prism/node.rb#3986
  def target; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4069
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#3992
  def value; end
end

# Represents writing to a constant path in a context that doesn't have an explicit value.
#
#     Foo::Foo, Bar::Bar = baz
#     ^^^^^^^^  ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#4078
class Prism::ConstantPathTargetNode < ::Prism::Node
  # def initialize: (parent: Node?, child: Node, delimiter_loc: Location, location: Location) -> void
  #
  # @return [ConstantPathTargetNode] a new instance of ConstantPathTargetNode
  #
  # source://yarp//lib/prism/node.rb#4089
  def initialize(parent, child, delimiter_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4097
  def accept(visitor); end

  # attr_reader child: Node
  #
  # source://yarp//lib/prism/node.rb#4083
  def child; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4102
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4115
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4107
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantPathTargetNode
  #
  # source://yarp//lib/prism/node.rb#4120
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4102
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4133
  def deconstruct_keys(keys); end

  # def delimiter: () -> String
  #
  # source://yarp//lib/prism/node.rb#4138
  def delimiter; end

  # attr_reader delimiter_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4086
  def delimiter_loc; end

  # source://yarp//lib/prism/node.rb#4142
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader parent: Node?
  #
  # source://yarp//lib/prism/node.rb#4080
  def parent; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4170
  def type; end
end

# Represents writing to a constant path.
#
#     ::Foo = 1
#     ^^^^^^^^^
#
#     Foo::Bar = 1
#     ^^^^^^^^^^^^
#
#     ::Foo::Bar = 1
#     ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#4185
class Prism::ConstantPathWriteNode < ::Prism::Node
  # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [ConstantPathWriteNode] a new instance of ConstantPathWriteNode
  #
  # source://yarp//lib/prism/node.rb#4196
  def initialize(target, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4204
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4209
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4219
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4214
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantPathWriteNode
  #
  # source://yarp//lib/prism/node.rb#4224
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4209
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4237
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#4246
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#4242
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4190
  def operator_loc; end

  # attr_reader target: ConstantPathNode
  #
  # source://yarp//lib/prism/node.rb#4187
  def target; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4270
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#4193
  def value; end
end

# Represents referencing a constant.
#
#     Foo
#     ^^^
#
# source://yarp//lib/prism/node.rb#4279
class Prism::ConstantReadNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [ConstantReadNode] a new instance of ConstantReadNode
  #
  # source://yarp//lib/prism/node.rb#4284
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4290
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4295
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4305
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4300
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantReadNode
  #
  # source://yarp//lib/prism/node.rb#4310
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4295
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4321
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#4325
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#4281
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4345
  def type; end
end

# Represents writing to a constant in a context that doesn't have an explicit value.
#
#     Foo, Bar = baz
#     ^^^  ^^^
#
# source://yarp//lib/prism/node.rb#4354
class Prism::ConstantTargetNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [ConstantTargetNode] a new instance of ConstantTargetNode
  #
  # source://yarp//lib/prism/node.rb#4359
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4365
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4370
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4380
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4375
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantTargetNode
  #
  # source://yarp//lib/prism/node.rb#4385
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4370
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4396
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#4400
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#4356
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4420
  def type; end
end

# Represents writing to a constant.
#
#     Foo = 1
#     ^^^^^^^
#
# source://yarp//lib/prism/node.rb#4429
class Prism::ConstantWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, value: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [ConstantWriteNode] a new instance of ConstantWriteNode
  #
  # source://yarp//lib/prism/node.rb#4443
  def initialize(name, name_loc, value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4452
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4457
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4467
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4462
  def compact_child_nodes; end

  # def copy: (**params) -> ConstantWriteNode
  #
  # source://yarp//lib/prism/node.rb#4472
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4457
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4486
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#4495
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#4431
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4434
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#4491
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4440
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4519
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#4437
  def value; end
end

# The DSL module provides a set of methods that can be used to create prism
# nodes in a more concise manner. For example, instead of writing:
#
#     source = Prism::Source.new("[1]")
#
#     Prism::ArrayNode.new(
#       [
#         Prism::IntegerNode.new(
#           Prism::IntegerBaseFlags::DECIMAL,
#           Prism::Location.new(source, 1, 1),
#         )
#       ],
#       Prism::Location.new(source, 0, 1),
#       Prism::Location.new(source, 2, 1)
#     )
#
# you could instead write:
#
#     source = Prism::Source.new("[1]")
#
#     ArrayNode(
#       IntegerNode(Prism::IntegerBaseFlags::DECIMAL, Location(source, 1, 1))),
#       Location(source, 0, 1),
#       Location(source, 2, 1)
#     )
#
# This is mostly helpful in the context of writing tests, but can also be used
# to generate trees programmatically.
#
# source://yarp//lib/prism/dsl.rb#37
module Prism::DSL
  private

  # Create a new AliasGlobalVariableNode node
  #
  # source://yarp//lib/prism/dsl.rb#46
  def AliasGlobalVariableNode(new_name, old_name, keyword_loc, location = T.unsafe(nil)); end

  # Create a new AliasMethodNode node
  #
  # source://yarp//lib/prism/dsl.rb#51
  def AliasMethodNode(new_name, old_name, keyword_loc, location = T.unsafe(nil)); end

  # Create a new AlternationPatternNode node
  #
  # source://yarp//lib/prism/dsl.rb#56
  def AlternationPatternNode(left, right, operator_loc, location = T.unsafe(nil)); end

  # Create a new AndNode node
  #
  # source://yarp//lib/prism/dsl.rb#61
  def AndNode(left, right, operator_loc, location = T.unsafe(nil)); end

  # Create a new ArgumentsNode node
  #
  # source://yarp//lib/prism/dsl.rb#66
  def ArgumentsNode(arguments, location = T.unsafe(nil)); end

  # Create a new ArrayNode node
  #
  # source://yarp//lib/prism/dsl.rb#71
  def ArrayNode(elements, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new ArrayPatternNode node
  #
  # source://yarp//lib/prism/dsl.rb#76
  def ArrayPatternNode(constant, requireds, rest, posts, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new AssocNode node
  #
  # source://yarp//lib/prism/dsl.rb#81
  def AssocNode(key, value, operator_loc, location = T.unsafe(nil)); end

  # Create a new AssocSplatNode node
  #
  # source://yarp//lib/prism/dsl.rb#86
  def AssocSplatNode(value, operator_loc, location = T.unsafe(nil)); end

  # Create a new BackReferenceReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#91
  def BackReferenceReadNode(location = T.unsafe(nil)); end

  # Create a new BeginNode node
  #
  # source://yarp//lib/prism/dsl.rb#96
  def BeginNode(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new BlockArgumentNode node
  #
  # source://yarp//lib/prism/dsl.rb#101
  def BlockArgumentNode(expression, operator_loc, location = T.unsafe(nil)); end

  # Create a new BlockLocalVariableNode node
  #
  # source://yarp//lib/prism/dsl.rb#106
  def BlockLocalVariableNode(name, location = T.unsafe(nil)); end

  # Create a new BlockNode node
  #
  # source://yarp//lib/prism/dsl.rb#111
  def BlockNode(locals, parameters, body, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new BlockParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#116
  def BlockParameterNode(name, name_loc, operator_loc, location = T.unsafe(nil)); end

  # Create a new BlockParametersNode node
  #
  # source://yarp//lib/prism/dsl.rb#121
  def BlockParametersNode(parameters, locals, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new BreakNode node
  #
  # source://yarp//lib/prism/dsl.rb#126
  def BreakNode(arguments, keyword_loc, location = T.unsafe(nil)); end

  # Create a new CallAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#131
  def CallAndWriteNode(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, flags, read_name, write_name, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new CallNode node
  #
  # source://yarp//lib/prism/dsl.rb#136
  def CallNode(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location = T.unsafe(nil)); end

  # Create a new CallOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#141
  def CallOperatorWriteNode(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, flags, read_name, write_name, operator, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new CallOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#146
  def CallOrWriteNode(receiver, call_operator_loc, message_loc, opening_loc, arguments, closing_loc, flags, read_name, write_name, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new CapturePatternNode node
  #
  # source://yarp//lib/prism/dsl.rb#151
  def CapturePatternNode(value, target, operator_loc, location = T.unsafe(nil)); end

  # Create a new CaseNode node
  #
  # source://yarp//lib/prism/dsl.rb#156
  def CaseNode(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new ClassNode node
  #
  # source://yarp//lib/prism/dsl.rb#161
  def ClassNode(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name, location = T.unsafe(nil)); end

  # Create a new ClassVariableAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#166
  def ClassVariableAndWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ClassVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#171
  def ClassVariableOperatorWriteNode(name, name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end

  # Create a new ClassVariableOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#176
  def ClassVariableOrWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ClassVariableReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#181
  def ClassVariableReadNode(name, location = T.unsafe(nil)); end

  # Create a new ClassVariableTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#186
  def ClassVariableTargetNode(name, location = T.unsafe(nil)); end

  # Create a new ClassVariableWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#191
  def ClassVariableWriteNode(name, name_loc, value, operator_loc, location = T.unsafe(nil)); end

  # Create a new ConstantAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#196
  def ConstantAndWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ConstantOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#201
  def ConstantOperatorWriteNode(name, name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end

  # Create a new ConstantOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#206
  def ConstantOrWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ConstantPathAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#211
  def ConstantPathAndWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ConstantPathNode node
  #
  # source://yarp//lib/prism/dsl.rb#216
  def ConstantPathNode(parent, child, delimiter_loc, location = T.unsafe(nil)); end

  # Create a new ConstantPathOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#221
  def ConstantPathOperatorWriteNode(target, operator_loc, value, operator, location = T.unsafe(nil)); end

  # Create a new ConstantPathOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#226
  def ConstantPathOrWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ConstantPathTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#231
  def ConstantPathTargetNode(parent, child, delimiter_loc, location = T.unsafe(nil)); end

  # Create a new ConstantPathWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#236
  def ConstantPathWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new ConstantReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#241
  def ConstantReadNode(name, location = T.unsafe(nil)); end

  # Create a new ConstantTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#246
  def ConstantTargetNode(name, location = T.unsafe(nil)); end

  # Create a new ConstantWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#251
  def ConstantWriteNode(name, name_loc, value, operator_loc, location = T.unsafe(nil)); end

  # Create a new DefNode node
  #
  # source://yarp//lib/prism/dsl.rb#256
  def DefNode(name, name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new DefinedNode node
  #
  # source://yarp//lib/prism/dsl.rb#261
  def DefinedNode(lparen_loc, value, rparen_loc, keyword_loc, location = T.unsafe(nil)); end

  # Create a new ElseNode node
  #
  # source://yarp//lib/prism/dsl.rb#266
  def ElseNode(else_keyword_loc, statements, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new EmbeddedStatementsNode node
  #
  # source://yarp//lib/prism/dsl.rb#271
  def EmbeddedStatementsNode(opening_loc, statements, closing_loc, location = T.unsafe(nil)); end

  # Create a new EmbeddedVariableNode node
  #
  # source://yarp//lib/prism/dsl.rb#276
  def EmbeddedVariableNode(operator_loc, variable, location = T.unsafe(nil)); end

  # Create a new EnsureNode node
  #
  # source://yarp//lib/prism/dsl.rb#281
  def EnsureNode(ensure_keyword_loc, statements, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new FalseNode node
  #
  # source://yarp//lib/prism/dsl.rb#286
  def FalseNode(location = T.unsafe(nil)); end

  # Create a new FindPatternNode node
  #
  # source://yarp//lib/prism/dsl.rb#291
  def FindPatternNode(constant, left, requireds, right, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new FlipFlopNode node
  #
  # source://yarp//lib/prism/dsl.rb#296
  def FlipFlopNode(left, right, operator_loc, flags, location = T.unsafe(nil)); end

  # Create a new FloatNode node
  #
  # source://yarp//lib/prism/dsl.rb#301
  def FloatNode(location = T.unsafe(nil)); end

  # Create a new ForNode node
  #
  # source://yarp//lib/prism/dsl.rb#306
  def ForNode(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new ForwardingArgumentsNode node
  #
  # source://yarp//lib/prism/dsl.rb#311
  def ForwardingArgumentsNode(location = T.unsafe(nil)); end

  # Create a new ForwardingParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#316
  def ForwardingParameterNode(location = T.unsafe(nil)); end

  # Create a new ForwardingSuperNode node
  #
  # source://yarp//lib/prism/dsl.rb#321
  def ForwardingSuperNode(block, location = T.unsafe(nil)); end

  # Create a new GlobalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#326
  def GlobalVariableAndWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new GlobalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#331
  def GlobalVariableOperatorWriteNode(name, name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end

  # Create a new GlobalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#336
  def GlobalVariableOrWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new GlobalVariableReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#341
  def GlobalVariableReadNode(name, location = T.unsafe(nil)); end

  # Create a new GlobalVariableTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#346
  def GlobalVariableTargetNode(name, location = T.unsafe(nil)); end

  # Create a new GlobalVariableWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#351
  def GlobalVariableWriteNode(name, name_loc, value, operator_loc, location = T.unsafe(nil)); end

  # Create a new HashNode node
  #
  # source://yarp//lib/prism/dsl.rb#356
  def HashNode(opening_loc, elements, closing_loc, location = T.unsafe(nil)); end

  # Create a new HashPatternNode node
  #
  # source://yarp//lib/prism/dsl.rb#361
  def HashPatternNode(constant, assocs, kwrest, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new IfNode node
  #
  # source://yarp//lib/prism/dsl.rb#366
  def IfNode(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new ImaginaryNode node
  #
  # source://yarp//lib/prism/dsl.rb#371
  def ImaginaryNode(numeric, location = T.unsafe(nil)); end

  # Create a new ImplicitNode node
  #
  # source://yarp//lib/prism/dsl.rb#376
  def ImplicitNode(value, location = T.unsafe(nil)); end

  # Create a new InNode node
  #
  # source://yarp//lib/prism/dsl.rb#381
  def InNode(pattern, statements, in_loc, then_loc, location = T.unsafe(nil)); end

  # Create a new InstanceVariableAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#386
  def InstanceVariableAndWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new InstanceVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#391
  def InstanceVariableOperatorWriteNode(name, name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end

  # Create a new InstanceVariableOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#396
  def InstanceVariableOrWriteNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new InstanceVariableReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#401
  def InstanceVariableReadNode(name, location = T.unsafe(nil)); end

  # Create a new InstanceVariableTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#406
  def InstanceVariableTargetNode(name, location = T.unsafe(nil)); end

  # Create a new InstanceVariableWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#411
  def InstanceVariableWriteNode(name, name_loc, value, operator_loc, location = T.unsafe(nil)); end

  # Create a new IntegerNode node
  #
  # source://yarp//lib/prism/dsl.rb#416
  def IntegerNode(flags, location = T.unsafe(nil)); end

  # Create a new InterpolatedMatchLastLineNode node
  #
  # source://yarp//lib/prism/dsl.rb#421
  def InterpolatedMatchLastLineNode(opening_loc, parts, closing_loc, flags, location = T.unsafe(nil)); end

  # Create a new InterpolatedRegularExpressionNode node
  #
  # source://yarp//lib/prism/dsl.rb#426
  def InterpolatedRegularExpressionNode(opening_loc, parts, closing_loc, flags, location = T.unsafe(nil)); end

  # Create a new InterpolatedStringNode node
  #
  # source://yarp//lib/prism/dsl.rb#431
  def InterpolatedStringNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end

  # Create a new InterpolatedSymbolNode node
  #
  # source://yarp//lib/prism/dsl.rb#436
  def InterpolatedSymbolNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end

  # Create a new InterpolatedXStringNode node
  #
  # source://yarp//lib/prism/dsl.rb#441
  def InterpolatedXStringNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end

  # Create a new KeywordHashNode node
  #
  # source://yarp//lib/prism/dsl.rb#446
  def KeywordHashNode(elements, location = T.unsafe(nil)); end

  # Create a new KeywordParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#451
  def KeywordParameterNode(name, name_loc, value, location = T.unsafe(nil)); end

  # Create a new KeywordRestParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#456
  def KeywordRestParameterNode(name, name_loc, operator_loc, location = T.unsafe(nil)); end

  # Create a new LambdaNode node
  #
  # source://yarp//lib/prism/dsl.rb#461
  def LambdaNode(locals, operator_loc, opening_loc, closing_loc, parameters, body, location = T.unsafe(nil)); end

  # Create a new LocalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#466
  def LocalVariableAndWriteNode(name_loc, operator_loc, value, name, depth, location = T.unsafe(nil)); end

  # Create a new LocalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#471
  def LocalVariableOperatorWriteNode(name_loc, operator_loc, value, name, operator, depth, location = T.unsafe(nil)); end

  # Create a new LocalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#476
  def LocalVariableOrWriteNode(name_loc, operator_loc, value, name, depth, location = T.unsafe(nil)); end

  # Create a new LocalVariableReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#481
  def LocalVariableReadNode(name, depth, location = T.unsafe(nil)); end

  # Create a new LocalVariableTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#486
  def LocalVariableTargetNode(name, depth, location = T.unsafe(nil)); end

  # Create a new LocalVariableWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#491
  def LocalVariableWriteNode(name, depth, name_loc, value, operator_loc, location = T.unsafe(nil)); end

  # Create a new Location object
  #
  # source://yarp//lib/prism/dsl.rb#41
  def Location(source = T.unsafe(nil), start_offset = T.unsafe(nil), length = T.unsafe(nil)); end

  # Create a new MatchLastLineNode node
  #
  # source://yarp//lib/prism/dsl.rb#496
  def MatchLastLineNode(opening_loc, content_loc, closing_loc, unescaped, flags, location = T.unsafe(nil)); end

  # Create a new MatchPredicateNode node
  #
  # source://yarp//lib/prism/dsl.rb#501
  def MatchPredicateNode(value, pattern, operator_loc, location = T.unsafe(nil)); end

  # Create a new MatchRequiredNode node
  #
  # source://yarp//lib/prism/dsl.rb#506
  def MatchRequiredNode(value, pattern, operator_loc, location = T.unsafe(nil)); end

  # Create a new MatchWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#511
  def MatchWriteNode(call, locals, location = T.unsafe(nil)); end

  # Create a new MissingNode node
  #
  # source://yarp//lib/prism/dsl.rb#516
  def MissingNode(location = T.unsafe(nil)); end

  # Create a new ModuleNode node
  #
  # source://yarp//lib/prism/dsl.rb#521
  def ModuleNode(locals, module_keyword_loc, constant_path, body, end_keyword_loc, name, location = T.unsafe(nil)); end

  # Create a new MultiTargetNode node
  #
  # source://yarp//lib/prism/dsl.rb#526
  def MultiTargetNode(targets, lparen_loc, rparen_loc, location = T.unsafe(nil)); end

  # Create a new MultiWriteNode node
  #
  # source://yarp//lib/prism/dsl.rb#531
  def MultiWriteNode(targets, lparen_loc, rparen_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new NextNode node
  #
  # source://yarp//lib/prism/dsl.rb#536
  def NextNode(arguments, keyword_loc, location = T.unsafe(nil)); end

  # Create a new NilNode node
  #
  # source://yarp//lib/prism/dsl.rb#541
  def NilNode(location = T.unsafe(nil)); end

  # Create a new NoKeywordsParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#546
  def NoKeywordsParameterNode(operator_loc, keyword_loc, location = T.unsafe(nil)); end

  # Create a new NumberedReferenceReadNode node
  #
  # source://yarp//lib/prism/dsl.rb#551
  def NumberedReferenceReadNode(number, location = T.unsafe(nil)); end

  # Create a new OptionalParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#556
  def OptionalParameterNode(name, name_loc, operator_loc, value, location = T.unsafe(nil)); end

  # Create a new OrNode node
  #
  # source://yarp//lib/prism/dsl.rb#561
  def OrNode(left, right, operator_loc, location = T.unsafe(nil)); end

  # Create a new ParametersNode node
  #
  # source://yarp//lib/prism/dsl.rb#566
  def ParametersNode(requireds, optionals, rest, posts, keywords, keyword_rest, block, location = T.unsafe(nil)); end

  # Create a new ParenthesesNode node
  #
  # source://yarp//lib/prism/dsl.rb#571
  def ParenthesesNode(body, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new PinnedExpressionNode node
  #
  # source://yarp//lib/prism/dsl.rb#576
  def PinnedExpressionNode(expression, operator_loc, lparen_loc, rparen_loc, location = T.unsafe(nil)); end

  # Create a new PinnedVariableNode node
  #
  # source://yarp//lib/prism/dsl.rb#581
  def PinnedVariableNode(variable, operator_loc, location = T.unsafe(nil)); end

  # Create a new PostExecutionNode node
  #
  # source://yarp//lib/prism/dsl.rb#586
  def PostExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new PreExecutionNode node
  #
  # source://yarp//lib/prism/dsl.rb#591
  def PreExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new ProgramNode node
  #
  # source://yarp//lib/prism/dsl.rb#596
  def ProgramNode(locals, statements, location = T.unsafe(nil)); end

  # Create a new RangeNode node
  #
  # source://yarp//lib/prism/dsl.rb#601
  def RangeNode(left, right, operator_loc, flags, location = T.unsafe(nil)); end

  # Create a new RationalNode node
  #
  # source://yarp//lib/prism/dsl.rb#606
  def RationalNode(numeric, location = T.unsafe(nil)); end

  # Create a new RedoNode node
  #
  # source://yarp//lib/prism/dsl.rb#611
  def RedoNode(location = T.unsafe(nil)); end

  # Create a new RegularExpressionNode node
  #
  # source://yarp//lib/prism/dsl.rb#616
  def RegularExpressionNode(opening_loc, content_loc, closing_loc, unescaped, flags, location = T.unsafe(nil)); end

  # Create a new RequiredDestructuredParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#621
  def RequiredDestructuredParameterNode(parameters, opening_loc, closing_loc, location = T.unsafe(nil)); end

  # Create a new RequiredParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#626
  def RequiredParameterNode(name, location = T.unsafe(nil)); end

  # Create a new RescueModifierNode node
  #
  # source://yarp//lib/prism/dsl.rb#631
  def RescueModifierNode(expression, keyword_loc, rescue_expression, location = T.unsafe(nil)); end

  # Create a new RescueNode node
  #
  # source://yarp//lib/prism/dsl.rb#636
  def RescueNode(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location = T.unsafe(nil)); end

  # Create a new RestParameterNode node
  #
  # source://yarp//lib/prism/dsl.rb#641
  def RestParameterNode(name, name_loc, operator_loc, location = T.unsafe(nil)); end

  # Create a new RetryNode node
  #
  # source://yarp//lib/prism/dsl.rb#646
  def RetryNode(location = T.unsafe(nil)); end

  # Create a new ReturnNode node
  #
  # source://yarp//lib/prism/dsl.rb#651
  def ReturnNode(keyword_loc, arguments, location = T.unsafe(nil)); end

  # Create a new SelfNode node
  #
  # source://yarp//lib/prism/dsl.rb#656
  def SelfNode(location = T.unsafe(nil)); end

  # Create a new SingletonClassNode node
  #
  # source://yarp//lib/prism/dsl.rb#661
  def SingletonClassNode(locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new SourceEncodingNode node
  #
  # source://yarp//lib/prism/dsl.rb#666
  def SourceEncodingNode(location = T.unsafe(nil)); end

  # Create a new SourceFileNode node
  #
  # source://yarp//lib/prism/dsl.rb#671
  def SourceFileNode(filepath, location = T.unsafe(nil)); end

  # Create a new SourceLineNode node
  #
  # source://yarp//lib/prism/dsl.rb#676
  def SourceLineNode(location = T.unsafe(nil)); end

  # Create a new SplatNode node
  #
  # source://yarp//lib/prism/dsl.rb#681
  def SplatNode(operator_loc, expression, location = T.unsafe(nil)); end

  # Create a new StatementsNode node
  #
  # source://yarp//lib/prism/dsl.rb#686
  def StatementsNode(body, location = T.unsafe(nil)); end

  # Create a new StringConcatNode node
  #
  # source://yarp//lib/prism/dsl.rb#691
  def StringConcatNode(left, right, location = T.unsafe(nil)); end

  # Create a new StringNode node
  #
  # source://yarp//lib/prism/dsl.rb#696
  def StringNode(flags, opening_loc, content_loc, closing_loc, unescaped, location = T.unsafe(nil)); end

  # Create a new SuperNode node
  #
  # source://yarp//lib/prism/dsl.rb#701
  def SuperNode(keyword_loc, lparen_loc, arguments, rparen_loc, block, location = T.unsafe(nil)); end

  # Create a new SymbolNode node
  #
  # source://yarp//lib/prism/dsl.rb#706
  def SymbolNode(opening_loc, value_loc, closing_loc, unescaped, location = T.unsafe(nil)); end

  # Create a new TrueNode node
  #
  # source://yarp//lib/prism/dsl.rb#711
  def TrueNode(location = T.unsafe(nil)); end

  # Create a new UndefNode node
  #
  # source://yarp//lib/prism/dsl.rb#716
  def UndefNode(names, keyword_loc, location = T.unsafe(nil)); end

  # Create a new UnlessNode node
  #
  # source://yarp//lib/prism/dsl.rb#721
  def UnlessNode(keyword_loc, predicate, statements, consequent, end_keyword_loc, location = T.unsafe(nil)); end

  # Create a new UntilNode node
  #
  # source://yarp//lib/prism/dsl.rb#726
  def UntilNode(keyword_loc, closing_loc, predicate, statements, flags, location = T.unsafe(nil)); end

  # Create a new WhenNode node
  #
  # source://yarp//lib/prism/dsl.rb#731
  def WhenNode(keyword_loc, conditions, statements, location = T.unsafe(nil)); end

  # Create a new WhileNode node
  #
  # source://yarp//lib/prism/dsl.rb#736
  def WhileNode(keyword_loc, closing_loc, predicate, statements, flags, location = T.unsafe(nil)); end

  # Create a new XStringNode node
  #
  # source://yarp//lib/prism/dsl.rb#741
  def XStringNode(opening_loc, content_loc, closing_loc, unescaped, location = T.unsafe(nil)); end

  # Create a new YieldNode node
  #
  # source://yarp//lib/prism/dsl.rb#746
  def YieldNode(keyword_loc, lparen_loc, arguments, rparen_loc, location = T.unsafe(nil)); end
end

# This module is used for testing and debugging and is not meant to be used by
# consumers of this library.
#
# source://yarp//lib/prism/debug.rb#6
module Prism::Debug
  class << self
    # For the given source, compiles with CRuby and returns a list of all of the
    # sets of local variables that were encountered.
    #
    # source://yarp//lib/prism/debug.rb#47
    def cruby_locals(source); end

    def memsize(_arg0); end
    def named_captures(_arg0); end

    # source://yarp//lib/prism/debug.rb#149
    def newlines(source); end

    # source://yarp//lib/prism/debug.rb#153
    def parse_serialize_file(filepath); end

    def parse_serialize_file_metadata(_arg0, _arg1); end

    # For the given source, parses with prism and returns a list of all of the
    # sets of local variables that were encountered.
    #
    # source://yarp//lib/prism/debug.rb#82
    def prism_locals(source); end

    def profile_file(_arg0); end
    def unescape_all(_arg0); end
    def unescape_minimal(_arg0); end
    def unescape_none(_arg0); end
    def unescape_whitespace(_arg0); end
  end
end

# source://yarp//lib/prism/debug.rb#7
class Prism::Debug::ISeq
  # @return [ISeq] a new instance of ISeq
  #
  # source://yarp//lib/prism/debug.rb#10
  def initialize(parts); end

  # source://yarp//lib/prism/debug.rb#26
  def each_child; end

  # source://yarp//lib/prism/debug.rb#22
  def instructions; end

  # source://yarp//lib/prism/debug.rb#18
  def local_table; end

  # Returns the value of attribute parts.
  #
  # source://yarp//lib/prism/debug.rb#8
  def parts; end

  # source://yarp//lib/prism/debug.rb#14
  def type; end
end

# Represents a method definition.
#
#     def method
#     end
#     ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#4529
class Prism::DefNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, receiver: Node?, parameters: ParametersNode?, body: Node?, locals: Array[Symbol], def_keyword_loc: Location, operator_loc: Location?, lparen_loc: Location?, rparen_loc: Location?, equal_loc: Location?, end_keyword_loc: Location?, location: Location) -> void
  #
  # @return [DefNode] a new instance of DefNode
  #
  # source://yarp//lib/prism/node.rb#4567
  def initialize(name, name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4584
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#4543
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4589
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4603
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4594
  def compact_child_nodes; end

  # def copy: (**params) -> DefNode
  #
  # source://yarp//lib/prism/node.rb#4608
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4589
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4630
  def deconstruct_keys(keys); end

  # def def_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#4635
  def def_keyword; end

  # attr_reader def_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4549
  def def_keyword_loc; end

  # def end_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4660
  def end_keyword; end

  # attr_reader end_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4564
  def end_keyword_loc; end

  # def equal: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4655
  def equal; end

  # attr_reader equal_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4561
  def equal_loc; end

  # source://yarp//lib/prism/node.rb#4664
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#4546
  def locals; end

  # def lparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4645
  def lparen; end

  # attr_reader lparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4555
  def lparen_loc; end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#4531
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4534
  def name_loc; end

  # def operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4640
  def operator; end

  # attr_reader operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4552
  def operator_loc; end

  # attr_reader parameters: ParametersNode?
  #
  # source://yarp//lib/prism/node.rb#4540
  def parameters; end

  # attr_reader receiver: Node?
  #
  # source://yarp//lib/prism/node.rb#4537
  def receiver; end

  # def rparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4650
  def rparen; end

  # attr_reader rparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4558
  def rparen_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4710
  def type; end
end

# Represents the use of the `defined?` keyword.
#
#     defined?(a)
#     ^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#4719
class Prism::DefinedNode < ::Prism::Node
  # def initialize: (lparen_loc: Location?, value: Node, rparen_loc: Location?, keyword_loc: Location, location: Location) -> void
  #
  # @return [DefinedNode] a new instance of DefinedNode
  #
  # source://yarp//lib/prism/node.rb#4733
  def initialize(lparen_loc, value, rparen_loc, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4742
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4747
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4757
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4752
  def compact_child_nodes; end

  # def copy: (**params) -> DefinedNode
  #
  # source://yarp//lib/prism/node.rb#4762
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4747
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4776
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#4795
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#4791
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4730
  def keyword_loc; end

  # def lparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4781
  def lparen; end

  # attr_reader lparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4721
  def lparen_loc; end

  # def rparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4786
  def rparen; end

  # attr_reader rparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4727
  def rparen_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4819
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#4724
  def value; end
end

# DesugarCompiler is a compiler that desugars Ruby code into a more primitive
# form. This is useful for consumers that want to deal with fewer node types.
#
# source://yarp//lib/prism/desugar_compiler.rb#6
class Prism::DesugarCompiler < ::Prism::MutationCompiler
  # @@foo &&= bar
  #
  # becomes
  #
  # @@foo && @@foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#12
  def visit_class_variable_and_write_node(node); end

  # @@foo += bar
  #
  # becomes
  #
  # @@foo = @@foo + bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#30
  def visit_class_variable_operator_write_node(node); end

  # @@foo ||= bar
  #
  # becomes
  #
  # defined?(@@foo) ? @@foo : @@foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#21
  def visit_class_variable_or_write_node(node); end

  # Foo &&= bar
  #
  # becomes
  #
  # Foo && Foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#39
  def visit_constant_and_write_node(node); end

  # Foo += bar
  #
  # becomes
  #
  # Foo = Foo + bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#57
  def visit_constant_operator_write_node(node); end

  # Foo ||= bar
  #
  # becomes
  #
  # defined?(Foo) ? Foo : Foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#48
  def visit_constant_or_write_node(node); end

  # $foo &&= bar
  #
  # becomes
  #
  # $foo && $foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#66
  def visit_global_variable_and_write_node(node); end

  # $foo += bar
  #
  # becomes
  #
  # $foo = $foo + bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#84
  def visit_global_variable_operator_write_node(node); end

  # $foo ||= bar
  #
  # becomes
  #
  # defined?($foo) ? $foo : $foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#75
  def visit_global_variable_or_write_node(node); end

  # becomes
  #
  # source://yarp//lib/prism/desugar_compiler.rb#93
  def visit_instance_variable_and_write_node(node); end

  # becomes
  #
  # source://yarp//lib/prism/desugar_compiler.rb#111
  def visit_instance_variable_operator_write_node(node); end

  # becomes
  #
  # source://yarp//lib/prism/desugar_compiler.rb#102
  def visit_instance_variable_or_write_node(node); end

  # foo &&= bar
  #
  # becomes
  #
  # foo && foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#120
  def visit_local_variable_and_write_node(node); end

  # foo += bar
  #
  # becomes
  #
  # foo = foo + bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#138
  def visit_local_variable_operator_write_node(node); end

  # foo ||= bar
  #
  # becomes
  #
  # foo || foo = bar
  #
  # source://yarp//lib/prism/desugar_compiler.rb#129
  def visit_local_variable_or_write_node(node); end

  private

  # Desugar `x &&= y` to `x && x = y`
  #
  # source://yarp//lib/prism/desugar_compiler.rb#145
  def desugar_and_write_node(node, read_class, write_class, *arguments); end

  # Desugar `x += y` to `x = x + y`
  #
  # source://yarp//lib/prism/desugar_compiler.rb#155
  def desugar_operator_write_node(node, read_class, write_class, *arguments); end

  # Desugar `x ||= y` to `defined?(x) ? x : x = y`
  #
  # source://yarp//lib/prism/desugar_compiler.rb#187
  def desugar_or_write_defined_node(node, read_class, write_class, *arguments); end

  # Desugar `x ||= y` to `x || x = y`
  #
  # source://yarp//lib/prism/desugar_compiler.rb#177
  def desugar_or_write_node(node, read_class, write_class, *arguments); end
end

# The dispatcher class fires events for nodes that are found while walking an
# AST to all registered listeners. It's useful for performing different types
# of analysis on the AST while only having to walk the tree once.
#
# To use the dispatcher, you would first instantiate it and register listeners
# for the events you're interested in:
#
#     class OctalListener
#       def on_integer_node_enter(node)
#         if node.octal? && !node.slice.start_with?("0o")
#           warn("Octal integers should be written with the 0o prefix")
#         end
#       end
#     end
#
#     dispatcher = Dispatcher.new
#     dispatcher.register(listener, :on_integer_node_enter)
#
# Then, you can walk any number of trees and dispatch events to the listeners:
#
#     result = Prism.parse("001 + 002 + 003")
#     dispatcher.dispatch(result.value)
#
# Optionally, you can also use `#dispatch_once` to dispatch enter and leave
# events for a single node without recursing further down the tree. This can
# be useful in circumstances where you want to reuse the listeners you already
# have registers but want to stop walking the tree at a certain point.
#
#     integer = result.value.statements.body.first.receiver.receiver
#     dispatcher.dispatch_once(integer)
#
# source://yarp//lib/prism/dispatcher.rb#40
class Prism::Dispatcher < ::Prism::Visitor
  # @return [Dispatcher] a new instance of Dispatcher
  #
  # source://yarp//lib/prism/dispatcher.rb#44
  def initialize; end

  # Walks `root` dispatching events to all registered listeners
  #
  # def dispatch: (Node) -> void
  #
  # source://yarp//lib/prism/visitor.rb#14
  def dispatch(node); end

  # Dispatches a single event for `node` to all registered listeners
  #
  # def dispatch_once: (Node) -> void
  #
  # source://yarp//lib/prism/dispatcher.rb#63
  def dispatch_once(node); end

  # attr_reader listeners: Hash[Symbol, Array[Listener]]
  #
  # source://yarp//lib/prism/dispatcher.rb#42
  def listeners; end

  # Register a listener for one or more events
  #
  # def register: (Listener, *Symbol) -> void
  #
  # source://yarp//lib/prism/dispatcher.rb#51
  def register(listener, *events); end

  # Dispatch enter and leave events for AliasGlobalVariableNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#69
  def visit_alias_global_variable_node(node); end

  # Dispatch enter and leave events for AliasMethodNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#77
  def visit_alias_method_node(node); end

  # Dispatch enter and leave events for AlternationPatternNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#85
  def visit_alternation_pattern_node(node); end

  # Dispatch enter and leave events for AndNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#93
  def visit_and_node(node); end

  # Dispatch enter and leave events for ArgumentsNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#101
  def visit_arguments_node(node); end

  # Dispatch enter and leave events for ArrayNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#109
  def visit_array_node(node); end

  # Dispatch enter and leave events for ArrayPatternNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#117
  def visit_array_pattern_node(node); end

  # Dispatch enter and leave events for AssocNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#125
  def visit_assoc_node(node); end

  # Dispatch enter and leave events for AssocSplatNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#133
  def visit_assoc_splat_node(node); end

  # Dispatch enter and leave events for BackReferenceReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#141
  def visit_back_reference_read_node(node); end

  # Dispatch enter and leave events for BeginNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#149
  def visit_begin_node(node); end

  # Dispatch enter and leave events for BlockArgumentNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#157
  def visit_block_argument_node(node); end

  # Dispatch enter and leave events for BlockLocalVariableNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#165
  def visit_block_local_variable_node(node); end

  # Dispatch enter and leave events for BlockNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#173
  def visit_block_node(node); end

  # Dispatch enter and leave events for BlockParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#181
  def visit_block_parameter_node(node); end

  # Dispatch enter and leave events for BlockParametersNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#189
  def visit_block_parameters_node(node); end

  # Dispatch enter and leave events for BreakNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#197
  def visit_break_node(node); end

  # Dispatch enter and leave events for CallAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#205
  def visit_call_and_write_node(node); end

  # Dispatch enter and leave events for CallNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#213
  def visit_call_node(node); end

  # Dispatch enter and leave events for CallOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#221
  def visit_call_operator_write_node(node); end

  # Dispatch enter and leave events for CallOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#229
  def visit_call_or_write_node(node); end

  # Dispatch enter and leave events for CapturePatternNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#237
  def visit_capture_pattern_node(node); end

  # Dispatch enter and leave events for CaseNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#245
  def visit_case_node(node); end

  # Dispatch enter and leave events for ClassNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#253
  def visit_class_node(node); end

  # Dispatch enter and leave events for ClassVariableAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#261
  def visit_class_variable_and_write_node(node); end

  # Dispatch enter and leave events for ClassVariableOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#269
  def visit_class_variable_operator_write_node(node); end

  # Dispatch enter and leave events for ClassVariableOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#277
  def visit_class_variable_or_write_node(node); end

  # Dispatch enter and leave events for ClassVariableReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#285
  def visit_class_variable_read_node(node); end

  # Dispatch enter and leave events for ClassVariableTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#293
  def visit_class_variable_target_node(node); end

  # Dispatch enter and leave events for ClassVariableWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#301
  def visit_class_variable_write_node(node); end

  # Dispatch enter and leave events for ConstantAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#309
  def visit_constant_and_write_node(node); end

  # Dispatch enter and leave events for ConstantOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#317
  def visit_constant_operator_write_node(node); end

  # Dispatch enter and leave events for ConstantOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#325
  def visit_constant_or_write_node(node); end

  # Dispatch enter and leave events for ConstantPathAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#333
  def visit_constant_path_and_write_node(node); end

  # Dispatch enter and leave events for ConstantPathNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#341
  def visit_constant_path_node(node); end

  # Dispatch enter and leave events for ConstantPathOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#349
  def visit_constant_path_operator_write_node(node); end

  # Dispatch enter and leave events for ConstantPathOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#357
  def visit_constant_path_or_write_node(node); end

  # Dispatch enter and leave events for ConstantPathTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#365
  def visit_constant_path_target_node(node); end

  # Dispatch enter and leave events for ConstantPathWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#373
  def visit_constant_path_write_node(node); end

  # Dispatch enter and leave events for ConstantReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#381
  def visit_constant_read_node(node); end

  # Dispatch enter and leave events for ConstantTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#389
  def visit_constant_target_node(node); end

  # Dispatch enter and leave events for ConstantWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#397
  def visit_constant_write_node(node); end

  # Dispatch enter and leave events for DefNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#405
  def visit_def_node(node); end

  # Dispatch enter and leave events for DefinedNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#413
  def visit_defined_node(node); end

  # Dispatch enter and leave events for ElseNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#421
  def visit_else_node(node); end

  # Dispatch enter and leave events for EmbeddedStatementsNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#429
  def visit_embedded_statements_node(node); end

  # Dispatch enter and leave events for EmbeddedVariableNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#437
  def visit_embedded_variable_node(node); end

  # Dispatch enter and leave events for EnsureNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#445
  def visit_ensure_node(node); end

  # Dispatch enter and leave events for FalseNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#453
  def visit_false_node(node); end

  # Dispatch enter and leave events for FindPatternNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#461
  def visit_find_pattern_node(node); end

  # Dispatch enter and leave events for FlipFlopNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#469
  def visit_flip_flop_node(node); end

  # Dispatch enter and leave events for FloatNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#477
  def visit_float_node(node); end

  # Dispatch enter and leave events for ForNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#485
  def visit_for_node(node); end

  # Dispatch enter and leave events for ForwardingArgumentsNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#493
  def visit_forwarding_arguments_node(node); end

  # Dispatch enter and leave events for ForwardingParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#501
  def visit_forwarding_parameter_node(node); end

  # Dispatch enter and leave events for ForwardingSuperNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#509
  def visit_forwarding_super_node(node); end

  # Dispatch enter and leave events for GlobalVariableAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#517
  def visit_global_variable_and_write_node(node); end

  # Dispatch enter and leave events for GlobalVariableOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#525
  def visit_global_variable_operator_write_node(node); end

  # Dispatch enter and leave events for GlobalVariableOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#533
  def visit_global_variable_or_write_node(node); end

  # Dispatch enter and leave events for GlobalVariableReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#541
  def visit_global_variable_read_node(node); end

  # Dispatch enter and leave events for GlobalVariableTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#549
  def visit_global_variable_target_node(node); end

  # Dispatch enter and leave events for GlobalVariableWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#557
  def visit_global_variable_write_node(node); end

  # Dispatch enter and leave events for HashNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#565
  def visit_hash_node(node); end

  # Dispatch enter and leave events for HashPatternNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#573
  def visit_hash_pattern_node(node); end

  # Dispatch enter and leave events for IfNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#581
  def visit_if_node(node); end

  # Dispatch enter and leave events for ImaginaryNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#589
  def visit_imaginary_node(node); end

  # Dispatch enter and leave events for ImplicitNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#597
  def visit_implicit_node(node); end

  # Dispatch enter and leave events for InNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#605
  def visit_in_node(node); end

  # Dispatch enter and leave events for InstanceVariableAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#613
  def visit_instance_variable_and_write_node(node); end

  # Dispatch enter and leave events for InstanceVariableOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#621
  def visit_instance_variable_operator_write_node(node); end

  # Dispatch enter and leave events for InstanceVariableOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#629
  def visit_instance_variable_or_write_node(node); end

  # Dispatch enter and leave events for InstanceVariableReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#637
  def visit_instance_variable_read_node(node); end

  # Dispatch enter and leave events for InstanceVariableTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#645
  def visit_instance_variable_target_node(node); end

  # Dispatch enter and leave events for InstanceVariableWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#653
  def visit_instance_variable_write_node(node); end

  # Dispatch enter and leave events for IntegerNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#661
  def visit_integer_node(node); end

  # Dispatch enter and leave events for InterpolatedMatchLastLineNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#669
  def visit_interpolated_match_last_line_node(node); end

  # Dispatch enter and leave events for InterpolatedRegularExpressionNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#677
  def visit_interpolated_regular_expression_node(node); end

  # Dispatch enter and leave events for InterpolatedStringNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#685
  def visit_interpolated_string_node(node); end

  # Dispatch enter and leave events for InterpolatedSymbolNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#693
  def visit_interpolated_symbol_node(node); end

  # Dispatch enter and leave events for InterpolatedXStringNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#701
  def visit_interpolated_x_string_node(node); end

  # Dispatch enter and leave events for KeywordHashNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#709
  def visit_keyword_hash_node(node); end

  # Dispatch enter and leave events for KeywordParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#717
  def visit_keyword_parameter_node(node); end

  # Dispatch enter and leave events for KeywordRestParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#725
  def visit_keyword_rest_parameter_node(node); end

  # Dispatch enter and leave events for LambdaNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#733
  def visit_lambda_node(node); end

  # Dispatch enter and leave events for LocalVariableAndWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#741
  def visit_local_variable_and_write_node(node); end

  # Dispatch enter and leave events for LocalVariableOperatorWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#749
  def visit_local_variable_operator_write_node(node); end

  # Dispatch enter and leave events for LocalVariableOrWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#757
  def visit_local_variable_or_write_node(node); end

  # Dispatch enter and leave events for LocalVariableReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#765
  def visit_local_variable_read_node(node); end

  # Dispatch enter and leave events for LocalVariableTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#773
  def visit_local_variable_target_node(node); end

  # Dispatch enter and leave events for LocalVariableWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#781
  def visit_local_variable_write_node(node); end

  # Dispatch enter and leave events for MatchLastLineNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#789
  def visit_match_last_line_node(node); end

  # Dispatch enter and leave events for MatchPredicateNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#797
  def visit_match_predicate_node(node); end

  # Dispatch enter and leave events for MatchRequiredNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#805
  def visit_match_required_node(node); end

  # Dispatch enter and leave events for MatchWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#813
  def visit_match_write_node(node); end

  # Dispatch enter and leave events for MissingNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#821
  def visit_missing_node(node); end

  # Dispatch enter and leave events for ModuleNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#829
  def visit_module_node(node); end

  # Dispatch enter and leave events for MultiTargetNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#837
  def visit_multi_target_node(node); end

  # Dispatch enter and leave events for MultiWriteNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#845
  def visit_multi_write_node(node); end

  # Dispatch enter and leave events for NextNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#853
  def visit_next_node(node); end

  # Dispatch enter and leave events for NilNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#861
  def visit_nil_node(node); end

  # Dispatch enter and leave events for NoKeywordsParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#869
  def visit_no_keywords_parameter_node(node); end

  # Dispatch enter and leave events for NumberedReferenceReadNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#877
  def visit_numbered_reference_read_node(node); end

  # Dispatch enter and leave events for OptionalParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#885
  def visit_optional_parameter_node(node); end

  # Dispatch enter and leave events for OrNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#893
  def visit_or_node(node); end

  # Dispatch enter and leave events for ParametersNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#901
  def visit_parameters_node(node); end

  # Dispatch enter and leave events for ParenthesesNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#909
  def visit_parentheses_node(node); end

  # Dispatch enter and leave events for PinnedExpressionNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#917
  def visit_pinned_expression_node(node); end

  # Dispatch enter and leave events for PinnedVariableNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#925
  def visit_pinned_variable_node(node); end

  # Dispatch enter and leave events for PostExecutionNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#933
  def visit_post_execution_node(node); end

  # Dispatch enter and leave events for PreExecutionNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#941
  def visit_pre_execution_node(node); end

  # Dispatch enter and leave events for ProgramNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#949
  def visit_program_node(node); end

  # Dispatch enter and leave events for RangeNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#957
  def visit_range_node(node); end

  # Dispatch enter and leave events for RationalNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#965
  def visit_rational_node(node); end

  # Dispatch enter and leave events for RedoNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#973
  def visit_redo_node(node); end

  # Dispatch enter and leave events for RegularExpressionNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#981
  def visit_regular_expression_node(node); end

  # Dispatch enter and leave events for RequiredDestructuredParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#989
  def visit_required_destructured_parameter_node(node); end

  # Dispatch enter and leave events for RequiredParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#997
  def visit_required_parameter_node(node); end

  # Dispatch enter and leave events for RescueModifierNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1005
  def visit_rescue_modifier_node(node); end

  # Dispatch enter and leave events for RescueNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1013
  def visit_rescue_node(node); end

  # Dispatch enter and leave events for RestParameterNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1021
  def visit_rest_parameter_node(node); end

  # Dispatch enter and leave events for RetryNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1029
  def visit_retry_node(node); end

  # Dispatch enter and leave events for ReturnNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1037
  def visit_return_node(node); end

  # Dispatch enter and leave events for SelfNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1045
  def visit_self_node(node); end

  # Dispatch enter and leave events for SingletonClassNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1053
  def visit_singleton_class_node(node); end

  # Dispatch enter and leave events for SourceEncodingNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1061
  def visit_source_encoding_node(node); end

  # Dispatch enter and leave events for SourceFileNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1069
  def visit_source_file_node(node); end

  # Dispatch enter and leave events for SourceLineNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1077
  def visit_source_line_node(node); end

  # Dispatch enter and leave events for SplatNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1085
  def visit_splat_node(node); end

  # Dispatch enter and leave events for StatementsNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1093
  def visit_statements_node(node); end

  # Dispatch enter and leave events for StringConcatNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1101
  def visit_string_concat_node(node); end

  # Dispatch enter and leave events for StringNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1109
  def visit_string_node(node); end

  # Dispatch enter and leave events for SuperNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1117
  def visit_super_node(node); end

  # Dispatch enter and leave events for SymbolNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1125
  def visit_symbol_node(node); end

  # Dispatch enter and leave events for TrueNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1133
  def visit_true_node(node); end

  # Dispatch enter and leave events for UndefNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1141
  def visit_undef_node(node); end

  # Dispatch enter and leave events for UnlessNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1149
  def visit_unless_node(node); end

  # Dispatch enter and leave events for UntilNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1157
  def visit_until_node(node); end

  # Dispatch enter and leave events for WhenNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1165
  def visit_when_node(node); end

  # Dispatch enter and leave events for WhileNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1173
  def visit_while_node(node); end

  # Dispatch enter and leave events for XStringNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1181
  def visit_x_string_node(node); end

  # Dispatch enter and leave events for YieldNode nodes and continue
  # walking the tree.
  #
  # source://yarp//lib/prism/dispatcher.rb#1189
  def visit_yield_node(node); end
end

# source://yarp//lib/prism/dispatcher.rb#1195
class Prism::Dispatcher::DispatchOnce < ::Prism::Visitor
  # @return [DispatchOnce] a new instance of DispatchOnce
  #
  # source://yarp//lib/prism/dispatcher.rb#1198
  def initialize(listeners); end

  # Returns the value of attribute listeners.
  #
  # source://yarp//lib/prism/dispatcher.rb#1196
  def listeners; end

  # Dispatch enter and leave events for AliasGlobalVariableNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1203
  def visit_alias_global_variable_node(node); end

  # Dispatch enter and leave events for AliasMethodNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1209
  def visit_alias_method_node(node); end

  # Dispatch enter and leave events for AlternationPatternNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1215
  def visit_alternation_pattern_node(node); end

  # Dispatch enter and leave events for AndNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1221
  def visit_and_node(node); end

  # Dispatch enter and leave events for ArgumentsNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1227
  def visit_arguments_node(node); end

  # Dispatch enter and leave events for ArrayNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1233
  def visit_array_node(node); end

  # Dispatch enter and leave events for ArrayPatternNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1239
  def visit_array_pattern_node(node); end

  # Dispatch enter and leave events for AssocNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1245
  def visit_assoc_node(node); end

  # Dispatch enter and leave events for AssocSplatNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1251
  def visit_assoc_splat_node(node); end

  # Dispatch enter and leave events for BackReferenceReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1257
  def visit_back_reference_read_node(node); end

  # Dispatch enter and leave events for BeginNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1263
  def visit_begin_node(node); end

  # Dispatch enter and leave events for BlockArgumentNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1269
  def visit_block_argument_node(node); end

  # Dispatch enter and leave events for BlockLocalVariableNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1275
  def visit_block_local_variable_node(node); end

  # Dispatch enter and leave events for BlockNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1281
  def visit_block_node(node); end

  # Dispatch enter and leave events for BlockParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1287
  def visit_block_parameter_node(node); end

  # Dispatch enter and leave events for BlockParametersNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1293
  def visit_block_parameters_node(node); end

  # Dispatch enter and leave events for BreakNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1299
  def visit_break_node(node); end

  # Dispatch enter and leave events for CallAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1305
  def visit_call_and_write_node(node); end

  # Dispatch enter and leave events for CallNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1311
  def visit_call_node(node); end

  # Dispatch enter and leave events for CallOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1317
  def visit_call_operator_write_node(node); end

  # Dispatch enter and leave events for CallOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1323
  def visit_call_or_write_node(node); end

  # Dispatch enter and leave events for CapturePatternNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1329
  def visit_capture_pattern_node(node); end

  # Dispatch enter and leave events for CaseNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1335
  def visit_case_node(node); end

  # Dispatch enter and leave events for ClassNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1341
  def visit_class_node(node); end

  # Dispatch enter and leave events for ClassVariableAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1347
  def visit_class_variable_and_write_node(node); end

  # Dispatch enter and leave events for ClassVariableOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1353
  def visit_class_variable_operator_write_node(node); end

  # Dispatch enter and leave events for ClassVariableOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1359
  def visit_class_variable_or_write_node(node); end

  # Dispatch enter and leave events for ClassVariableReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1365
  def visit_class_variable_read_node(node); end

  # Dispatch enter and leave events for ClassVariableTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1371
  def visit_class_variable_target_node(node); end

  # Dispatch enter and leave events for ClassVariableWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1377
  def visit_class_variable_write_node(node); end

  # Dispatch enter and leave events for ConstantAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1383
  def visit_constant_and_write_node(node); end

  # Dispatch enter and leave events for ConstantOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1389
  def visit_constant_operator_write_node(node); end

  # Dispatch enter and leave events for ConstantOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1395
  def visit_constant_or_write_node(node); end

  # Dispatch enter and leave events for ConstantPathAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1401
  def visit_constant_path_and_write_node(node); end

  # Dispatch enter and leave events for ConstantPathNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1407
  def visit_constant_path_node(node); end

  # Dispatch enter and leave events for ConstantPathOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1413
  def visit_constant_path_operator_write_node(node); end

  # Dispatch enter and leave events for ConstantPathOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1419
  def visit_constant_path_or_write_node(node); end

  # Dispatch enter and leave events for ConstantPathTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1425
  def visit_constant_path_target_node(node); end

  # Dispatch enter and leave events for ConstantPathWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1431
  def visit_constant_path_write_node(node); end

  # Dispatch enter and leave events for ConstantReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1437
  def visit_constant_read_node(node); end

  # Dispatch enter and leave events for ConstantTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1443
  def visit_constant_target_node(node); end

  # Dispatch enter and leave events for ConstantWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1449
  def visit_constant_write_node(node); end

  # Dispatch enter and leave events for DefNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1455
  def visit_def_node(node); end

  # Dispatch enter and leave events for DefinedNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1461
  def visit_defined_node(node); end

  # Dispatch enter and leave events for ElseNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1467
  def visit_else_node(node); end

  # Dispatch enter and leave events for EmbeddedStatementsNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1473
  def visit_embedded_statements_node(node); end

  # Dispatch enter and leave events for EmbeddedVariableNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1479
  def visit_embedded_variable_node(node); end

  # Dispatch enter and leave events for EnsureNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1485
  def visit_ensure_node(node); end

  # Dispatch enter and leave events for FalseNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1491
  def visit_false_node(node); end

  # Dispatch enter and leave events for FindPatternNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1497
  def visit_find_pattern_node(node); end

  # Dispatch enter and leave events for FlipFlopNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1503
  def visit_flip_flop_node(node); end

  # Dispatch enter and leave events for FloatNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1509
  def visit_float_node(node); end

  # Dispatch enter and leave events for ForNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1515
  def visit_for_node(node); end

  # Dispatch enter and leave events for ForwardingArgumentsNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1521
  def visit_forwarding_arguments_node(node); end

  # Dispatch enter and leave events for ForwardingParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1527
  def visit_forwarding_parameter_node(node); end

  # Dispatch enter and leave events for ForwardingSuperNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1533
  def visit_forwarding_super_node(node); end

  # Dispatch enter and leave events for GlobalVariableAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1539
  def visit_global_variable_and_write_node(node); end

  # Dispatch enter and leave events for GlobalVariableOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1545
  def visit_global_variable_operator_write_node(node); end

  # Dispatch enter and leave events for GlobalVariableOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1551
  def visit_global_variable_or_write_node(node); end

  # Dispatch enter and leave events for GlobalVariableReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1557
  def visit_global_variable_read_node(node); end

  # Dispatch enter and leave events for GlobalVariableTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1563
  def visit_global_variable_target_node(node); end

  # Dispatch enter and leave events for GlobalVariableWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1569
  def visit_global_variable_write_node(node); end

  # Dispatch enter and leave events for HashNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1575
  def visit_hash_node(node); end

  # Dispatch enter and leave events for HashPatternNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1581
  def visit_hash_pattern_node(node); end

  # Dispatch enter and leave events for IfNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1587
  def visit_if_node(node); end

  # Dispatch enter and leave events for ImaginaryNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1593
  def visit_imaginary_node(node); end

  # Dispatch enter and leave events for ImplicitNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1599
  def visit_implicit_node(node); end

  # Dispatch enter and leave events for InNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1605
  def visit_in_node(node); end

  # Dispatch enter and leave events for InstanceVariableAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1611
  def visit_instance_variable_and_write_node(node); end

  # Dispatch enter and leave events for InstanceVariableOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1617
  def visit_instance_variable_operator_write_node(node); end

  # Dispatch enter and leave events for InstanceVariableOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1623
  def visit_instance_variable_or_write_node(node); end

  # Dispatch enter and leave events for InstanceVariableReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1629
  def visit_instance_variable_read_node(node); end

  # Dispatch enter and leave events for InstanceVariableTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1635
  def visit_instance_variable_target_node(node); end

  # Dispatch enter and leave events for InstanceVariableWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1641
  def visit_instance_variable_write_node(node); end

  # Dispatch enter and leave events for IntegerNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1647
  def visit_integer_node(node); end

  # Dispatch enter and leave events for InterpolatedMatchLastLineNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1653
  def visit_interpolated_match_last_line_node(node); end

  # Dispatch enter and leave events for InterpolatedRegularExpressionNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1659
  def visit_interpolated_regular_expression_node(node); end

  # Dispatch enter and leave events for InterpolatedStringNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1665
  def visit_interpolated_string_node(node); end

  # Dispatch enter and leave events for InterpolatedSymbolNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1671
  def visit_interpolated_symbol_node(node); end

  # Dispatch enter and leave events for InterpolatedXStringNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1677
  def visit_interpolated_x_string_node(node); end

  # Dispatch enter and leave events for KeywordHashNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1683
  def visit_keyword_hash_node(node); end

  # Dispatch enter and leave events for KeywordParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1689
  def visit_keyword_parameter_node(node); end

  # Dispatch enter and leave events for KeywordRestParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1695
  def visit_keyword_rest_parameter_node(node); end

  # Dispatch enter and leave events for LambdaNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1701
  def visit_lambda_node(node); end

  # Dispatch enter and leave events for LocalVariableAndWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1707
  def visit_local_variable_and_write_node(node); end

  # Dispatch enter and leave events for LocalVariableOperatorWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1713
  def visit_local_variable_operator_write_node(node); end

  # Dispatch enter and leave events for LocalVariableOrWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1719
  def visit_local_variable_or_write_node(node); end

  # Dispatch enter and leave events for LocalVariableReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1725
  def visit_local_variable_read_node(node); end

  # Dispatch enter and leave events for LocalVariableTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1731
  def visit_local_variable_target_node(node); end

  # Dispatch enter and leave events for LocalVariableWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1737
  def visit_local_variable_write_node(node); end

  # Dispatch enter and leave events for MatchLastLineNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1743
  def visit_match_last_line_node(node); end

  # Dispatch enter and leave events for MatchPredicateNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1749
  def visit_match_predicate_node(node); end

  # Dispatch enter and leave events for MatchRequiredNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1755
  def visit_match_required_node(node); end

  # Dispatch enter and leave events for MatchWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1761
  def visit_match_write_node(node); end

  # Dispatch enter and leave events for MissingNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1767
  def visit_missing_node(node); end

  # Dispatch enter and leave events for ModuleNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1773
  def visit_module_node(node); end

  # Dispatch enter and leave events for MultiTargetNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1779
  def visit_multi_target_node(node); end

  # Dispatch enter and leave events for MultiWriteNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1785
  def visit_multi_write_node(node); end

  # Dispatch enter and leave events for NextNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1791
  def visit_next_node(node); end

  # Dispatch enter and leave events for NilNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1797
  def visit_nil_node(node); end

  # Dispatch enter and leave events for NoKeywordsParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1803
  def visit_no_keywords_parameter_node(node); end

  # Dispatch enter and leave events for NumberedReferenceReadNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1809
  def visit_numbered_reference_read_node(node); end

  # Dispatch enter and leave events for OptionalParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1815
  def visit_optional_parameter_node(node); end

  # Dispatch enter and leave events for OrNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1821
  def visit_or_node(node); end

  # Dispatch enter and leave events for ParametersNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1827
  def visit_parameters_node(node); end

  # Dispatch enter and leave events for ParenthesesNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1833
  def visit_parentheses_node(node); end

  # Dispatch enter and leave events for PinnedExpressionNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1839
  def visit_pinned_expression_node(node); end

  # Dispatch enter and leave events for PinnedVariableNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1845
  def visit_pinned_variable_node(node); end

  # Dispatch enter and leave events for PostExecutionNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1851
  def visit_post_execution_node(node); end

  # Dispatch enter and leave events for PreExecutionNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1857
  def visit_pre_execution_node(node); end

  # Dispatch enter and leave events for ProgramNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1863
  def visit_program_node(node); end

  # Dispatch enter and leave events for RangeNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1869
  def visit_range_node(node); end

  # Dispatch enter and leave events for RationalNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1875
  def visit_rational_node(node); end

  # Dispatch enter and leave events for RedoNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1881
  def visit_redo_node(node); end

  # Dispatch enter and leave events for RegularExpressionNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1887
  def visit_regular_expression_node(node); end

  # Dispatch enter and leave events for RequiredDestructuredParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1893
  def visit_required_destructured_parameter_node(node); end

  # Dispatch enter and leave events for RequiredParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1899
  def visit_required_parameter_node(node); end

  # Dispatch enter and leave events for RescueModifierNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1905
  def visit_rescue_modifier_node(node); end

  # Dispatch enter and leave events for RescueNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1911
  def visit_rescue_node(node); end

  # Dispatch enter and leave events for RestParameterNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1917
  def visit_rest_parameter_node(node); end

  # Dispatch enter and leave events for RetryNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1923
  def visit_retry_node(node); end

  # Dispatch enter and leave events for ReturnNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1929
  def visit_return_node(node); end

  # Dispatch enter and leave events for SelfNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1935
  def visit_self_node(node); end

  # Dispatch enter and leave events for SingletonClassNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1941
  def visit_singleton_class_node(node); end

  # Dispatch enter and leave events for SourceEncodingNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1947
  def visit_source_encoding_node(node); end

  # Dispatch enter and leave events for SourceFileNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1953
  def visit_source_file_node(node); end

  # Dispatch enter and leave events for SourceLineNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1959
  def visit_source_line_node(node); end

  # Dispatch enter and leave events for SplatNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1965
  def visit_splat_node(node); end

  # Dispatch enter and leave events for StatementsNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1971
  def visit_statements_node(node); end

  # Dispatch enter and leave events for StringConcatNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1977
  def visit_string_concat_node(node); end

  # Dispatch enter and leave events for StringNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1983
  def visit_string_node(node); end

  # Dispatch enter and leave events for SuperNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1989
  def visit_super_node(node); end

  # Dispatch enter and leave events for SymbolNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#1995
  def visit_symbol_node(node); end

  # Dispatch enter and leave events for TrueNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2001
  def visit_true_node(node); end

  # Dispatch enter and leave events for UndefNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2007
  def visit_undef_node(node); end

  # Dispatch enter and leave events for UnlessNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2013
  def visit_unless_node(node); end

  # Dispatch enter and leave events for UntilNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2019
  def visit_until_node(node); end

  # Dispatch enter and leave events for WhenNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2025
  def visit_when_node(node); end

  # Dispatch enter and leave events for WhileNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2031
  def visit_while_node(node); end

  # Dispatch enter and leave events for XStringNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2037
  def visit_x_string_node(node); end

  # Dispatch enter and leave events for YieldNode nodes.
  #
  # source://yarp//lib/prism/dispatcher.rb#2043
  def visit_yield_node(node); end
end

# Represents an `else` clause in a `case`, `if`, or `unless` statement.
#
#     if a then b else c end
#                 ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#4828
class Prism::ElseNode < ::Prism::Node
  # def initialize: (else_keyword_loc: Location, statements: StatementsNode?, end_keyword_loc: Location?, location: Location) -> void
  #
  # @return [ElseNode] a new instance of ElseNode
  #
  # source://yarp//lib/prism/node.rb#4839
  def initialize(else_keyword_loc, statements, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4847
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4852
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4864
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4857
  def compact_child_nodes; end

  # def copy: (**params) -> ElseNode
  #
  # source://yarp//lib/prism/node.rb#4869
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4852
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4882
  def deconstruct_keys(keys); end

  # def else_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#4887
  def else_keyword; end

  # attr_reader else_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4830
  def else_keyword_loc; end

  # def end_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#4892
  def end_keyword; end

  # attr_reader end_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#4836
  def end_keyword_loc; end

  # source://yarp//lib/prism/node.rb#4896
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#4833
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#4923
  def type; end
end

# Represents an interpolated set of statements.
#
#     "foo #{bar}"
#          ^^^^^^
#
# source://yarp//lib/prism/node.rb#4932
class Prism::EmbeddedStatementsNode < ::Prism::Node
  # def initialize: (opening_loc: Location, statements: StatementsNode?, closing_loc: Location, location: Location) -> void
  #
  # @return [EmbeddedStatementsNode] a new instance of EmbeddedStatementsNode
  #
  # source://yarp//lib/prism/node.rb#4943
  def initialize(opening_loc, statements, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#4951
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4956
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#4996
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4940
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#4968
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#4961
  def compact_child_nodes; end

  # def copy: (**params) -> EmbeddedStatementsNode
  #
  # source://yarp//lib/prism/node.rb#4973
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#4956
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#4986
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5000
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#4991
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#4934
  def opening_loc; end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#4937
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5027
  def type; end
end

# Represents an interpolated variable.
#
#     "foo #@bar"
#          ^^^^^
#
# source://yarp//lib/prism/node.rb#5036
class Prism::EmbeddedVariableNode < ::Prism::Node
  # def initialize: (operator_loc: Location, variable: Node, location: Location) -> void
  #
  # @return [EmbeddedVariableNode] a new instance of EmbeddedVariableNode
  #
  # source://yarp//lib/prism/node.rb#5044
  def initialize(operator_loc, variable, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5051
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5056
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5066
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5061
  def compact_child_nodes; end

  # def copy: (**params) -> EmbeddedVariableNode
  #
  # source://yarp//lib/prism/node.rb#5071
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5056
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5083
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5092
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#5088
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5038
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5114
  def type; end

  # attr_reader variable: Node
  #
  # source://yarp//lib/prism/node.rb#5041
  def variable; end
end

# Represents an `ensure` clause in a `begin` statement.
#
#     begin
#       foo
#     ensure
#     ^^^^^^
#       bar
#     end
#
# source://yarp//lib/prism/node.rb#5127
class Prism::EnsureNode < ::Prism::Node
  # def initialize: (ensure_keyword_loc: Location, statements: StatementsNode?, end_keyword_loc: Location, location: Location) -> void
  #
  # @return [EnsureNode] a new instance of EnsureNode
  #
  # source://yarp//lib/prism/node.rb#5138
  def initialize(ensure_keyword_loc, statements, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5146
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5151
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5163
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5156
  def compact_child_nodes; end

  # def copy: (**params) -> EnsureNode
  #
  # source://yarp//lib/prism/node.rb#5168
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5151
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5181
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#5191
  def end_keyword; end

  # attr_reader end_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5135
  def end_keyword_loc; end

  # def ensure_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#5186
  def ensure_keyword; end

  # attr_reader ensure_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5129
  def ensure_keyword_loc; end

  # source://yarp//lib/prism/node.rb#5195
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#5132
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5222
  def type; end
end

# Represents the use of the literal `false` keyword.
#
#     false
#     ^^^^^
#
# source://yarp//lib/prism/node.rb#5231
class Prism::FalseNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [FalseNode] a new instance of FalseNode
  #
  # source://yarp//lib/prism/node.rb#5233
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5238
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5243
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5253
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5248
  def compact_child_nodes; end

  # def copy: (**params) -> FalseNode
  #
  # source://yarp//lib/prism/node.rb#5258
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5243
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5268
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5272
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5291
  def type; end
end

# Represents a find pattern in pattern matching.
#
#     foo in *bar, baz, *qux
#     ^^^^^^^^^^^^^^^^^^^^^^
#
#     foo in [*bar, baz, *qux]
#     ^^^^^^^^^^^^^^^^^^^^^^^^
#
#     foo in Foo(*bar, baz, *qux)
#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#5306
class Prism::FindPatternNode < ::Prism::Node
  # def initialize: (constant: Node?, left: Node, requireds: Array[Node], right: Node, opening_loc: Location?, closing_loc: Location?, location: Location) -> void
  #
  # @return [FindPatternNode] a new instance of FindPatternNode
  #
  # source://yarp//lib/prism/node.rb#5326
  def initialize(constant, left, requireds, right, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5337
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5342
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#5388
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#5323
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5357
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5347
  def compact_child_nodes; end

  # attr_reader constant: Node?
  #
  # source://yarp//lib/prism/node.rb#5308
  def constant; end

  # def copy: (**params) -> FindPatternNode
  #
  # source://yarp//lib/prism/node.rb#5362
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5342
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5378
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5392
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node
  #
  # source://yarp//lib/prism/node.rb#5311
  def left; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#5383
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#5320
  def opening_loc; end

  # attr_reader requireds: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5314
  def requireds; end

  # attr_reader right: Node
  #
  # source://yarp//lib/prism/node.rb#5317
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5424
  def type; end
end

# Represents the use of the `..` or `...` operators to create flip flops.
#
#     baz if foo .. bar
#            ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#5433
class Prism::FlipFlopNode < ::Prism::Node
  # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void
  #
  # @return [FlipFlopNode] a new instance of FlipFlopNode
  #
  # source://yarp//lib/prism/node.rb#5447
  def initialize(left, right, operator_loc, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5456
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5461
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5474
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5466
  def compact_child_nodes; end

  # def copy: (**params) -> FlipFlopNode
  #
  # source://yarp//lib/prism/node.rb#5479
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5461
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5493
  def deconstruct_keys(keys); end

  # def exclude_end?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#5503
  def exclude_end?; end

  # source://yarp//lib/prism/node.rb#5507
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node?
  #
  # source://yarp//lib/prism/node.rb#5435
  def left; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#5498
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5441
  def operator_loc; end

  # attr_reader right: Node?
  #
  # source://yarp//lib/prism/node.rb#5438
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5541
  def type; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#5444
  def flags; end
end

# Represents a floating point number literal.
#
#     1.0
#     ^^^
#
# source://yarp//lib/prism/node.rb#5550
class Prism::FloatNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [FloatNode] a new instance of FloatNode
  #
  # source://yarp//lib/prism/node.rb#5552
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5557
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5562
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5572
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5567
  def compact_child_nodes; end

  # def copy: (**params) -> FloatNode
  #
  # source://yarp//lib/prism/node.rb#5577
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5562
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5587
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5591
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5610
  def type; end

  # Returns the value of the node as a Ruby Float.
  #
  # source://yarp//lib/prism/node_ext.rb#8
  def value; end
end

# Represents the use of the `for` keyword.
#
#     for i in a end
#     ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#5619
class Prism::ForNode < ::Prism::Node
  # def initialize: (index: Node, collection: Node, statements: StatementsNode?, for_keyword_loc: Location, in_keyword_loc: Location, do_keyword_loc: Location?, end_keyword_loc: Location, location: Location) -> void
  #
  # @return [ForNode] a new instance of ForNode
  #
  # source://yarp//lib/prism/node.rb#5642
  def initialize(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5654
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5659
  def child_nodes; end

  # attr_reader collection: Node
  #
  # source://yarp//lib/prism/node.rb#5624
  def collection; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5673
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5664
  def compact_child_nodes; end

  # def copy: (**params) -> ForNode
  #
  # source://yarp//lib/prism/node.rb#5678
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5659
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5695
  def deconstruct_keys(keys); end

  # def do_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#5710
  def do_keyword; end

  # attr_reader do_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#5636
  def do_keyword_loc; end

  # def end_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#5715
  def end_keyword; end

  # attr_reader end_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5639
  def end_keyword_loc; end

  # def for_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#5700
  def for_keyword; end

  # attr_reader for_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5630
  def for_keyword_loc; end

  # def in_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#5705
  def in_keyword; end

  # attr_reader in_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5633
  def in_keyword_loc; end

  # attr_reader index: Node
  #
  # source://yarp//lib/prism/node.rb#5621
  def index; end

  # source://yarp//lib/prism/node.rb#5719
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#5627
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5752
  def type; end
end

# Represents forwarding all arguments to this method to another method.
#
#     def foo(...)
#       bar(...)
#       ^^^^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#5763
class Prism::ForwardingArgumentsNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [ForwardingArgumentsNode] a new instance of ForwardingArgumentsNode
  #
  # source://yarp//lib/prism/node.rb#5765
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5770
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5775
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5785
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5780
  def compact_child_nodes; end

  # def copy: (**params) -> ForwardingArgumentsNode
  #
  # source://yarp//lib/prism/node.rb#5790
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5775
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5800
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5804
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5823
  def type; end
end

# Represents the use of the forwarding parameter in a method, block, or lambda declaration.
#
#     def foo(...)
#             ^^^
#     end
#
# source://yarp//lib/prism/node.rb#5833
class Prism::ForwardingParameterNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [ForwardingParameterNode] a new instance of ForwardingParameterNode
  #
  # source://yarp//lib/prism/node.rb#5835
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5840
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5845
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5855
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5850
  def compact_child_nodes; end

  # def copy: (**params) -> ForwardingParameterNode
  #
  # source://yarp//lib/prism/node.rb#5860
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5845
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5870
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5874
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5893
  def type; end
end

# Represents the use of the `super` keyword without parentheses or arguments.
#
#     super
#     ^^^^^
#
# source://yarp//lib/prism/node.rb#5902
class Prism::ForwardingSuperNode < ::Prism::Node
  # def initialize: (block: BlockNode?, location: Location) -> void
  #
  # @return [ForwardingSuperNode] a new instance of ForwardingSuperNode
  #
  # source://yarp//lib/prism/node.rb#5907
  def initialize(block, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#5913
  def accept(visitor); end

  # attr_reader block: BlockNode?
  #
  # source://yarp//lib/prism/node.rb#5904
  def block; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5918
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#5930
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#5923
  def compact_child_nodes; end

  # def copy: (**params) -> ForwardingSuperNode
  #
  # source://yarp//lib/prism/node.rb#5935
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#5918
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#5946
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#5950
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#5975
  def type; end
end

# Represents the use of the `&&=` operator for assignment to a global variable.
#
#     $target &&= value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#5984
class Prism::GlobalVariableAndWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [GlobalVariableAndWriteNode] a new instance of GlobalVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#5998
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6007
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6012
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6022
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6017
  def compact_child_nodes; end

  # def copy: (**params) -> GlobalVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#6027
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6012
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6041
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6050
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#5986
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5989
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#6046
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#5992
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6074
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#5995
  def value; end
end

# Represents assigning to a global variable using an operator that isn't `=`.
#
#     $target += value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#6083
class Prism::GlobalVariableOperatorWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
  #
  # @return [GlobalVariableOperatorWriteNode] a new instance of GlobalVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#6100
  def initialize(name, name_loc, operator_loc, value, operator, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6110
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6115
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6125
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6120
  def compact_child_nodes; end

  # def copy: (**params) -> GlobalVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#6130
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6115
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6145
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6149
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#6085
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6088
  def name_loc; end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#6097
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6091
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6174
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#6094
  def value; end
end

# Represents the use of the `||=` operator for assignment to a global variable.
#
#     $target ||= value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#6183
class Prism::GlobalVariableOrWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [GlobalVariableOrWriteNode] a new instance of GlobalVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#6197
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6206
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6211
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6221
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6216
  def compact_child_nodes; end

  # def copy: (**params) -> GlobalVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#6226
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6211
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6240
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6249
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#6185
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6188
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#6245
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6191
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6273
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#6194
  def value; end
end

# Represents referencing a global variable.
#
#     $foo
#     ^^^^
#
# source://yarp//lib/prism/node.rb#6282
class Prism::GlobalVariableReadNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [GlobalVariableReadNode] a new instance of GlobalVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#6287
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6293
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6298
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6308
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6303
  def compact_child_nodes; end

  # def copy: (**params) -> GlobalVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#6313
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6298
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6324
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6328
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#6284
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6348
  def type; end
end

# Represents writing to a global variable in a context that doesn't have an explicit value.
#
#     $foo, $bar = baz
#     ^^^^  ^^^^
#
# source://yarp//lib/prism/node.rb#6357
class Prism::GlobalVariableTargetNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [GlobalVariableTargetNode] a new instance of GlobalVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#6362
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6368
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6373
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6383
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6378
  def compact_child_nodes; end

  # def copy: (**params) -> GlobalVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#6388
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6373
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6399
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6403
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#6359
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6423
  def type; end
end

# Represents writing to a global variable.
#
#     $foo = 1
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#6432
class Prism::GlobalVariableWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, value: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [GlobalVariableWriteNode] a new instance of GlobalVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#6446
  def initialize(name, name_loc, value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6455
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6460
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6470
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6465
  def compact_child_nodes; end

  # def copy: (**params) -> GlobalVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#6475
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6460
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6489
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6498
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#6434
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6437
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#6494
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6443
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6522
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#6440
  def value; end
end

# Represents a hash literal.
#
#     { a => b }
#     ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#6531
class Prism::HashNode < ::Prism::Node
  # def initialize: (opening_loc: Location, elements: Array[Node], closing_loc: Location, location: Location) -> void
  #
  # @return [HashNode] a new instance of HashNode
  #
  # source://yarp//lib/prism/node.rb#6542
  def initialize(opening_loc, elements, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6550
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6555
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#6593
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6539
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6565
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6560
  def compact_child_nodes; end

  # def copy: (**params) -> HashNode
  #
  # source://yarp//lib/prism/node.rb#6570
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6555
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6583
  def deconstruct_keys(keys); end

  # attr_reader elements: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6536
  def elements; end

  # source://yarp//lib/prism/node.rb#6597
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#6588
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#6533
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6619
  def type; end
end

# Represents a hash pattern in pattern matching.
#
#     foo => { a: 1, b: 2 }
#            ^^^^^^^^^^^^^^
#
#     foo => { a: 1, b: 2, **c }
#            ^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#6631
class Prism::HashPatternNode < ::Prism::Node
  # def initialize: (constant: Node?, assocs: Array[Node], kwrest: Node?, opening_loc: Location?, closing_loc: Location?, location: Location) -> void
  #
  # @return [HashPatternNode] a new instance of HashPatternNode
  #
  # source://yarp//lib/prism/node.rb#6648
  def initialize(constant, assocs, kwrest, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6658
  def accept(visitor); end

  # attr_reader assocs: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6636
  def assocs; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6663
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#6707
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#6645
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6677
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6668
  def compact_child_nodes; end

  # attr_reader constant: Node?
  #
  # source://yarp//lib/prism/node.rb#6633
  def constant; end

  # def copy: (**params) -> HashPatternNode
  #
  # source://yarp//lib/prism/node.rb#6682
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6663
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6697
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6711
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader kwrest: Node?
  #
  # source://yarp//lib/prism/node.rb#6639
  def kwrest; end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#6702
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#6642
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6745
  def type; end
end

# Represents the use of the `if` keyword, either in the block form or the modifier form.
#
#     bar if foo
#     ^^^^^^^^^^
#
#     if foo then bar end
#     ^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#6757
class Prism::IfNode < ::Prism::Node
  # def initialize: (if_keyword_loc: Location?, predicate: Node, statements: StatementsNode?, consequent: Node?, end_keyword_loc: Location?, location: Location) -> void
  #
  # @return [IfNode] a new instance of IfNode
  #
  # source://yarp//lib/prism/node.rb#6774
  def initialize(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6784
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6793
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6807
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6798
  def compact_child_nodes; end

  # attr_reader consequent: Node?
  #
  # source://yarp//lib/prism/node.rb#6768
  def consequent; end

  # def copy: (**params) -> IfNode
  #
  # source://yarp//lib/prism/node.rb#6812
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6793
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6827
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#6837
  def end_keyword; end

  # attr_reader end_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#6771
  def end_keyword_loc; end

  # def if_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#6832
  def if_keyword; end

  # attr_reader if_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#6759
  def if_keyword_loc; end

  # source://yarp//lib/prism/node.rb#6841
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader predicate: Node
  #
  # source://yarp//lib/prism/node.rb#6762
  def predicate; end

  # source://yarp//lib/prism/node.rb#6788
  def set_newline_flag(newline_marked); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#6765
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6876
  def type; end
end

# Represents an imaginary number literal.
#
#     1.0i
#     ^^^^
#
# source://yarp//lib/prism/node.rb#6885
class Prism::ImaginaryNode < ::Prism::Node
  # def initialize: (numeric: Node, location: Location) -> void
  #
  # @return [ImaginaryNode] a new instance of ImaginaryNode
  #
  # source://yarp//lib/prism/node.rb#6890
  def initialize(numeric, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6896
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6901
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6911
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6906
  def compact_child_nodes; end

  # def copy: (**params) -> ImaginaryNode
  #
  # source://yarp//lib/prism/node.rb#6916
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6901
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#6927
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#6931
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader numeric: Node
  #
  # source://yarp//lib/prism/node.rb#6887
  def numeric; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#6952
  def type; end

  # Returns the value of the node as a Ruby Complex.
  #
  # source://yarp//lib/prism/node_ext.rb#15
  def value; end
end

# Represents a node that is implicitly being added to the tree but doesn't
# correspond directly to a node in the source.
#
#     { foo: }
#       ^^^^
#
#     { Foo: }
#       ^^^^
#
# source://yarp//lib/prism/node.rb#6965
class Prism::ImplicitNode < ::Prism::Node
  # def initialize: (value: Node, location: Location) -> void
  #
  # @return [ImplicitNode] a new instance of ImplicitNode
  #
  # source://yarp//lib/prism/node.rb#6970
  def initialize(value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#6976
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6981
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#6991
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#6986
  def compact_child_nodes; end

  # def copy: (**params) -> ImplicitNode
  #
  # source://yarp//lib/prism/node.rb#6996
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#6981
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7007
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7011
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7032
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#6967
  def value; end
end

# Represents the use of the `in` keyword in a case statement.
#
#     case a; in b then c end
#             ^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7041
class Prism::InNode < ::Prism::Node
  # def initialize: (pattern: Node, statements: StatementsNode?, in_loc: Location, then_loc: Location?, location: Location) -> void
  #
  # @return [InNode] a new instance of InNode
  #
  # source://yarp//lib/prism/node.rb#7055
  def initialize(pattern, statements, in_loc, then_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7064
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7069
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7082
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7074
  def compact_child_nodes; end

  # def copy: (**params) -> InNode
  #
  # source://yarp//lib/prism/node.rb#7087
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7069
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7101
  def deconstruct_keys(keys); end

  # def in: () -> String
  #
  # source://yarp//lib/prism/node.rb#7106
  def in; end

  # attr_reader in_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7049
  def in_loc; end

  # source://yarp//lib/prism/node.rb#7115
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader pattern: Node
  #
  # source://yarp//lib/prism/node.rb#7043
  def pattern; end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#7046
  def statements; end

  # def then: () -> String?
  #
  # source://yarp//lib/prism/node.rb#7111
  def then; end

  # attr_reader then_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#7052
  def then_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7144
  def type; end
end

# Represents the use of the `&&=` operator for assignment to an instance variable.
#
#     @target &&= value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7153
class Prism::InstanceVariableAndWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [InstanceVariableAndWriteNode] a new instance of InstanceVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#7167
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7176
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7181
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7191
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7186
  def compact_child_nodes; end

  # def copy: (**params) -> InstanceVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#7196
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7181
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7210
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7219
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#7155
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7158
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#7215
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7161
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7243
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#7164
  def value; end
end

# Represents assigning to an instance variable using an operator that isn't `=`.
#
#     @target += value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7252
class Prism::InstanceVariableOperatorWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
  #
  # @return [InstanceVariableOperatorWriteNode] a new instance of InstanceVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#7269
  def initialize(name, name_loc, operator_loc, value, operator, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7279
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7284
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7294
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7289
  def compact_child_nodes; end

  # def copy: (**params) -> InstanceVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#7299
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7284
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7314
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7318
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#7254
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7257
  def name_loc; end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#7266
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7260
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7343
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#7263
  def value; end
end

# Represents the use of the `||=` operator for assignment to an instance variable.
#
#     @target ||= value
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7352
class Prism::InstanceVariableOrWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [InstanceVariableOrWriteNode] a new instance of InstanceVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#7366
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7375
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7380
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7390
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7385
  def compact_child_nodes; end

  # def copy: (**params) -> InstanceVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#7395
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7380
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7409
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7418
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#7354
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7357
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#7414
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7360
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7442
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#7363
  def value; end
end

# Represents referencing an instance variable.
#
#     @foo
#     ^^^^
#
# source://yarp//lib/prism/node.rb#7451
class Prism::InstanceVariableReadNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [InstanceVariableReadNode] a new instance of InstanceVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#7456
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7462
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7467
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7477
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7472
  def compact_child_nodes; end

  # def copy: (**params) -> InstanceVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#7482
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7467
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7493
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7497
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#7453
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7517
  def type; end
end

# Represents writing to an instance variable in a context that doesn't have an explicit value.
#
#     @foo, @bar = baz
#     ^^^^  ^^^^
#
# source://yarp//lib/prism/node.rb#7526
class Prism::InstanceVariableTargetNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [InstanceVariableTargetNode] a new instance of InstanceVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#7531
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7537
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7542
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7552
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7547
  def compact_child_nodes; end

  # def copy: (**params) -> InstanceVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#7557
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7542
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7568
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7572
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#7528
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7592
  def type; end
end

# Represents writing to an instance variable.
#
#     @foo = 1
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7601
class Prism::InstanceVariableWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, value: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [InstanceVariableWriteNode] a new instance of InstanceVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#7615
  def initialize(name, name_loc, value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7624
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7629
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7639
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7634
  def compact_child_nodes; end

  # def copy: (**params) -> InstanceVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#7644
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7629
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7658
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#7667
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#7603
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7606
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#7663
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7612
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7691
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#7609
  def value; end
end

# source://yarp//lib/prism/node.rb#14486
module Prism::IntegerBaseFlags; end

# 0b prefix
#
# source://yarp//lib/prism/node.rb#14488
Prism::IntegerBaseFlags::BINARY = T.let(T.unsafe(nil), Integer)

# 0d or no prefix
#
# source://yarp//lib/prism/node.rb#14494
Prism::IntegerBaseFlags::DECIMAL = T.let(T.unsafe(nil), Integer)

# 0x prefix
#
# source://yarp//lib/prism/node.rb#14497
Prism::IntegerBaseFlags::HEXADECIMAL = T.let(T.unsafe(nil), Integer)

# 0o or 0 prefix
#
# source://yarp//lib/prism/node.rb#14491
Prism::IntegerBaseFlags::OCTAL = T.let(T.unsafe(nil), Integer)

# Represents an integer number literal.
#
#     1
#     ^
#
# source://yarp//lib/prism/node.rb#7700
class Prism::IntegerNode < ::Prism::Node
  # def initialize: (flags: Integer, location: Location) -> void
  #
  # @return [IntegerNode] a new instance of IntegerNode
  #
  # source://yarp//lib/prism/node.rb#7705
  def initialize(flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7711
  def accept(visitor); end

  # def binary?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7747
  def binary?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7716
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7726
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7721
  def compact_child_nodes; end

  # def copy: (**params) -> IntegerNode
  #
  # source://yarp//lib/prism/node.rb#7731
  def copy(**params); end

  # def decimal?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7757
  def decimal?; end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7716
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7742
  def deconstruct_keys(keys); end

  # def hexadecimal?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7762
  def hexadecimal?; end

  # source://yarp//lib/prism/node.rb#7766
  def inspect(inspector = T.unsafe(nil)); end

  # def octal?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7752
  def octal?; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7787
  def type; end

  # Returns the value of the node as a Ruby Integer.
  #
  # source://yarp//lib/prism/node_ext.rb#22
  def value; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#7702
  def flags; end
end

# Represents a regular expression literal that contains interpolation that
# is being used in the predicate of a conditional to implicitly match
# against the last line read by an IO object.
#
#     if /foo #{bar} baz/ then end
#        ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7798
class Prism::InterpolatedMatchLastLineNode < ::Prism::Node
  # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, flags: Integer, location: Location) -> void
  #
  # @return [InterpolatedMatchLastLineNode] a new instance of InterpolatedMatchLastLineNode
  #
  # source://yarp//lib/prism/node.rb#7812
  def initialize(opening_loc, parts, closing_loc, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7821
  def accept(visitor); end

  # def ascii_8bit?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7895
  def ascii_8bit?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7831
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#7870
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7806
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7841
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7836
  def compact_child_nodes; end

  # def copy: (**params) -> InterpolatedMatchLastLineNode
  #
  # source://yarp//lib/prism/node.rb#7846
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7831
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#7860
  def deconstruct_keys(keys); end

  # def euc_jp?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7890
  def euc_jp?; end

  # def extended?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7880
  def extended?; end

  # def ignore_case?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7875
  def ignore_case?; end

  # source://yarp//lib/prism/node.rb#7914
  def inspect(inspector = T.unsafe(nil)); end

  # def multi_line?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7885
  def multi_line?; end

  # def once?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7910
  def once?; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#7865
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7800
  def opening_loc; end

  # attr_reader parts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7803
  def parts; end

  # source://yarp//lib/prism/node.rb#7825
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#7938
  def type; end

  # def utf_8?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7905
  def utf_8?; end

  # def windows_31j?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#7900
  def windows_31j?; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#7809
  def flags; end
end

# Represents a regular expression literal that contains interpolation.
#
#     /foo #{bar} baz/
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#7947
class Prism::InterpolatedRegularExpressionNode < ::Prism::Node
  # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, flags: Integer, location: Location) -> void
  #
  # @return [InterpolatedRegularExpressionNode] a new instance of InterpolatedRegularExpressionNode
  #
  # source://yarp//lib/prism/node.rb#7961
  def initialize(opening_loc, parts, closing_loc, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#7970
  def accept(visitor); end

  # def ascii_8bit?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8044
  def ascii_8bit?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7980
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#8019
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7955
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#7990
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7985
  def compact_child_nodes; end

  # def copy: (**params) -> InterpolatedRegularExpressionNode
  #
  # source://yarp//lib/prism/node.rb#7995
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#7980
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8009
  def deconstruct_keys(keys); end

  # def euc_jp?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8039
  def euc_jp?; end

  # def extended?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8029
  def extended?; end

  # def ignore_case?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8024
  def ignore_case?; end

  # source://yarp//lib/prism/node.rb#8063
  def inspect(inspector = T.unsafe(nil)); end

  # def multi_line?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8034
  def multi_line?; end

  # def once?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8059
  def once?; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#8014
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#7949
  def opening_loc; end

  # Returns a numeric value that represents the flags that were used to create
  # the regular expression.
  #
  # source://yarp//lib/prism/node_ext.rb#30
  def options; end

  # attr_reader parts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#7952
  def parts; end

  # source://yarp//lib/prism/node.rb#7974
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8087
  def type; end

  # def utf_8?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8054
  def utf_8?; end

  # def windows_31j?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#8049
  def windows_31j?; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#7958
  def flags; end
end

# Represents a string literal that contains interpolation.
#
#     "foo #{bar} baz"
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#8096
class Prism::InterpolatedStringNode < ::Prism::Node
  # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void
  #
  # @return [InterpolatedStringNode] a new instance of InterpolatedStringNode
  #
  # source://yarp//lib/prism/node.rb#8107
  def initialize(opening_loc, parts, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8115
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8125
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#8163
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#8104
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8135
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8130
  def compact_child_nodes; end

  # def copy: (**params) -> InterpolatedStringNode
  #
  # source://yarp//lib/prism/node.rb#8140
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8125
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8153
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#8167
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#8158
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#8098
  def opening_loc; end

  # attr_reader parts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8101
  def parts; end

  # source://yarp//lib/prism/node.rb#8119
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8189
  def type; end
end

# Represents a symbol literal that contains interpolation.
#
#     :"foo #{bar} baz"
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#8198
class Prism::InterpolatedSymbolNode < ::Prism::Node
  # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void
  #
  # @return [InterpolatedSymbolNode] a new instance of InterpolatedSymbolNode
  #
  # source://yarp//lib/prism/node.rb#8209
  def initialize(opening_loc, parts, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8217
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8227
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#8265
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#8206
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8237
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8232
  def compact_child_nodes; end

  # def copy: (**params) -> InterpolatedSymbolNode
  #
  # source://yarp//lib/prism/node.rb#8242
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8227
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8255
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#8269
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#8260
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#8200
  def opening_loc; end

  # attr_reader parts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8203
  def parts; end

  # source://yarp//lib/prism/node.rb#8221
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8291
  def type; end
end

# Represents an xstring literal that contains interpolation.
#
#     `foo #{bar} baz`
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#8300
class Prism::InterpolatedXStringNode < ::Prism::Node
  # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, location: Location) -> void
  #
  # @return [InterpolatedXStringNode] a new instance of InterpolatedXStringNode
  #
  # source://yarp//lib/prism/node.rb#8311
  def initialize(opening_loc, parts, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8319
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8329
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#8367
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8308
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8339
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8334
  def compact_child_nodes; end

  # def copy: (**params) -> InterpolatedXStringNode
  #
  # source://yarp//lib/prism/node.rb#8344
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8329
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8357
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#8371
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#8362
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8302
  def opening_loc; end

  # attr_reader parts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8305
  def parts; end

  # source://yarp//lib/prism/node.rb#8323
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8393
  def type; end
end

# Represents a hash literal without opening and closing braces.
#
#     foo(a: b)
#         ^^^^
#
# source://yarp//lib/prism/node.rb#8402
class Prism::KeywordHashNode < ::Prism::Node
  # def initialize: (elements: Array[Node], location: Location) -> void
  #
  # @return [KeywordHashNode] a new instance of KeywordHashNode
  #
  # source://yarp//lib/prism/node.rb#8407
  def initialize(elements, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8413
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8418
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8428
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8423
  def compact_child_nodes; end

  # def copy: (**params) -> KeywordHashNode
  #
  # source://yarp//lib/prism/node.rb#8433
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8418
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8444
  def deconstruct_keys(keys); end

  # attr_reader elements: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8404
  def elements; end

  # source://yarp//lib/prism/node.rb#8448
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8468
  def type; end
end

# Represents a keyword parameter to a method, block, or lambda definition.
#
#     def a(b:)
#           ^^
#     end
#
#     def a(b: 1)
#           ^^^^
#     end
#
# source://yarp//lib/prism/node.rb#8482
class Prism::KeywordParameterNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, value: Node?, location: Location) -> void
  #
  # @return [KeywordParameterNode] a new instance of KeywordParameterNode
  #
  # source://yarp//lib/prism/node.rb#8493
  def initialize(name, name_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8501
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8506
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8518
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8511
  def compact_child_nodes; end

  # def copy: (**params) -> KeywordParameterNode
  #
  # source://yarp//lib/prism/node.rb#8523
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8506
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8536
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#8540
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#8484
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8487
  def name_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8567
  def type; end

  # attr_reader value: Node?
  #
  # source://yarp//lib/prism/node.rb#8490
  def value; end
end

# Represents a keyword rest parameter to a method, block, or lambda definition.
#
#     def a(**b)
#           ^^^
#     end
#
# source://yarp//lib/prism/node.rb#8577
class Prism::KeywordRestParameterNode < ::Prism::Node
  # def initialize: (name: Symbol?, name_loc: Location?, operator_loc: Location, location: Location) -> void
  #
  # @return [KeywordRestParameterNode] a new instance of KeywordRestParameterNode
  #
  # source://yarp//lib/prism/node.rb#8588
  def initialize(name, name_loc, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8596
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8601
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8611
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8606
  def compact_child_nodes; end

  # def copy: (**params) -> KeywordRestParameterNode
  #
  # source://yarp//lib/prism/node.rb#8616
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8601
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8629
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#8638
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol?
  #
  # source://yarp//lib/prism/node.rb#8579
  def name; end

  # attr_reader name_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#8582
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#8634
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8585
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8660
  def type; end
end

# Represents using a lambda literal (not the lambda method call).
#
#     ->(value) { value * 2 }
#     ^^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#8669
class Prism::LambdaNode < ::Prism::Node
  # def initialize: (locals: Array[Symbol], operator_loc: Location, opening_loc: Location, closing_loc: Location, parameters: BlockParametersNode?, body: Node?, location: Location) -> void
  #
  # @return [LambdaNode] a new instance of LambdaNode
  #
  # source://yarp//lib/prism/node.rb#8689
  def initialize(locals, operator_loc, opening_loc, closing_loc, parameters, body, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8700
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#8686
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8705
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#8754
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8680
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8718
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8710
  def compact_child_nodes; end

  # def copy: (**params) -> LambdaNode
  #
  # source://yarp//lib/prism/node.rb#8723
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8705
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8739
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#8758
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#8671
  def locals; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#8749
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8677
  def opening_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#8744
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8674
  def operator_loc; end

  # attr_reader parameters: BlockParametersNode?
  #
  # source://yarp//lib/prism/node.rb#8683
  def parameters; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8793
  def type; end
end

# This class is responsible for lexing the source using prism and then
# converting those tokens to be compatible with Ripper. In the vast majority
# of cases, this is a one-to-one mapping of the token type. Everything else
# generally lines up. However, there are a few cases that require special
# handling.
#
# source://yarp//lib/prism/lex_compat.rb#11
class Prism::LexCompat
  # @return [LexCompat] a new instance of LexCompat
  #
  # source://yarp//lib/prism/lex_compat.rb#555
  def initialize(source, filepath = T.unsafe(nil)); end

  # Returns the value of attribute filepath.
  #
  # source://yarp//lib/prism/lex_compat.rb#553
  def filepath; end

  # source://yarp//lib/prism/lex_compat.rb#560
  def result; end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/lex_compat.rb#553
  def source; end
end

# Ripper doesn't include the rest of the token in the event, so we need to
# trim it down to just the content on the first line when comparing.
#
# source://yarp//lib/prism/lex_compat.rb#206
class Prism::LexCompat::EndContentToken < ::Prism::LexCompat::Token
  # source://yarp//lib/prism/lex_compat.rb#207
  def ==(other); end
end

# A heredoc in this case is a list of tokens that belong to the body of the
# heredoc that should be appended onto the list of tokens when the heredoc
# closes.
#
# source://yarp//lib/prism/lex_compat.rb#267
module Prism::LexCompat::Heredoc
  class << self
    # Here we will split between the two types of heredocs and return the
    # object that will store their tokens.
    #
    # source://yarp//lib/prism/lex_compat.rb#541
    def build(opening); end
  end
end

# Dash heredocs are a little more complicated. They are a list of tokens
# that need to be split on "\\\n" to mimic Ripper's behavior. We also need
# to keep track of the state that the heredoc was opened in.
#
# source://yarp//lib/prism/lex_compat.rb#291
class Prism::LexCompat::Heredoc::DashHeredoc
  # @return [DashHeredoc] a new instance of DashHeredoc
  #
  # source://yarp//lib/prism/lex_compat.rb#294
  def initialize(split); end

  # source://yarp//lib/prism/lex_compat.rb#299
  def <<(token); end

  # Returns the value of attribute split.
  #
  # source://yarp//lib/prism/lex_compat.rb#292
  def split; end

  # source://yarp//lib/prism/lex_compat.rb#303
  def to_a; end

  # Returns the value of attribute tokens.
  #
  # source://yarp//lib/prism/lex_compat.rb#292
  def tokens; end
end

# Heredocs that are dedenting heredocs are a little more complicated.
# Ripper outputs on_ignored_sp tokens for the whitespace that is being
# removed from the output. prism only modifies the node itself and keeps
# the token the same. This simplifies prism, but makes comparing against
# Ripper much harder because there is a length mismatch.
#
# Fortunately, we already have to pull out the heredoc tokens in order to
# insert them into the stream in the correct order. As such, we can do
# some extra manipulation on the tokens to make them match Ripper's
# output by mirroring the dedent logic that Ripper uses.
#
# source://yarp//lib/prism/lex_compat.rb#350
class Prism::LexCompat::Heredoc::DedentingHeredoc
  # @return [DedentingHeredoc] a new instance of DedentingHeredoc
  #
  # source://yarp//lib/prism/lex_compat.rb#355
  def initialize; end

  # As tokens are coming in, we track the minimum amount of common leading
  # whitespace on plain string content tokens. This allows us to later
  # remove that amount of whitespace from the beginning of each line.
  #
  # source://yarp//lib/prism/lex_compat.rb#365
  def <<(token); end

  # Returns the value of attribute dedent.
  #
  # source://yarp//lib/prism/lex_compat.rb#353
  def dedent; end

  # Returns the value of attribute dedent_next.
  #
  # source://yarp//lib/prism/lex_compat.rb#353
  def dedent_next; end

  # Returns the value of attribute embexpr_balance.
  #
  # source://yarp//lib/prism/lex_compat.rb#353
  def embexpr_balance; end

  # source://yarp//lib/prism/lex_compat.rb#397
  def to_a; end

  # Returns the value of attribute tokens.
  #
  # source://yarp//lib/prism/lex_compat.rb#353
  def tokens; end
end

# source://yarp//lib/prism/lex_compat.rb#351
Prism::LexCompat::Heredoc::DedentingHeredoc::TAB_WIDTH = T.let(T.unsafe(nil), Integer)

# Heredocs that are no dash or tilde heredocs are just a list of tokens.
# We need to keep them around so that we can insert them in the correct
# order back into the token stream and set the state of the last token to
# the state that the heredoc was opened in.
#
# source://yarp//lib/prism/lex_compat.rb#272
class Prism::LexCompat::Heredoc::PlainHeredoc
  # @return [PlainHeredoc] a new instance of PlainHeredoc
  #
  # source://yarp//lib/prism/lex_compat.rb#275
  def initialize; end

  # source://yarp//lib/prism/lex_compat.rb#279
  def <<(token); end

  # source://yarp//lib/prism/lex_compat.rb#283
  def to_a; end

  # Returns the value of attribute tokens.
  #
  # source://yarp//lib/prism/lex_compat.rb#273
  def tokens; end
end

# Ident tokens for the most part are exactly the same, except sometimes we
# know an ident is a local when ripper doesn't (when they are introduced
# through named captures in regular expressions). In that case we don't
# compare the state.
#
# source://yarp//lib/prism/lex_compat.rb#224
class Prism::LexCompat::IdentToken < ::Prism::LexCompat::Token
  # source://yarp//lib/prism/lex_compat.rb#225
  def ==(other); end
end

# Tokens where state should be ignored
# used for :on_comment, :on_heredoc_end, :on_embexpr_end
#
# source://yarp//lib/prism/lex_compat.rb#214
class Prism::LexCompat::IgnoreStateToken < ::Prism::LexCompat::Token
  # source://yarp//lib/prism/lex_compat.rb#215
  def ==(other); end
end

# Ignored newlines can occasionally have a LABEL state attached to them, so
# we compare the state differently here.
#
# source://yarp//lib/prism/lex_compat.rb#235
class Prism::LexCompat::IgnoredNewlineToken < ::Prism::LexCompat::Token
  # source://yarp//lib/prism/lex_compat.rb#236
  def ==(other); end
end

# If we have an identifier that follows a method name like:
#
#     def foo bar
#
# then Ripper will mark bar as END|LABEL if there is a local in a parent
# scope named bar because it hasn't pushed the local table yet. We do this
# more accurately, so we need to allow comparing against both END and
# END|LABEL.
#
# source://yarp//lib/prism/lex_compat.rb#255
class Prism::LexCompat::ParamToken < ::Prism::LexCompat::Token
  # source://yarp//lib/prism/lex_compat.rb#256
  def ==(other); end
end

# This is a mapping of prism token types to Ripper token types. This is a
# many-to-one mapping because we split up our token types, whereas Ripper
# tends to group them.
#
# source://yarp//lib/prism/lex_compat.rb#15
Prism::LexCompat::RIPPER = T.let(T.unsafe(nil), Hash)

# When we produce tokens, we produce the same arrays that Ripper does.
# However, we add a couple of convenience methods onto them to make them a
# little easier to work with. We delegate all other methods to the array.
#
# source://yarp//lib/prism/lex_compat.rb#186
class Prism::LexCompat::Token < ::SimpleDelegator
  # source://yarp//lib/prism/lex_compat.rb#191
  def event; end

  # source://yarp//lib/prism/lex_compat.rb#187
  def location; end

  # source://yarp//lib/prism/lex_compat.rb#199
  def state; end

  # source://yarp//lib/prism/lex_compat.rb#195
  def value; end
end

# This is a class that wraps the Ripper lexer to produce almost exactly the
# same tokens.
#
# source://yarp//lib/prism/lex_compat.rb#800
class Prism::LexRipper
  # @return [LexRipper] a new instance of LexRipper
  #
  # source://yarp//lib/prism/lex_compat.rb#803
  def initialize(source); end

  # source://yarp//lib/prism/lex_compat.rb#807
  def result; end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/lex_compat.rb#801
  def source; end
end

# Represents the use of the `&&=` operator for assignment to a local variable.
#
#     target &&= value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#8802
class Prism::LocalVariableAndWriteNode < ::Prism::Node
  # def initialize: (name_loc: Location, operator_loc: Location, value: Node, name: Symbol, depth: Integer, location: Location) -> void
  #
  # @return [LocalVariableAndWriteNode] a new instance of LocalVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#8819
  def initialize(name_loc, operator_loc, value, name, depth, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8829
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8834
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8844
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8839
  def compact_child_nodes; end

  # def copy: (**params) -> LocalVariableAndWriteNode
  #
  # source://yarp//lib/prism/node.rb#8849
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8834
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8864
  def deconstruct_keys(keys); end

  # attr_reader depth: Integer
  #
  # source://yarp//lib/prism/node.rb#8816
  def depth; end

  # source://yarp//lib/prism/node.rb#8873
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#8813
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8804
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#8869
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8807
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#8898
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#8810
  def value; end
end

# Represents assigning to a local variable using an operator that isn't `=`.
#
#     target += value
#     ^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#8907
class Prism::LocalVariableOperatorWriteNode < ::Prism::Node
  # def initialize: (name_loc: Location, operator_loc: Location, value: Node, name: Symbol, operator: Symbol, depth: Integer, location: Location) -> void
  #
  # @return [LocalVariableOperatorWriteNode] a new instance of LocalVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#8927
  def initialize(name_loc, operator_loc, value, name, operator, depth, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#8938
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8943
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#8953
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#8948
  def compact_child_nodes; end

  # def copy: (**params) -> LocalVariableOperatorWriteNode
  #
  # source://yarp//lib/prism/node.rb#8958
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#8943
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#8974
  def deconstruct_keys(keys); end

  # attr_reader depth: Integer
  #
  # source://yarp//lib/prism/node.rb#8924
  def depth; end

  # source://yarp//lib/prism/node.rb#8978
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#8918
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8909
  def name_loc; end

  # attr_reader operator: Symbol
  #
  # source://yarp//lib/prism/node.rb#8921
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#8912
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9004
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#8915
  def value; end
end

# Represents the use of the `||=` operator for assignment to a local variable.
#
#     target ||= value
#     ^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#9013
class Prism::LocalVariableOrWriteNode < ::Prism::Node
  # def initialize: (name_loc: Location, operator_loc: Location, value: Node, name: Symbol, depth: Integer, location: Location) -> void
  #
  # @return [LocalVariableOrWriteNode] a new instance of LocalVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#9030
  def initialize(name_loc, operator_loc, value, name, depth, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9040
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9045
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9055
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9050
  def compact_child_nodes; end

  # def copy: (**params) -> LocalVariableOrWriteNode
  #
  # source://yarp//lib/prism/node.rb#9060
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9045
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9075
  def deconstruct_keys(keys); end

  # attr_reader depth: Integer
  #
  # source://yarp//lib/prism/node.rb#9027
  def depth; end

  # source://yarp//lib/prism/node.rb#9084
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#9024
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9015
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#9080
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9018
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9109
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#9021
  def value; end
end

# Represents reading a local variable. Note that this requires that a local
# variable of the same name has already been written to in the same scope,
# otherwise it is parsed as a method call.
#
#     foo
#     ^^^
#
# source://yarp//lib/prism/node.rb#9120
class Prism::LocalVariableReadNode < ::Prism::Node
  # def initialize: (name: Symbol, depth: Integer, location: Location) -> void
  #
  # @return [LocalVariableReadNode] a new instance of LocalVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#9128
  def initialize(name, depth, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9135
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9140
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9150
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9145
  def compact_child_nodes; end

  # def copy: (**params) -> LocalVariableReadNode
  #
  # source://yarp//lib/prism/node.rb#9155
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9140
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9167
  def deconstruct_keys(keys); end

  # attr_reader depth: Integer
  #
  # source://yarp//lib/prism/node.rb#9125
  def depth; end

  # source://yarp//lib/prism/node.rb#9171
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#9122
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9192
  def type; end
end

# Represents writing to a local variable in a context that doesn't have an explicit value.
#
#     foo, bar = baz
#     ^^^  ^^^
#
# source://yarp//lib/prism/node.rb#9201
class Prism::LocalVariableTargetNode < ::Prism::Node
  # def initialize: (name: Symbol, depth: Integer, location: Location) -> void
  #
  # @return [LocalVariableTargetNode] a new instance of LocalVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#9209
  def initialize(name, depth, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9216
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9221
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9231
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9226
  def compact_child_nodes; end

  # def copy: (**params) -> LocalVariableTargetNode
  #
  # source://yarp//lib/prism/node.rb#9236
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9221
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9248
  def deconstruct_keys(keys); end

  # attr_reader depth: Integer
  #
  # source://yarp//lib/prism/node.rb#9206
  def depth; end

  # source://yarp//lib/prism/node.rb#9252
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#9203
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9273
  def type; end
end

# Represents writing to a local variable.
#
#     foo = 1
#     ^^^^^^^
#
# source://yarp//lib/prism/node.rb#9282
class Prism::LocalVariableWriteNode < ::Prism::Node
  # def initialize: (name: Symbol, depth: Integer, name_loc: Location, value: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [LocalVariableWriteNode] a new instance of LocalVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#9299
  def initialize(name, depth, name_loc, value, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9309
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9314
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9324
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9319
  def compact_child_nodes; end

  # def copy: (**params) -> LocalVariableWriteNode
  #
  # source://yarp//lib/prism/node.rb#9329
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9314
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9344
  def deconstruct_keys(keys); end

  # attr_reader depth: Integer
  #
  # source://yarp//lib/prism/node.rb#9287
  def depth; end

  # source://yarp//lib/prism/node.rb#9353
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#9284
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9290
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#9349
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9296
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9378
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#9293
  def value; end
end

# This represents a location in the source.
#
# source://yarp//lib/prism/parse_result.rb#41
class Prism::Location
  # @return [Location] a new instance of Location
  #
  # source://yarp//lib/prism/parse_result.rb#56
  def initialize(source, start_offset, length); end

  # source://yarp//lib/prism/parse_result.rb#123
  def ==(other); end

  # The list of comments attached to this location
  #
  # source://yarp//lib/prism/parse_result.rb#54
  def comments; end

  # Create a new location object with the given options.
  #
  # source://yarp//lib/prism/parse_result.rb#64
  def copy(**options); end

  # source://yarp//lib/prism/parse_result.rb#115
  def deconstruct_keys(keys); end

  # The column number in bytes where this location ends from the start of the
  # line.
  #
  # source://yarp//lib/prism/parse_result.rb#111
  def end_column; end

  # The line number where this location ends.
  #
  # source://yarp//lib/prism/parse_result.rb#99
  def end_line; end

  # The byte offset from the beginning of the source where this location ends.
  #
  # source://yarp//lib/prism/parse_result.rb#83
  def end_offset; end

  # Returns a string representation of this location.
  #
  # source://yarp//lib/prism/parse_result.rb#73
  def inspect; end

  # Returns a new location that stretches from this location to the given
  # other location. Raises an error if this location is not before the other
  # location or if they don't share the same source.
  #
  # source://yarp//lib/prism/parse_result.rb#132
  def join(other); end

  # The length of this location in bytes.
  #
  # source://yarp//lib/prism/parse_result.rb#51
  def length; end

  # source://yarp//lib/prism/parse_result.rb#119
  def pretty_print(q); end

  # The source code that this location represents.
  #
  # source://yarp//lib/prism/parse_result.rb#78
  def slice; end

  # The column number in bytes where this location starts from the start of
  # the line.
  #
  # source://yarp//lib/prism/parse_result.rb#105
  def start_column; end

  # The line number where this location starts.
  #
  # source://yarp//lib/prism/parse_result.rb#88
  def start_line; end

  # The content of the line where this location starts before this location.
  #
  # source://yarp//lib/prism/parse_result.rb#93
  def start_line_slice; end

  # The byte offset from the beginning of the source where this location
  # starts.
  #
  # source://yarp//lib/prism/parse_result.rb#48
  def start_offset; end

  protected

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/parse_result.rb#44
  def source; end

  class << self
    # source://yarp//lib/prism/parse_result.rb#139
    def null; end
  end
end

# source://yarp//lib/prism/node.rb#14500
module Prism::LoopFlags; end

# a loop after a begin statement, so the body is executed first before the condition
#
# source://yarp//lib/prism/node.rb#14502
Prism::LoopFlags::BEGIN_MODIFIER = T.let(T.unsafe(nil), Integer)

# Represents a regular expression literal used in the predicate of a
# conditional to implicitly match against the last line read by an IO
# object.
#
#     if /foo/i then end
#        ^^^^^^
#
# source://yarp//lib/prism/node.rb#9389
class Prism::MatchLastLineNode < ::Prism::Node
  # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, flags: Integer, location: Location) -> void
  #
  # @return [MatchLastLineNode] a new instance of MatchLastLineNode
  #
  # source://yarp//lib/prism/node.rb#9406
  def initialize(opening_loc, content_loc, closing_loc, unescaped, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9416
  def accept(visitor); end

  # def ascii_8bit?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9491
  def ascii_8bit?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9421
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#9466
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9397
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9431
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9426
  def compact_child_nodes; end

  # def content: () -> String
  #
  # source://yarp//lib/prism/node.rb#9461
  def content; end

  # attr_reader content_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9394
  def content_loc; end

  # def copy: (**params) -> MatchLastLineNode
  #
  # source://yarp//lib/prism/node.rb#9436
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9421
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9451
  def deconstruct_keys(keys); end

  # def euc_jp?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9486
  def euc_jp?; end

  # def extended?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9476
  def extended?; end

  # def ignore_case?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9471
  def ignore_case?; end

  # source://yarp//lib/prism/node.rb#9510
  def inspect(inspector = T.unsafe(nil)); end

  # def multi_line?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9481
  def multi_line?; end

  # def once?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9506
  def once?; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#9456
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9391
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9535
  def type; end

  # attr_reader unescaped: String
  #
  # source://yarp//lib/prism/node.rb#9400
  def unescaped; end

  # def utf_8?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9501
  def utf_8?; end

  # def windows_31j?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#9496
  def windows_31j?; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#9403
  def flags; end
end

# Represents the use of the modifier `in` operator.
#
#     foo in bar
#     ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#9544
class Prism::MatchPredicateNode < ::Prism::Node
  # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [MatchPredicateNode] a new instance of MatchPredicateNode
  #
  # source://yarp//lib/prism/node.rb#9555
  def initialize(value, pattern, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9563
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9568
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9578
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9573
  def compact_child_nodes; end

  # def copy: (**params) -> MatchPredicateNode
  #
  # source://yarp//lib/prism/node.rb#9583
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9568
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9596
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#9605
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#9601
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9552
  def operator_loc; end

  # attr_reader pattern: Node
  #
  # source://yarp//lib/prism/node.rb#9549
  def pattern; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9629
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#9546
  def value; end
end

# Represents the use of the `=>` operator.
#
#     foo => bar
#     ^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#9638
class Prism::MatchRequiredNode < ::Prism::Node
  # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [MatchRequiredNode] a new instance of MatchRequiredNode
  #
  # source://yarp//lib/prism/node.rb#9649
  def initialize(value, pattern, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9657
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9662
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9672
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9667
  def compact_child_nodes; end

  # def copy: (**params) -> MatchRequiredNode
  #
  # source://yarp//lib/prism/node.rb#9677
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9662
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9690
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#9699
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#9695
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9646
  def operator_loc; end

  # attr_reader pattern: Node
  #
  # source://yarp//lib/prism/node.rb#9643
  def pattern; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9723
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#9640
  def value; end
end

# Represents writing local variables using a regular expression match with
# named capture groups.
#
#     /(?<foo>bar)/ =~ baz
#     ^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#9733
class Prism::MatchWriteNode < ::Prism::Node
  # def initialize: (call: CallNode, locals: Array[Symbol], location: Location) -> void
  #
  # @return [MatchWriteNode] a new instance of MatchWriteNode
  #
  # source://yarp//lib/prism/node.rb#9741
  def initialize(call, locals, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9748
  def accept(visitor); end

  # attr_reader call: CallNode
  #
  # source://yarp//lib/prism/node.rb#9735
  def call; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9753
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9763
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9758
  def compact_child_nodes; end

  # def copy: (**params) -> MatchWriteNode
  #
  # source://yarp//lib/prism/node.rb#9768
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9753
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9780
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#9784
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#9738
  def locals; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9806
  def type; end
end

# Represents a node that is missing from the source and results in a syntax
# error.
#
# source://yarp//lib/prism/node.rb#9813
class Prism::MissingNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [MissingNode] a new instance of MissingNode
  #
  # source://yarp//lib/prism/node.rb#9815
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9820
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9825
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9835
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9830
  def compact_child_nodes; end

  # def copy: (**params) -> MissingNode
  #
  # source://yarp//lib/prism/node.rb#9840
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9825
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9850
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#9854
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9873
  def type; end
end

# Represents a module declaration involving the `module` keyword.
#
#     module Foo end
#     ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#9882
class Prism::ModuleNode < ::Prism::Node
  # def initialize: (locals: Array[Symbol], module_keyword_loc: Location, constant_path: Node, body: Node?, end_keyword_loc: Location, name: Symbol, location: Location) -> void
  #
  # @return [ModuleNode] a new instance of ModuleNode
  #
  # source://yarp//lib/prism/node.rb#9902
  def initialize(locals, module_keyword_loc, constant_path, body, end_keyword_loc, name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#9913
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#9893
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9918
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#9931
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#9923
  def compact_child_nodes; end

  # attr_reader constant_path: Node
  #
  # source://yarp//lib/prism/node.rb#9890
  def constant_path; end

  # def copy: (**params) -> ModuleNode
  #
  # source://yarp//lib/prism/node.rb#9936
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#9918
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#9952
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#9962
  def end_keyword; end

  # attr_reader end_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9896
  def end_keyword_loc; end

  # source://yarp//lib/prism/node.rb#9966
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#9884
  def locals; end

  # def module_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#9957
  def module_keyword; end

  # attr_reader module_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#9887
  def module_keyword_loc; end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#9899
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#9997
  def type; end
end

# Represents a multi-target expression.
#
#     a, b, c = 1, 2, 3
#     ^^^^^^^
#
# source://yarp//lib/prism/node.rb#10006
class Prism::MultiTargetNode < ::Prism::Node
  # def initialize: (targets: Array[Node], lparen_loc: Location?, rparen_loc: Location?, location: Location) -> void
  #
  # @return [MultiTargetNode] a new instance of MultiTargetNode
  #
  # source://yarp//lib/prism/node.rb#10017
  def initialize(targets, lparen_loc, rparen_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10025
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10030
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10040
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10035
  def compact_child_nodes; end

  # def copy: (**params) -> MultiTargetNode
  #
  # source://yarp//lib/prism/node.rb#10045
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10030
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10058
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10072
  def inspect(inspector = T.unsafe(nil)); end

  # def lparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#10063
  def lparen; end

  # attr_reader lparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#10011
  def lparen_loc; end

  # def rparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#10068
  def rparen; end

  # attr_reader rparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#10014
  def rparen_loc; end

  # attr_reader targets: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10008
  def targets; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10094
  def type; end
end

# Represents a write to a multi-target expression.
#
#     a, b, c = 1, 2, 3
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#10103
class Prism::MultiWriteNode < ::Prism::Node
  # def initialize: (targets: Array[Node], lparen_loc: Location?, rparen_loc: Location?, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [MultiWriteNode] a new instance of MultiWriteNode
  #
  # source://yarp//lib/prism/node.rb#10120
  def initialize(targets, lparen_loc, rparen_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10130
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10135
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10145
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10140
  def compact_child_nodes; end

  # def copy: (**params) -> MultiWriteNode
  #
  # source://yarp//lib/prism/node.rb#10150
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10135
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10165
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10184
  def inspect(inspector = T.unsafe(nil)); end

  # def lparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#10170
  def lparen; end

  # attr_reader lparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#10108
  def lparen_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#10180
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10114
  def operator_loc; end

  # def rparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#10175
  def rparen; end

  # attr_reader rparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#10111
  def rparen_loc; end

  # attr_reader targets: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10105
  def targets; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10209
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#10117
  def value; end
end

# This visitor walks through the tree and copies each node as it is being
# visited. This is useful for consumers that want to mutate the tree, as you
# can change subtrees in place without effecting the rest of the tree.
#
# source://yarp//lib/prism/mutation_compiler.rb#12
class Prism::MutationCompiler < ::Prism::Compiler
  # Copy a AliasGlobalVariableNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#14
  def visit_alias_global_variable_node(node); end

  # Copy a AliasMethodNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#19
  def visit_alias_method_node(node); end

  # Copy a AlternationPatternNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#24
  def visit_alternation_pattern_node(node); end

  # Copy a AndNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#29
  def visit_and_node(node); end

  # Copy a ArgumentsNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#34
  def visit_arguments_node(node); end

  # Copy a ArrayNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#39
  def visit_array_node(node); end

  # Copy a ArrayPatternNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#44
  def visit_array_pattern_node(node); end

  # Copy a AssocNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#49
  def visit_assoc_node(node); end

  # Copy a AssocSplatNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#54
  def visit_assoc_splat_node(node); end

  # Copy a BackReferenceReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#59
  def visit_back_reference_read_node(node); end

  # Copy a BeginNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#64
  def visit_begin_node(node); end

  # Copy a BlockArgumentNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#69
  def visit_block_argument_node(node); end

  # Copy a BlockLocalVariableNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#74
  def visit_block_local_variable_node(node); end

  # Copy a BlockNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#79
  def visit_block_node(node); end

  # Copy a BlockParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#84
  def visit_block_parameter_node(node); end

  # Copy a BlockParametersNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#89
  def visit_block_parameters_node(node); end

  # Copy a BreakNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#94
  def visit_break_node(node); end

  # Copy a CallAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#99
  def visit_call_and_write_node(node); end

  # Copy a CallNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#104
  def visit_call_node(node); end

  # Copy a CallOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#109
  def visit_call_operator_write_node(node); end

  # Copy a CallOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#114
  def visit_call_or_write_node(node); end

  # Copy a CapturePatternNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#119
  def visit_capture_pattern_node(node); end

  # Copy a CaseNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#124
  def visit_case_node(node); end

  # Copy a ClassNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#129
  def visit_class_node(node); end

  # Copy a ClassVariableAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#134
  def visit_class_variable_and_write_node(node); end

  # Copy a ClassVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#139
  def visit_class_variable_operator_write_node(node); end

  # Copy a ClassVariableOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#144
  def visit_class_variable_or_write_node(node); end

  # Copy a ClassVariableReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#149
  def visit_class_variable_read_node(node); end

  # Copy a ClassVariableTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#154
  def visit_class_variable_target_node(node); end

  # Copy a ClassVariableWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#159
  def visit_class_variable_write_node(node); end

  # Copy a ConstantAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#164
  def visit_constant_and_write_node(node); end

  # Copy a ConstantOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#169
  def visit_constant_operator_write_node(node); end

  # Copy a ConstantOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#174
  def visit_constant_or_write_node(node); end

  # Copy a ConstantPathAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#179
  def visit_constant_path_and_write_node(node); end

  # Copy a ConstantPathNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#184
  def visit_constant_path_node(node); end

  # Copy a ConstantPathOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#189
  def visit_constant_path_operator_write_node(node); end

  # Copy a ConstantPathOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#194
  def visit_constant_path_or_write_node(node); end

  # Copy a ConstantPathTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#199
  def visit_constant_path_target_node(node); end

  # Copy a ConstantPathWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#204
  def visit_constant_path_write_node(node); end

  # Copy a ConstantReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#209
  def visit_constant_read_node(node); end

  # Copy a ConstantTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#214
  def visit_constant_target_node(node); end

  # Copy a ConstantWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#219
  def visit_constant_write_node(node); end

  # Copy a DefNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#224
  def visit_def_node(node); end

  # Copy a DefinedNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#229
  def visit_defined_node(node); end

  # Copy a ElseNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#234
  def visit_else_node(node); end

  # Copy a EmbeddedStatementsNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#239
  def visit_embedded_statements_node(node); end

  # Copy a EmbeddedVariableNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#244
  def visit_embedded_variable_node(node); end

  # Copy a EnsureNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#249
  def visit_ensure_node(node); end

  # Copy a FalseNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#254
  def visit_false_node(node); end

  # Copy a FindPatternNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#259
  def visit_find_pattern_node(node); end

  # Copy a FlipFlopNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#264
  def visit_flip_flop_node(node); end

  # Copy a FloatNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#269
  def visit_float_node(node); end

  # Copy a ForNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#274
  def visit_for_node(node); end

  # Copy a ForwardingArgumentsNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#279
  def visit_forwarding_arguments_node(node); end

  # Copy a ForwardingParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#284
  def visit_forwarding_parameter_node(node); end

  # Copy a ForwardingSuperNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#289
  def visit_forwarding_super_node(node); end

  # Copy a GlobalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#294
  def visit_global_variable_and_write_node(node); end

  # Copy a GlobalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#299
  def visit_global_variable_operator_write_node(node); end

  # Copy a GlobalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#304
  def visit_global_variable_or_write_node(node); end

  # Copy a GlobalVariableReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#309
  def visit_global_variable_read_node(node); end

  # Copy a GlobalVariableTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#314
  def visit_global_variable_target_node(node); end

  # Copy a GlobalVariableWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#319
  def visit_global_variable_write_node(node); end

  # Copy a HashNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#324
  def visit_hash_node(node); end

  # Copy a HashPatternNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#329
  def visit_hash_pattern_node(node); end

  # Copy a IfNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#334
  def visit_if_node(node); end

  # Copy a ImaginaryNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#339
  def visit_imaginary_node(node); end

  # Copy a ImplicitNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#344
  def visit_implicit_node(node); end

  # Copy a InNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#349
  def visit_in_node(node); end

  # Copy a InstanceVariableAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#354
  def visit_instance_variable_and_write_node(node); end

  # Copy a InstanceVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#359
  def visit_instance_variable_operator_write_node(node); end

  # Copy a InstanceVariableOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#364
  def visit_instance_variable_or_write_node(node); end

  # Copy a InstanceVariableReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#369
  def visit_instance_variable_read_node(node); end

  # Copy a InstanceVariableTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#374
  def visit_instance_variable_target_node(node); end

  # Copy a InstanceVariableWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#379
  def visit_instance_variable_write_node(node); end

  # Copy a IntegerNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#384
  def visit_integer_node(node); end

  # Copy a InterpolatedMatchLastLineNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#389
  def visit_interpolated_match_last_line_node(node); end

  # Copy a InterpolatedRegularExpressionNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#394
  def visit_interpolated_regular_expression_node(node); end

  # Copy a InterpolatedStringNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#399
  def visit_interpolated_string_node(node); end

  # Copy a InterpolatedSymbolNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#404
  def visit_interpolated_symbol_node(node); end

  # Copy a InterpolatedXStringNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#409
  def visit_interpolated_x_string_node(node); end

  # Copy a KeywordHashNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#414
  def visit_keyword_hash_node(node); end

  # Copy a KeywordParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#419
  def visit_keyword_parameter_node(node); end

  # Copy a KeywordRestParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#424
  def visit_keyword_rest_parameter_node(node); end

  # Copy a LambdaNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#429
  def visit_lambda_node(node); end

  # Copy a LocalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#434
  def visit_local_variable_and_write_node(node); end

  # Copy a LocalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#439
  def visit_local_variable_operator_write_node(node); end

  # Copy a LocalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#444
  def visit_local_variable_or_write_node(node); end

  # Copy a LocalVariableReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#449
  def visit_local_variable_read_node(node); end

  # Copy a LocalVariableTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#454
  def visit_local_variable_target_node(node); end

  # Copy a LocalVariableWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#459
  def visit_local_variable_write_node(node); end

  # Copy a MatchLastLineNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#464
  def visit_match_last_line_node(node); end

  # Copy a MatchPredicateNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#469
  def visit_match_predicate_node(node); end

  # Copy a MatchRequiredNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#474
  def visit_match_required_node(node); end

  # Copy a MatchWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#479
  def visit_match_write_node(node); end

  # Copy a MissingNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#484
  def visit_missing_node(node); end

  # Copy a ModuleNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#489
  def visit_module_node(node); end

  # Copy a MultiTargetNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#494
  def visit_multi_target_node(node); end

  # Copy a MultiWriteNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#499
  def visit_multi_write_node(node); end

  # Copy a NextNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#504
  def visit_next_node(node); end

  # Copy a NilNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#509
  def visit_nil_node(node); end

  # Copy a NoKeywordsParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#514
  def visit_no_keywords_parameter_node(node); end

  # Copy a NumberedReferenceReadNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#519
  def visit_numbered_reference_read_node(node); end

  # Copy a OptionalParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#524
  def visit_optional_parameter_node(node); end

  # Copy a OrNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#529
  def visit_or_node(node); end

  # Copy a ParametersNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#534
  def visit_parameters_node(node); end

  # Copy a ParenthesesNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#539
  def visit_parentheses_node(node); end

  # Copy a PinnedExpressionNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#544
  def visit_pinned_expression_node(node); end

  # Copy a PinnedVariableNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#549
  def visit_pinned_variable_node(node); end

  # Copy a PostExecutionNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#554
  def visit_post_execution_node(node); end

  # Copy a PreExecutionNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#559
  def visit_pre_execution_node(node); end

  # Copy a ProgramNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#564
  def visit_program_node(node); end

  # Copy a RangeNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#569
  def visit_range_node(node); end

  # Copy a RationalNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#574
  def visit_rational_node(node); end

  # Copy a RedoNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#579
  def visit_redo_node(node); end

  # Copy a RegularExpressionNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#584
  def visit_regular_expression_node(node); end

  # Copy a RequiredDestructuredParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#589
  def visit_required_destructured_parameter_node(node); end

  # Copy a RequiredParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#594
  def visit_required_parameter_node(node); end

  # Copy a RescueModifierNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#599
  def visit_rescue_modifier_node(node); end

  # Copy a RescueNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#604
  def visit_rescue_node(node); end

  # Copy a RestParameterNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#609
  def visit_rest_parameter_node(node); end

  # Copy a RetryNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#614
  def visit_retry_node(node); end

  # Copy a ReturnNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#619
  def visit_return_node(node); end

  # Copy a SelfNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#624
  def visit_self_node(node); end

  # Copy a SingletonClassNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#629
  def visit_singleton_class_node(node); end

  # Copy a SourceEncodingNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#634
  def visit_source_encoding_node(node); end

  # Copy a SourceFileNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#639
  def visit_source_file_node(node); end

  # Copy a SourceLineNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#644
  def visit_source_line_node(node); end

  # Copy a SplatNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#649
  def visit_splat_node(node); end

  # Copy a StatementsNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#654
  def visit_statements_node(node); end

  # Copy a StringConcatNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#659
  def visit_string_concat_node(node); end

  # Copy a StringNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#664
  def visit_string_node(node); end

  # Copy a SuperNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#669
  def visit_super_node(node); end

  # Copy a SymbolNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#674
  def visit_symbol_node(node); end

  # Copy a TrueNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#679
  def visit_true_node(node); end

  # Copy a UndefNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#684
  def visit_undef_node(node); end

  # Copy a UnlessNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#689
  def visit_unless_node(node); end

  # Copy a UntilNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#694
  def visit_until_node(node); end

  # Copy a WhenNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#699
  def visit_when_node(node); end

  # Copy a WhileNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#704
  def visit_while_node(node); end

  # Copy a XStringNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#709
  def visit_x_string_node(node); end

  # Copy a YieldNode node
  #
  # source://yarp//lib/prism/mutation_compiler.rb#714
  def visit_yield_node(node); end
end

# Represents the use of the `next` keyword.
#
#     next 1
#     ^^^^^^
#
# source://yarp//lib/prism/node.rb#10218
class Prism::NextNode < ::Prism::Node
  # def initialize: (arguments: ArgumentsNode?, keyword_loc: Location, location: Location) -> void
  #
  # @return [NextNode] a new instance of NextNode
  #
  # source://yarp//lib/prism/node.rb#10226
  def initialize(arguments, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10233
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#10220
  def arguments; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10238
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10250
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10243
  def compact_child_nodes; end

  # def copy: (**params) -> NextNode
  #
  # source://yarp//lib/prism/node.rb#10255
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10238
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10267
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10276
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#10272
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10223
  def keyword_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10302
  def type; end
end

# Represents the use of the `nil` keyword.
#
#     nil
#     ^^^
#
# source://yarp//lib/prism/node.rb#10311
class Prism::NilNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [NilNode] a new instance of NilNode
  #
  # source://yarp//lib/prism/node.rb#10313
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10318
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10323
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10333
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10328
  def compact_child_nodes; end

  # def copy: (**params) -> NilNode
  #
  # source://yarp//lib/prism/node.rb#10338
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10323
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10348
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10352
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10371
  def type; end
end

# Represents the use of `**nil` inside method arguments.
#
#     def a(**nil)
#           ^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#10381
class Prism::NoKeywordsParameterNode < ::Prism::Node
  # def initialize: (operator_loc: Location, keyword_loc: Location, location: Location) -> void
  #
  # @return [NoKeywordsParameterNode] a new instance of NoKeywordsParameterNode
  #
  # source://yarp//lib/prism/node.rb#10389
  def initialize(operator_loc, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10396
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10401
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10411
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10406
  def compact_child_nodes; end

  # def copy: (**params) -> NoKeywordsParameterNode
  #
  # source://yarp//lib/prism/node.rb#10416
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10401
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10428
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10442
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#10438
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10386
  def keyword_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#10433
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10383
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10463
  def type; end
end

# This represents a node in the tree. It is the parent class of all of the
# various node types.
#
# source://yarp//lib/prism/node.rb#11
class Prism::Node
  # Returns the value of attribute location.
  #
  # source://yarp//lib/prism/node.rb#12
  def location; end

  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#14
  def newline?; end

  # Similar to inspect, but respects the current level of indentation given by
  # the pretty print object.
  #
  # source://yarp//lib/prism/node.rb#33
  def pretty_print(q); end

  # source://yarp//lib/prism/node.rb#18
  def set_newline_flag(newline_marked); end

  # Slice the location of the node from the source.
  #
  # source://yarp//lib/prism/node.rb#27
  def slice; end
end

# This object is responsible for generating the output for the inspect method
# implementations of child nodes.
#
# source://yarp//lib/prism/node_inspector.rb#6
class Prism::NodeInspector
  # @return [NodeInspector] a new instance of NodeInspector
  #
  # source://yarp//lib/prism/node_inspector.rb#9
  def initialize(prefix = T.unsafe(nil)); end

  # Appends a line to the output with the current prefix.
  #
  # source://yarp//lib/prism/node_inspector.rb#15
  def <<(line); end

  # Returns a new inspector that can be used to inspect a child node.
  #
  # source://yarp//lib/prism/node_inspector.rb#59
  def child_inspector(append); end

  # Generates a string that represents a child node.
  #
  # source://yarp//lib/prism/node_inspector.rb#54
  def child_node(node, append); end

  # This generates a string that is used as the header of the inspect output
  # for any given node.
  #
  # source://yarp//lib/prism/node_inspector.rb#21
  def header(node); end

  # Generates a string that represents a list of nodes. It handles properly
  # using the box drawing characters to make the output look nice.
  #
  # source://yarp//lib/prism/node_inspector.rb#31
  def list(prefix, nodes); end

  # Generates a string that represents a location field on a node.
  #
  # source://yarp//lib/prism/node_inspector.rb#45
  def location(value); end

  # Returns the value of attribute output.
  #
  # source://yarp//lib/prism/node_inspector.rb#7
  def output; end

  # Returns the value of attribute prefix.
  #
  # source://yarp//lib/prism/node_inspector.rb#7
  def prefix; end

  # Returns the output as a string.
  #
  # source://yarp//lib/prism/node_inspector.rb#64
  def to_str; end
end

# Represents reading a numbered reference to a capture in the previous match.
#
#     $1
#     ^^
#
# source://yarp//lib/prism/node.rb#10472
class Prism::NumberedReferenceReadNode < ::Prism::Node
  # def initialize: (number: Integer, location: Location) -> void
  #
  # @return [NumberedReferenceReadNode] a new instance of NumberedReferenceReadNode
  #
  # source://yarp//lib/prism/node.rb#10477
  def initialize(number, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10483
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10488
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10498
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10493
  def compact_child_nodes; end

  # def copy: (**params) -> NumberedReferenceReadNode
  #
  # source://yarp//lib/prism/node.rb#10503
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10488
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10514
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10518
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader number: Integer
  #
  # source://yarp//lib/prism/node.rb#10474
  def number; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10538
  def type; end
end

# Represents an optional parameter to a method, block, or lambda definition.
#
#     def a(b = 1)
#           ^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#10548
class Prism::OptionalParameterNode < ::Prism::Node
  # def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
  #
  # @return [OptionalParameterNode] a new instance of OptionalParameterNode
  #
  # source://yarp//lib/prism/node.rb#10562
  def initialize(name, name_loc, operator_loc, value, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10571
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10576
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10586
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10581
  def compact_child_nodes; end

  # def copy: (**params) -> OptionalParameterNode
  #
  # source://yarp//lib/prism/node.rb#10591
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10576
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10605
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10614
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#10550
  def name; end

  # attr_reader name_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10553
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#10610
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10556
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10638
  def type; end

  # attr_reader value: Node
  #
  # source://yarp//lib/prism/node.rb#10559
  def value; end
end

# Represents the use of the `||` operator or the `or` keyword.
#
#     left or right
#     ^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#10647
class Prism::OrNode < ::Prism::Node
  # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [OrNode] a new instance of OrNode
  #
  # source://yarp//lib/prism/node.rb#10658
  def initialize(left, right, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10666
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10671
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10681
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10676
  def compact_child_nodes; end

  # def copy: (**params) -> OrNode
  #
  # source://yarp//lib/prism/node.rb#10686
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10671
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10699
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10708
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node
  #
  # source://yarp//lib/prism/node.rb#10649
  def left; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#10704
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10655
  def operator_loc; end

  # attr_reader right: Node
  #
  # source://yarp//lib/prism/node.rb#10652
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10732
  def type; end
end

# source://yarp//lib/prism/pack.rb#4
module Prism::Pack
  class << self
    def parse(_arg0, _arg1, _arg2); end
  end
end

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::AGNOSTIC_ENDIAN = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::BACK = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::BER = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::BIG_ENDIAN = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::COMMENT = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#57
class Prism::Pack::Directive
  # @return [Directive] a new instance of Directive
  #
  # source://yarp//lib/prism/pack.rb#60
  def initialize(version, variant, source, type, signed, endian, size, length_type, length); end

  # source://yarp//lib/prism/pack.rb#98
  def describe; end

  # Returns the value of attribute endian.
  #
  # source://yarp//lib/prism/pack.rb#58
  def endian; end

  # Returns the value of attribute length.
  #
  # source://yarp//lib/prism/pack.rb#58
  def length; end

  # Returns the value of attribute length_type.
  #
  # source://yarp//lib/prism/pack.rb#58
  def length_type; end

  # Returns the value of attribute signed.
  #
  # source://yarp//lib/prism/pack.rb#58
  def signed; end

  # Returns the value of attribute size.
  #
  # source://yarp//lib/prism/pack.rb#58
  def size; end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/pack.rb#58
  def source; end

  # Returns the value of attribute type.
  #
  # source://yarp//lib/prism/pack.rb#58
  def type; end

  # Returns the value of attribute variant.
  #
  # source://yarp//lib/prism/pack.rb#58
  def variant; end

  # Returns the value of attribute version.
  #
  # source://yarp//lib/prism/pack.rb#58
  def version; end
end

# source://yarp//lib/prism/pack.rb#72
Prism::Pack::Directive::ENDIAN_DESCRIPTIONS = T.let(T.unsafe(nil), Hash)

# source://yarp//lib/prism/pack.rb#80
Prism::Pack::Directive::SIGNED_DESCRIPTIONS = T.let(T.unsafe(nil), Hash)

# source://yarp//lib/prism/pack.rb#86
Prism::Pack::Directive::SIZE_DESCRIPTIONS = T.let(T.unsafe(nil), Hash)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::ENDIAN_NA = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::FLOAT = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#162
class Prism::Pack::Format
  # @return [Format] a new instance of Format
  #
  # source://yarp//lib/prism/pack.rb#165
  def initialize(directives, encoding); end

  # source://yarp//lib/prism/pack.rb#170
  def describe; end

  # Returns the value of attribute directives.
  #
  # source://yarp//lib/prism/pack.rb#163
  def directives; end

  # Returns the value of attribute encoding.
  #
  # source://yarp//lib/prism/pack.rb#163
  def encoding; end
end

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::INTEGER = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::LENGTH_FIXED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::LENGTH_MAX = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::LENGTH_NA = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::LENGTH_RELATIVE = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::LITTLE_ENDIAN = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::MOVE = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::NATIVE_ENDIAN = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::NULL = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIGNED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIGNED_NA = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_16 = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_32 = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_64 = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_8 = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_INT = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_LONG = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_LONG_LONG = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_NA = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_P = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SIZE_SHORT = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::SPACE = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_BASE64 = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_FIXED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_HEX_HIGH = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_HEX_LOW = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_LSB = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_MIME = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_MSB = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_NULL_PADDED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_NULL_TERMINATED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_POINTER = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_SPACE_PADDED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::STRING_UU = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::UNSIGNED = T.let(T.unsafe(nil), Symbol)

# source://yarp//lib/prism/pack.rb#54
Prism::Pack::UTF8 = T.let(T.unsafe(nil), Symbol)

# Represents the list of parameters on a method, block, or lambda definition.
#
#     def a(b, c, d)
#           ^^^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#10742
class Prism::ParametersNode < ::Prism::Node
  # def initialize: (requireds: Array[Node], optionals: Array[Node], rest: RestParameterNode?, posts: Array[Node], keywords: Array[Node], keyword_rest: Node?, block: BlockParameterNode?, location: Location) -> void
  #
  # @return [ParametersNode] a new instance of ParametersNode
  #
  # source://yarp//lib/prism/node.rb#10765
  def initialize(requireds, optionals, rest, posts, keywords, keyword_rest, block, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10777
  def accept(visitor); end

  # attr_reader block: BlockParameterNode?
  #
  # source://yarp//lib/prism/node.rb#10762
  def block; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10782
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10800
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10787
  def compact_child_nodes; end

  # def copy: (**params) -> ParametersNode
  #
  # source://yarp//lib/prism/node.rb#10805
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10782
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10822
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10826
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader keyword_rest: Node?
  #
  # source://yarp//lib/prism/node.rb#10759
  def keyword_rest; end

  # attr_reader keywords: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10756
  def keywords; end

  # attr_reader optionals: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10747
  def optionals; end

  # attr_reader posts: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10753
  def posts; end

  # attr_reader requireds: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10744
  def requireds; end

  # attr_reader rest: RestParameterNode?
  #
  # source://yarp//lib/prism/node.rb#10750
  def rest; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10867
  def type; end
end

# Represents a parenthesized expression
#
#     (10 + 34)
#     ^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#10876
class Prism::ParenthesesNode < ::Prism::Node
  # def initialize: (body: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void
  #
  # @return [ParenthesesNode] a new instance of ParenthesesNode
  #
  # source://yarp//lib/prism/node.rb#10887
  def initialize(body, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#10895
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#10878
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10904
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#10944
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10884
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#10916
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#10909
  def compact_child_nodes; end

  # def copy: (**params) -> ParenthesesNode
  #
  # source://yarp//lib/prism/node.rb#10921
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#10904
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#10934
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#10948
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#10939
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10881
  def opening_loc; end

  # source://yarp//lib/prism/node.rb#10899
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#10975
  def type; end
end

# This represents an error that was encountered during parsing.
#
# source://yarp//lib/prism/parse_result.rb#170
class Prism::ParseError
  # @return [ParseError] a new instance of ParseError
  #
  # source://yarp//lib/prism/parse_result.rb#173
  def initialize(message, location); end

  # source://yarp//lib/prism/parse_result.rb#178
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/parse_result.rb#182
  def inspect; end

  # Returns the value of attribute location.
  #
  # source://yarp//lib/prism/parse_result.rb#171
  def location; end

  # Returns the value of attribute message.
  #
  # source://yarp//lib/prism/parse_result.rb#171
  def message; end
end

# This represents the result of a call to ::parse or ::parse_file. It contains
# the AST, any comments that were encounters, and any errors that were
# encountered.
#
# source://yarp//lib/prism/parse_result.rb#208
class Prism::ParseResult
  # @return [ParseResult] a new instance of ParseResult
  #
  # source://yarp//lib/prism/parse_result.rb#211
  def initialize(value, comments, errors, warnings, source); end

  # Attach the list of comments to their respective locations in the tree.
  #
  # source://yarp//lib/prism/parse_result/comments.rb#168
  def attach_comments!; end

  # Returns the value of attribute comments.
  #
  # source://yarp//lib/prism/parse_result.rb#209
  def comments; end

  # source://yarp//lib/prism/parse_result.rb#219
  def deconstruct_keys(keys); end

  # Returns the value of attribute errors.
  #
  # source://yarp//lib/prism/parse_result.rb#209
  def errors; end

  # @return [Boolean]
  #
  # source://yarp//lib/prism/parse_result.rb#227
  def failure?; end

  # Walk the tree and mark nodes that are on a new line.
  #
  # source://yarp//lib/prism/parse_result/newlines.rb#56
  def mark_newlines!; end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/parse_result.rb#209
  def source; end

  # @return [Boolean]
  #
  # source://yarp//lib/prism/parse_result.rb#223
  def success?; end

  # Returns the value of attribute value.
  #
  # source://yarp//lib/prism/parse_result.rb#209
  def value; end

  # Returns the value of attribute warnings.
  #
  # source://yarp//lib/prism/parse_result.rb#209
  def warnings; end
end

# When we've parsed the source, we have both the syntax tree and the list of
# comments that we found in the source. This class is responsible for
# walking the tree and finding the nearest location to attach each comment.
#
# It does this by first finding the nearest locations to each comment.
# Locations can either come from nodes directly or from location fields on
# nodes. For example, a `ClassNode` has an overall location encompassing the
# entire class, but it also has a location for the `class` keyword.
#
# Once the nearest locations are found, it determines which one to attach
# to. If it's a trailing comment (a comment on the same line as other source
# code), it will favor attaching to the nearest location that occurs before
# the comment. Otherwise it will favor attaching to the nearest location
# that is after the comment.
#
# source://yarp//lib/prism/parse_result/comments.rb#19
class Prism::ParseResult::Comments
  # @return [Comments] a new instance of Comments
  #
  # source://yarp//lib/prism/parse_result/comments.rb#75
  def initialize(parse_result); end

  # source://yarp//lib/prism/parse_result/comments.rb#79
  def attach!; end

  # Returns the value of attribute parse_result.
  #
  # source://yarp//lib/prism/parse_result/comments.rb#73
  def parse_result; end

  private

  # Responsible for finding the nearest targets to the given comment within
  # the context of the given encapsulating node.
  #
  # source://yarp//lib/prism/parse_result/comments.rb#98
  def nearest_targets(node, comment); end
end

# A target for attaching comments that is based on a location field on a
# node. For example, the `end` token of a ClassNode.
#
# source://yarp//lib/prism/parse_result/comments.rb#49
class Prism::ParseResult::Comments::LocationTarget
  # @return [LocationTarget] a new instance of LocationTarget
  #
  # source://yarp//lib/prism/parse_result/comments.rb#52
  def initialize(location); end

  # source://yarp//lib/prism/parse_result/comments.rb#68
  def <<(comment); end

  # @return [Boolean]
  #
  # source://yarp//lib/prism/parse_result/comments.rb#64
  def encloses?(comment); end

  # source://yarp//lib/prism/parse_result/comments.rb#60
  def end_offset; end

  # Returns the value of attribute location.
  #
  # source://yarp//lib/prism/parse_result/comments.rb#50
  def location; end

  # source://yarp//lib/prism/parse_result/comments.rb#56
  def start_offset; end
end

# A target for attaching comments that is based on a specific node's
# location.
#
# source://yarp//lib/prism/parse_result/comments.rb#22
class Prism::ParseResult::Comments::NodeTarget
  # @return [NodeTarget] a new instance of NodeTarget
  #
  # source://yarp//lib/prism/parse_result/comments.rb#25
  def initialize(node); end

  # source://yarp//lib/prism/parse_result/comments.rb#42
  def <<(comment); end

  # @return [Boolean]
  #
  # source://yarp//lib/prism/parse_result/comments.rb#37
  def encloses?(comment); end

  # source://yarp//lib/prism/parse_result/comments.rb#33
  def end_offset; end

  # Returns the value of attribute node.
  #
  # source://yarp//lib/prism/parse_result/comments.rb#23
  def node; end

  # source://yarp//lib/prism/parse_result/comments.rb#29
  def start_offset; end
end

# The :line tracepoint event gets fired whenever the Ruby VM encounters an
# expression on a new line. The types of expressions that can trigger this
# event are:
#
# * if statements
# * unless statements
# * nodes that are children of statements lists
#
# In order to keep track of the newlines, we have a list of offsets that
# come back from the parser. We assign these offsets to the first nodes that
# we find in the tree that are on those lines.
#
# Note that the logic in this file should be kept in sync with the Java
# MarkNewlinesVisitor, since that visitor is responsible for marking the
# newlines for JRuby/TruffleRuby.
#
# source://yarp//lib/prism/parse_result/newlines.rb#20
class Prism::ParseResult::Newlines < ::Prism::Visitor
  # @return [Newlines] a new instance of Newlines
  #
  # source://yarp//lib/prism/parse_result/newlines.rb#21
  def initialize(newline_marked); end

  # source://yarp//lib/prism/parse_result/newlines.rb#25
  def visit_block_node(node); end

  # source://yarp//lib/prism/parse_result/newlines.rb#38
  def visit_if_node(node); end

  # source://yarp//lib/prism/parse_result/newlines.rb#25
  def visit_lambda_node(node); end

  # source://yarp//lib/prism/parse_result/newlines.rb#45
  def visit_statements_node(node); end

  # source://yarp//lib/prism/parse_result/newlines.rb#38
  def visit_unless_node(node); end
end

# This represents a warning that was encountered during parsing.
#
# source://yarp//lib/prism/parse_result.rb#188
class Prism::ParseWarning
  # @return [ParseWarning] a new instance of ParseWarning
  #
  # source://yarp//lib/prism/parse_result.rb#191
  def initialize(message, location); end

  # source://yarp//lib/prism/parse_result.rb#196
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/parse_result.rb#200
  def inspect; end

  # Returns the value of attribute location.
  #
  # source://yarp//lib/prism/parse_result.rb#189
  def location; end

  # Returns the value of attribute message.
  #
  # source://yarp//lib/prism/parse_result.rb#189
  def message; end
end

# A pattern is an object that wraps a Ruby pattern matching expression. The
# expression would normally be passed to an `in` clause within a `case`
# expression or a rightward assignment expression. For example, in the
# following snippet:
#
#     case node
#     in ConstantPathNode[ConstantReadNode[name: :Prism], ConstantReadNode[name: :Pattern]]
#     end
#
# the pattern is the `ConstantPathNode[...]` expression.
#
# The pattern gets compiled into an object that responds to #call by running
# the #compile method. This method itself will run back through Prism to
# parse the expression into a tree, then walk the tree to generate the
# necessary callable objects. For example, if you wanted to compile the
# expression above into a callable, you would:
#
#     callable = Prism::Pattern.new("ConstantPathNode[ConstantReadNode[name: :Prism], ConstantReadNode[name: :Pattern]]").compile
#     callable.call(node)
#
# The callable object returned by #compile is guaranteed to respond to #call
# with a single argument, which is the node to match against. It also is
# guaranteed to respond to #===, which means it itself can be used in a `case`
# expression, as in:
#
#     case node
#     when callable
#     end
#
# If the query given to the initializer cannot be compiled into a valid
# matcher (either because of a syntax error or because it is using syntax we
# do not yet support) then a Prism::Pattern::CompilationError will be
# raised.
#
# source://yarp//lib/prism/pattern.rb#37
class Prism::Pattern
  # @return [Pattern] a new instance of Pattern
  #
  # source://yarp//lib/prism/pattern.rb#58
  def initialize(query); end

  # source://yarp//lib/prism/pattern.rb#63
  def compile; end

  # Returns the value of attribute query.
  #
  # source://yarp//lib/prism/pattern.rb#56
  def query; end

  # source://yarp//lib/prism/pattern.rb#68
  def scan(root); end

  private

  # Shortcut for combining two procs into one that returns true if both return
  # true.
  #
  # source://yarp//lib/prism/pattern.rb#84
  def combine_and(left, right); end

  # Shortcut for combining two procs into one that returns true if either
  # returns true.
  #
  # source://yarp//lib/prism/pattern.rb#90
  def combine_or(left, right); end

  # in foo | bar
  #
  # source://yarp//lib/prism/pattern.rb#125
  def compile_alternation_pattern_node(node); end

  # in [foo, bar, baz]
  #
  # source://yarp//lib/prism/pattern.rb#100
  def compile_array_pattern_node(node); end

  # in Prism::ConstantReadNode
  #
  # source://yarp//lib/prism/pattern.rb#130
  def compile_constant_path_node(node); end

  # in ConstantReadNode
  # in String
  #
  # source://yarp//lib/prism/pattern.rb#142
  def compile_constant_read_node(node); end

  # Raise an error because the given node is not supported.
  #
  # @raise [CompilationError]
  #
  # source://yarp//lib/prism/pattern.rb#95
  def compile_error(node); end

  # in InstanceVariableReadNode[name: Symbol]
  # in { name: Symbol }
  #
  # source://yarp//lib/prism/pattern.rb#160
  def compile_hash_pattern_node(node); end

  # in nil
  #
  # source://yarp//lib/prism/pattern.rb#185
  def compile_nil_node(node); end

  # Compile any kind of node. Dispatch out to the individual compilation
  # methods based on the type of node.
  #
  # source://yarp//lib/prism/pattern.rb#214
  def compile_node(node); end

  # in /foo/
  #
  # source://yarp//lib/prism/pattern.rb#190
  def compile_regular_expression_node(node); end

  # in ""
  # in "foo"
  #
  # source://yarp//lib/prism/pattern.rb#198
  def compile_string_node(node); end

  # in :+
  # in :foo
  #
  # source://yarp//lib/prism/pattern.rb#206
  def compile_symbol_node(node); end
end

# Raised when the query given to a pattern is either invalid Ruby syntax or
# is using syntax that we don't yet support.
#
# source://yarp//lib/prism/pattern.rb#40
class Prism::Pattern::CompilationError < ::StandardError
  # @return [CompilationError] a new instance of CompilationError
  #
  # source://yarp//lib/prism/pattern.rb#41
  def initialize(repr); end
end

# Represents the use of the `^` operator for pinning an expression in a
# pattern matching expression.
#
#     foo in ^(bar)
#            ^^^^^^
#
# source://yarp//lib/prism/node.rb#10985
class Prism::PinnedExpressionNode < ::Prism::Node
  # def initialize: (expression: Node, operator_loc: Location, lparen_loc: Location, rparen_loc: Location, location: Location) -> void
  #
  # @return [PinnedExpressionNode] a new instance of PinnedExpressionNode
  #
  # source://yarp//lib/prism/node.rb#10999
  def initialize(expression, operator_loc, lparen_loc, rparen_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11008
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11013
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11023
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11018
  def compact_child_nodes; end

  # def copy: (**params) -> PinnedExpressionNode
  #
  # source://yarp//lib/prism/node.rb#11028
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11013
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11042
  def deconstruct_keys(keys); end

  # attr_reader expression: Node
  #
  # source://yarp//lib/prism/node.rb#10987
  def expression; end

  # source://yarp//lib/prism/node.rb#11061
  def inspect(inspector = T.unsafe(nil)); end

  # def lparen: () -> String
  #
  # source://yarp//lib/prism/node.rb#11052
  def lparen; end

  # attr_reader lparen_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10993
  def lparen_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#11047
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10990
  def operator_loc; end

  # def rparen: () -> String
  #
  # source://yarp//lib/prism/node.rb#11057
  def rparen; end

  # attr_reader rparen_loc: Location
  #
  # source://yarp//lib/prism/node.rb#10996
  def rparen_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11085
  def type; end
end

# Represents the use of the `^` operator for pinning a variable in a pattern
# matching expression.
#
#     foo in ^bar
#            ^^^^
#
# source://yarp//lib/prism/node.rb#11095
class Prism::PinnedVariableNode < ::Prism::Node
  # def initialize: (variable: Node, operator_loc: Location, location: Location) -> void
  #
  # @return [PinnedVariableNode] a new instance of PinnedVariableNode
  #
  # source://yarp//lib/prism/node.rb#11103
  def initialize(variable, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11110
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11115
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11125
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11120
  def compact_child_nodes; end

  # def copy: (**params) -> PinnedVariableNode
  #
  # source://yarp//lib/prism/node.rb#11130
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11115
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11142
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11151
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#11147
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11100
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11173
  def type; end

  # attr_reader variable: Node
  #
  # source://yarp//lib/prism/node.rb#11097
  def variable; end
end

# Represents the use of the `END` keyword.
#
#     END { foo }
#     ^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#11182
class Prism::PostExecutionNode < ::Prism::Node
  # def initialize: (statements: StatementsNode?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void
  #
  # @return [PostExecutionNode] a new instance of PostExecutionNode
  #
  # source://yarp//lib/prism/node.rb#11196
  def initialize(statements, keyword_loc, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11205
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11210
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#11256
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11193
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11222
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11215
  def compact_child_nodes; end

  # def copy: (**params) -> PostExecutionNode
  #
  # source://yarp//lib/prism/node.rb#11227
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11210
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11241
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11260
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#11246
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11187
  def keyword_loc; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#11251
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11190
  def opening_loc; end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#11184
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11288
  def type; end
end

# Represents the use of the `BEGIN` keyword.
#
#     BEGIN { foo }
#     ^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#11297
class Prism::PreExecutionNode < ::Prism::Node
  # def initialize: (statements: StatementsNode?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void
  #
  # @return [PreExecutionNode] a new instance of PreExecutionNode
  #
  # source://yarp//lib/prism/node.rb#11311
  def initialize(statements, keyword_loc, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11320
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11325
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#11371
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11308
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11337
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11330
  def compact_child_nodes; end

  # def copy: (**params) -> PreExecutionNode
  #
  # source://yarp//lib/prism/node.rb#11342
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11325
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11356
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11375
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#11361
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11302
  def keyword_loc; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#11366
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11305
  def opening_loc; end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#11299
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11403
  def type; end
end

# The top level node of any parse tree.
#
# source://yarp//lib/prism/node.rb#11409
class Prism::ProgramNode < ::Prism::Node
  # def initialize: (locals: Array[Symbol], statements: StatementsNode, location: Location) -> void
  #
  # @return [ProgramNode] a new instance of ProgramNode
  #
  # source://yarp//lib/prism/node.rb#11417
  def initialize(locals, statements, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11424
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11429
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11439
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11434
  def compact_child_nodes; end

  # def copy: (**params) -> ProgramNode
  #
  # source://yarp//lib/prism/node.rb#11444
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11429
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11456
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11460
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#11411
  def locals; end

  # attr_reader statements: StatementsNode
  #
  # source://yarp//lib/prism/node.rb#11414
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11482
  def type; end
end

# source://yarp//lib/prism/node.rb#14505
module Prism::RangeFlags; end

# ... operator
#
# source://yarp//lib/prism/node.rb#14507
Prism::RangeFlags::EXCLUDE_END = T.let(T.unsafe(nil), Integer)

# Represents the use of the `..` or `...` operators.
#
#     1..2
#     ^^^^
#
#     c if a =~ /left/ ... b =~ /right/
#          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#11494
class Prism::RangeNode < ::Prism::Node
  # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void
  #
  # @return [RangeNode] a new instance of RangeNode
  #
  # source://yarp//lib/prism/node.rb#11508
  def initialize(left, right, operator_loc, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11517
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11522
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11535
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11527
  def compact_child_nodes; end

  # def copy: (**params) -> RangeNode
  #
  # source://yarp//lib/prism/node.rb#11540
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11522
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11554
  def deconstruct_keys(keys); end

  # def exclude_end?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11564
  def exclude_end?; end

  # source://yarp//lib/prism/node.rb#11568
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node?
  #
  # source://yarp//lib/prism/node.rb#11496
  def left; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#11559
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11502
  def operator_loc; end

  # attr_reader right: Node?
  #
  # source://yarp//lib/prism/node.rb#11499
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11602
  def type; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#11505
  def flags; end
end

# Represents a rational number literal.
#
#     1.0r
#     ^^^^
#
# source://yarp//lib/prism/node.rb#11611
class Prism::RationalNode < ::Prism::Node
  # def initialize: (numeric: Node, location: Location) -> void
  #
  # @return [RationalNode] a new instance of RationalNode
  #
  # source://yarp//lib/prism/node.rb#11616
  def initialize(numeric, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11622
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11627
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11637
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11632
  def compact_child_nodes; end

  # def copy: (**params) -> RationalNode
  #
  # source://yarp//lib/prism/node.rb#11642
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11627
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11653
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11657
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader numeric: Node
  #
  # source://yarp//lib/prism/node.rb#11613
  def numeric; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11678
  def type; end

  # Returns the value of the node as a Ruby Rational.
  #
  # source://yarp//lib/prism/node_ext.rb#40
  def value; end
end

# Represents the use of the `redo` keyword.
#
#     redo
#     ^^^^
#
# source://yarp//lib/prism/node.rb#11687
class Prism::RedoNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [RedoNode] a new instance of RedoNode
  #
  # source://yarp//lib/prism/node.rb#11689
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11694
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11699
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11709
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11704
  def compact_child_nodes; end

  # def copy: (**params) -> RedoNode
  #
  # source://yarp//lib/prism/node.rb#11714
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11699
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11724
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11728
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11747
  def type; end
end

# source://yarp//lib/prism/node.rb#14510
module Prism::RegularExpressionFlags; end

# n - forces the ASCII-8BIT encoding
#
# source://yarp//lib/prism/node.rb#14524
Prism::RegularExpressionFlags::ASCII_8BIT = T.let(T.unsafe(nil), Integer)

# e - forces the EUC-JP encoding
#
# source://yarp//lib/prism/node.rb#14521
Prism::RegularExpressionFlags::EUC_JP = T.let(T.unsafe(nil), Integer)

# x - ignores whitespace and allows comments in regular expressions
#
# source://yarp//lib/prism/node.rb#14515
Prism::RegularExpressionFlags::EXTENDED = T.let(T.unsafe(nil), Integer)

# i - ignores the case of characters when matching
#
# source://yarp//lib/prism/node.rb#14512
Prism::RegularExpressionFlags::IGNORE_CASE = T.let(T.unsafe(nil), Integer)

# m - allows $ to match the end of lines within strings
#
# source://yarp//lib/prism/node.rb#14518
Prism::RegularExpressionFlags::MULTI_LINE = T.let(T.unsafe(nil), Integer)

# o - only interpolates values into the regular expression once
#
# source://yarp//lib/prism/node.rb#14533
Prism::RegularExpressionFlags::ONCE = T.let(T.unsafe(nil), Integer)

# u - forces the UTF-8 encoding
#
# source://yarp//lib/prism/node.rb#14530
Prism::RegularExpressionFlags::UTF_8 = T.let(T.unsafe(nil), Integer)

# s - forces the Windows-31J encoding
#
# source://yarp//lib/prism/node.rb#14527
Prism::RegularExpressionFlags::WINDOWS_31J = T.let(T.unsafe(nil), Integer)

# Represents a regular expression literal with no interpolation.
#
#     /foo/i
#     ^^^^^^
#
# source://yarp//lib/prism/node.rb#11756
class Prism::RegularExpressionNode < ::Prism::Node
  # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, flags: Integer, location: Location) -> void
  #
  # @return [RegularExpressionNode] a new instance of RegularExpressionNode
  #
  # source://yarp//lib/prism/node.rb#11773
  def initialize(opening_loc, content_loc, closing_loc, unescaped, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11783
  def accept(visitor); end

  # def ascii_8bit?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11858
  def ascii_8bit?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11788
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#11833
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11764
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11798
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11793
  def compact_child_nodes; end

  # def content: () -> String
  #
  # source://yarp//lib/prism/node.rb#11828
  def content; end

  # attr_reader content_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11761
  def content_loc; end

  # def copy: (**params) -> RegularExpressionNode
  #
  # source://yarp//lib/prism/node.rb#11803
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11788
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11818
  def deconstruct_keys(keys); end

  # def euc_jp?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11853
  def euc_jp?; end

  # def extended?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11843
  def extended?; end

  # def ignore_case?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11838
  def ignore_case?; end

  # source://yarp//lib/prism/node.rb#11877
  def inspect(inspector = T.unsafe(nil)); end

  # def multi_line?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11848
  def multi_line?; end

  # def once?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11873
  def once?; end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#11823
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11758
  def opening_loc; end

  # Returns a numeric value that represents the flags that were used to create
  # the regular expression.
  #
  # source://yarp//lib/prism/node_ext.rb#48
  def options; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#11902
  def type; end

  # attr_reader unescaped: String
  #
  # source://yarp//lib/prism/node.rb#11767
  def unescaped; end

  # def utf_8?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11868
  def utf_8?; end

  # def windows_31j?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#11863
  def windows_31j?; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#11770
  def flags; end
end

# Represents a destructured required parameter node.
#
#     def foo((bar, baz))
#             ^^^^^^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#11912
class Prism::RequiredDestructuredParameterNode < ::Prism::Node
  # def initialize: (parameters: Array[Node], opening_loc: Location, closing_loc: Location, location: Location) -> void
  #
  # @return [RequiredDestructuredParameterNode] a new instance of RequiredDestructuredParameterNode
  #
  # source://yarp//lib/prism/node.rb#11923
  def initialize(parameters, opening_loc, closing_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#11931
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11936
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#11974
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11920
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#11946
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11941
  def compact_child_nodes; end

  # def copy: (**params) -> RequiredDestructuredParameterNode
  #
  # source://yarp//lib/prism/node.rb#11951
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#11936
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#11964
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#11978
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#11969
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#11917
  def opening_loc; end

  # attr_reader parameters: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#11914
  def parameters; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12000
  def type; end
end

# Represents a required parameter to a method, block, or lambda definition.
#
#     def a(b)
#           ^
#     end
#
# source://yarp//lib/prism/node.rb#12010
class Prism::RequiredParameterNode < ::Prism::Node
  # def initialize: (name: Symbol, location: Location) -> void
  #
  # @return [RequiredParameterNode] a new instance of RequiredParameterNode
  #
  # source://yarp//lib/prism/node.rb#12015
  def initialize(name, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12021
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12026
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12036
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12031
  def compact_child_nodes; end

  # def copy: (**params) -> RequiredParameterNode
  #
  # source://yarp//lib/prism/node.rb#12041
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12026
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12052
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12056
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol
  #
  # source://yarp//lib/prism/node.rb#12012
  def name; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12076
  def type; end
end

# Represents an expression modified with a rescue.
#
#   foo rescue nil
#   ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#12085
class Prism::RescueModifierNode < ::Prism::Node
  # def initialize: (expression: Node, keyword_loc: Location, rescue_expression: Node, location: Location) -> void
  #
  # @return [RescueModifierNode] a new instance of RescueModifierNode
  #
  # source://yarp//lib/prism/node.rb#12096
  def initialize(expression, keyword_loc, rescue_expression, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12104
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12113
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12123
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12118
  def compact_child_nodes; end

  # def copy: (**params) -> RescueModifierNode
  #
  # source://yarp//lib/prism/node.rb#12128
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12113
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12141
  def deconstruct_keys(keys); end

  # attr_reader expression: Node
  #
  # source://yarp//lib/prism/node.rb#12087
  def expression; end

  # source://yarp//lib/prism/node.rb#12150
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#12146
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12090
  def keyword_loc; end

  # attr_reader rescue_expression: Node
  #
  # source://yarp//lib/prism/node.rb#12093
  def rescue_expression; end

  # source://yarp//lib/prism/node.rb#12108
  def set_newline_flag(newline_marked); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12174
  def type; end
end

# Represents a rescue statement.
#
#     begin
#     rescue Foo, *splat, Bar => ex
#     ^^^^^^
#       foo
#     end
#
# `Foo, *splat, Bar` are in the `exceptions` field.
# `ex` is in the `exception` field.
#
# source://yarp//lib/prism/node.rb#12189
class Prism::RescueNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, exceptions: Array[Node], operator_loc: Location?, reference: Node?, statements: StatementsNode?, consequent: RescueNode?, location: Location) -> void
  #
  # @return [RescueNode] a new instance of RescueNode
  #
  # source://yarp//lib/prism/node.rb#12209
  def initialize(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12220
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12225
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12240
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12230
  def compact_child_nodes; end

  # attr_reader consequent: RescueNode?
  #
  # source://yarp//lib/prism/node.rb#12206
  def consequent; end

  # def copy: (**params) -> RescueNode
  #
  # source://yarp//lib/prism/node.rb#12245
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12225
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12261
  def deconstruct_keys(keys); end

  # attr_reader exceptions: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12194
  def exceptions; end

  # source://yarp//lib/prism/node.rb#12275
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#12266
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12191
  def keyword_loc; end

  # def operator: () -> String?
  #
  # source://yarp//lib/prism/node.rb#12271
  def operator; end

  # attr_reader operator_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#12197
  def operator_loc; end

  # attr_reader reference: Node?
  #
  # source://yarp//lib/prism/node.rb#12200
  def reference; end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#12203
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12315
  def type; end
end

# Represents a rest parameter to a method, block, or lambda definition.
#
#     def a(*b)
#           ^^
#     end
#
# source://yarp//lib/prism/node.rb#12325
class Prism::RestParameterNode < ::Prism::Node
  # def initialize: (name: Symbol?, name_loc: Location?, operator_loc: Location, location: Location) -> void
  #
  # @return [RestParameterNode] a new instance of RestParameterNode
  #
  # source://yarp//lib/prism/node.rb#12336
  def initialize(name, name_loc, operator_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12344
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12349
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12359
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12354
  def compact_child_nodes; end

  # def copy: (**params) -> RestParameterNode
  #
  # source://yarp//lib/prism/node.rb#12364
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12349
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12377
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12386
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader name: Symbol?
  #
  # source://yarp//lib/prism/node.rb#12327
  def name; end

  # attr_reader name_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#12330
  def name_loc; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#12382
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12333
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12408
  def type; end
end

# Represents the use of the `retry` keyword.
#
#     retry
#     ^^^^^
#
# source://yarp//lib/prism/node.rb#12417
class Prism::RetryNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [RetryNode] a new instance of RetryNode
  #
  # source://yarp//lib/prism/node.rb#12419
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12424
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12429
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12439
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12434
  def compact_child_nodes; end

  # def copy: (**params) -> RetryNode
  #
  # source://yarp//lib/prism/node.rb#12444
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12429
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12454
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12458
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12477
  def type; end
end

# Represents the use of the `return` keyword.
#
#     return 1
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#12486
class Prism::ReturnNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, arguments: ArgumentsNode?, location: Location) -> void
  #
  # @return [ReturnNode] a new instance of ReturnNode
  #
  # source://yarp//lib/prism/node.rb#12494
  def initialize(keyword_loc, arguments, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12501
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#12491
  def arguments; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12506
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12518
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12511
  def compact_child_nodes; end

  # def copy: (**params) -> ReturnNode
  #
  # source://yarp//lib/prism/node.rb#12523
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12506
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12535
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12544
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#12540
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12488
  def keyword_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12570
  def type; end
end

# This class is meant to provide a compatibility layer between prism and
# Ripper. It functions by parsing the entire tree first and then walking it
# and executing each of the Ripper callbacks as it goes.
#
# This class is going to necessarily be slower than the native Ripper API. It
# is meant as a stopgap until developers migrate to using prism. It is also
# meant as a test harness for the prism parser.
#
# source://yarp//lib/prism/ripper_compat.rb#13
class Prism::RipperCompat
  # @return [RipperCompat] a new instance of RipperCompat
  #
  # source://yarp//lib/prism/ripper_compat.rb#59
  def initialize(source); end

  # Returns the value of attribute column.
  #
  # source://yarp//lib/prism/ripper_compat.rb#57
  def column; end

  # Public interface
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/ripper_compat.rb#70
  def error?; end

  # Returns the value of attribute lineno.
  #
  # source://yarp//lib/prism/ripper_compat.rb#57
  def lineno; end

  # source://yarp//lib/prism/ripper_compat.rb#74
  def parse; end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/ripper_compat.rb#57
  def source; end

  # Visitor methods
  #
  # source://yarp//lib/prism/ripper_compat.rb#82
  def visit(node); end

  # source://yarp//lib/prism/ripper_compat.rb#86
  def visit_call_node(node); end

  # source://yarp//lib/prism/ripper_compat.rb#100
  def visit_integer_node(node); end

  # source://yarp//lib/prism/ripper_compat.rb#125
  def visit_program_node(node); end

  # source://yarp//lib/prism/ripper_compat.rb#105
  def visit_statements_node(node); end

  # source://yarp//lib/prism/ripper_compat.rb#112
  def visit_token(node); end

  private

  # source://yarp//lib/prism/ripper_compat.rb#162
  def _dispatch0; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def _dispatch1(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def _dispatch2(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def _dispatch3(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#166
  def _dispatch4(_, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#167
  def _dispatch5(_, _, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#168
  def _dispatch7(_, _, _, _, _, _, _); end

  # This method is responsible for updating lineno and column information
  # to reflect the current node.
  #
  # This method could be drastically improved with some caching on the start
  # of every line, but for now it's good enough.
  #
  # source://yarp//lib/prism/ripper_compat.rb#151
  def bounds(location); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_BEGIN(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_CHAR(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_END(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on___end__(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_alias(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_alias_error(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_aref(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_aref_field(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_arg_ambiguous(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_arg_paren(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_args_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_args_add_block(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_args_add_star(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_args_forward; end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_args_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_array(_); end

  # source://yarp//lib/prism/ripper_compat.rb#166
  def on_aryptn(_, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_assign(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_assign_error(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_assoc_new(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_assoc_splat(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_assoclist_from_args(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_backref(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_backtick(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_bare_assoc_hash(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_begin(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_binary(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_block_var(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_blockarg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#166
  def on_bodystmt(_, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_brace_block(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_break(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_call(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_case(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_class(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_class_name_error(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_comma(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_command(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#166
  def on_command_call(_, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_comment(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_const(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_const_path_field(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_const_path_ref(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_const_ref(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_cvar(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_def(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_defined(_); end

  # source://yarp//lib/prism/ripper_compat.rb#167
  def on_defs(_, _, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_do_block(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_dot2(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_dot3(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_dyna_symbol(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_else(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_elsif(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_embdoc(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_embdoc_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_embdoc_end(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_embexpr_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_embexpr_end(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_embvar(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_ensure(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_excessed_comma; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_fcall(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_field(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_float(_); end

  # source://yarp//lib/prism/ripper_compat.rb#166
  def on_fndptn(_, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_for(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_gvar(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_hash(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_heredoc_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_heredoc_dedent(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_heredoc_end(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_hshptn(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_ident(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_if(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_if_mod(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_ifop(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_ignored_nl(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_ignored_sp(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_imaginary(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_in(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_int(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_ivar(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_kw(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_kwrest_param(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_label(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_label_end(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_lambda(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_lbrace(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_lbracket(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_lparen(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_magic_comment(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_massign(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_method_add_arg(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_method_add_block(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_mlhs_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_mlhs_add_post(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_mlhs_add_star(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_mlhs_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_mlhs_paren(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_module(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_mrhs_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_mrhs_add_star(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_mrhs_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_mrhs_new_from_args(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_next(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_nl(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_nokw_param(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_op(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_opassign(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_operator_ambiguous(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_param_error(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#168
  def on_params(_, _, _, _, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_paren(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_parse_error(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_period(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_program(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_qsymbols_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_qsymbols_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_qsymbols_new; end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_qwords_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_qwords_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_qwords_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_rational(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_rbrace(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_rbracket(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_redo; end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_regexp_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_regexp_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_regexp_end(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_regexp_literal(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_regexp_new; end

  # source://yarp//lib/prism/ripper_compat.rb#166
  def on_rescue(_, _, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_rescue_mod(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_rest_param(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_retry; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_return(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_return0; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_rparen(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_sclass(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_semicolon(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_sp(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_stmts_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_stmts_new; end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_string_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_string_concat(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_string_content; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_string_dvar(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_string_embexpr(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_string_literal(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_super(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_symbeg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_symbol(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_symbol_literal(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_symbols_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_symbols_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_symbols_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_tlambda(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_tlambeg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_top_const_field(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_top_const_ref(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_tstring_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_tstring_content(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_tstring_end(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_unary(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_undef(_); end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_unless(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_unless_mod(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_until(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_until_mod(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_var_alias(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_var_field(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_var_ref(_); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_vcall(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_void_stmt; end

  # source://yarp//lib/prism/ripper_compat.rb#165
  def on_when(_, _, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_while(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_while_mod(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_word_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_word_new; end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_words_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_words_beg(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_words_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_words_sep(_); end

  # source://yarp//lib/prism/ripper_compat.rb#164
  def on_xstring_add(_, _); end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_xstring_literal(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_xstring_new; end

  # source://yarp//lib/prism/ripper_compat.rb#163
  def on_yield(_); end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_yield0; end

  # source://yarp//lib/prism/ripper_compat.rb#162
  def on_zsuper; end

  # source://yarp//lib/prism/ripper_compat.rb#158
  def result; end

  class << self
    # This is a convenience method that runs the SexpBuilderPP subclass parser.
    #
    # source://yarp//lib/prism/ripper_compat.rb#140
    def sexp(source); end

    # This is a convenience method that runs the SexpBuilder subclass parser.
    #
    # source://yarp//lib/prism/ripper_compat.rb#135
    def sexp_raw(source); end
  end
end

# This class mirrors the ::Ripper::SexpBuilder subclass of ::Ripper that
# returns the arrays of [type, *children].
#
# source://yarp//lib/prism/ripper_compat.rb#16
class Prism::RipperCompat::SexpBuilder < ::Prism::RipperCompat
  private

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_BEGIN(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_CHAR(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_END(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on___end__(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_alias(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_alias_error(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_aref(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_aref_field(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_arg_ambiguous(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_arg_paren(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_args_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_args_add_block(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_args_add_star(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_args_forward(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_args_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_array(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_aryptn(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_assign(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_assign_error(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_assoc_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_assoc_splat(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_assoclist_from_args(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_backref(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_backtick(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_bare_assoc_hash(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_begin(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_binary(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_block_var(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_blockarg(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_bodystmt(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_brace_block(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_break(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_call(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_case(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_class(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_class_name_error(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_comma(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_command(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_command_call(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_comment(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_const(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_const_path_field(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_const_path_ref(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_const_ref(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_cvar(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_def(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_defined(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_defs(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_do_block(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_dot2(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_dot3(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_dyna_symbol(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_else(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_elsif(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_embdoc(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_embdoc_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_embdoc_end(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_embexpr_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_embexpr_end(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_embvar(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_ensure(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_excessed_comma(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_fcall(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_field(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_float(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_fndptn(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_for(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_gvar(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_hash(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_heredoc_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_heredoc_dedent(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_heredoc_end(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_hshptn(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_ident(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_if(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_if_mod(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_ifop(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_ignored_nl(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_ignored_sp(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_imaginary(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_in(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_int(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_ivar(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_kw(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_kwrest_param(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_label(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_label_end(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_lambda(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_lbrace(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_lbracket(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_lparen(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_magic_comment(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_massign(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_method_add_arg(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_method_add_block(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mlhs_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mlhs_add_post(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mlhs_add_star(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mlhs_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mlhs_paren(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_module(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mrhs_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mrhs_add_star(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mrhs_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_mrhs_new_from_args(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_next(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_nl(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_nokw_param(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_op(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_opassign(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_operator_ambiguous(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_param_error(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_params(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_paren(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_parse_error(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_period(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_program(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_qsymbols_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_qsymbols_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_qsymbols_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_qwords_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_qwords_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_qwords_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_rational(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_rbrace(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_rbracket(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_redo(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_regexp_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_regexp_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_regexp_end(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_regexp_literal(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_regexp_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_rescue(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_rescue_mod(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_rest_param(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_retry(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_return(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_return0(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_rparen(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_sclass(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_semicolon(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_sp(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_stmts_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_stmts_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_string_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_string_concat(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_string_content(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_string_dvar(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_string_embexpr(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_string_literal(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_super(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_symbeg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_symbol(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_symbol_literal(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_symbols_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_symbols_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_symbols_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_tlambda(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_tlambeg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_top_const_field(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_top_const_ref(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_tstring_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_tstring_content(value); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_tstring_end(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_unary(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_undef(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_unless(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_unless_mod(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_until(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_until_mod(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_var_alias(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_var_field(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_var_ref(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_vcall(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_void_stmt(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_when(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_while(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_while_mod(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_word_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_word_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_words_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_words_beg(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_words_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#26
  def on_words_sep(value); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_xstring_add(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_xstring_literal(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_xstring_new(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_yield(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_yield0(*args); end

  # source://yarp//lib/prism/ripper_compat.rb#20
  def on_zsuper(*args); end
end

# This class mirrors the ::Ripper::SexpBuilderPP subclass of ::Ripper that
# returns the same values as ::Ripper::SexpBuilder except with a couple of
# niceties that flatten linked lists into arrays.
#
# source://yarp//lib/prism/ripper_compat.rb#35
class Prism::RipperCompat::SexpBuilderPP < ::Prism::RipperCompat::SexpBuilder
  private

  # source://yarp//lib/prism/ripper_compat.rb#38
  def _dispatch_event_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def _dispatch_event_push(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_args_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_args_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_mlhs_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_mlhs_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_mrhs_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_mrhs_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_qsymbols_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_qsymbols_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_qwords_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_qwords_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_regexp_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_regexp_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_stmts_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_stmts_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_string_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_symbols_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_symbols_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_word_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_word_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_words_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_words_new; end

  # source://yarp//lib/prism/ripper_compat.rb#42
  def on_xstring_add(list, item); end

  # source://yarp//lib/prism/ripper_compat.rb#38
  def on_xstring_new; end
end

# Represents the `self` keyword.
#
#     self
#     ^^^^
#
# source://yarp//lib/prism/node.rb#12579
class Prism::SelfNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [SelfNode] a new instance of SelfNode
  #
  # source://yarp//lib/prism/node.rb#12581
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12586
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12591
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12601
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12596
  def compact_child_nodes; end

  # def copy: (**params) -> SelfNode
  #
  # source://yarp//lib/prism/node.rb#12606
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12591
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12616
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12620
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12639
  def type; end
end

# source://yarp//lib/prism/serialize.rb#22
module Prism::Serialize
  class << self
    # source://yarp//lib/prism/serialize.rb#27
    def load(input, serialized); end

    # source://yarp//lib/prism/serialize.rb#37
    def load_tokens(source, serialized); end
  end
end

# source://yarp//lib/prism/serialize.rb#41
class Prism::Serialize::Loader
  # @return [Loader] a new instance of Loader
  #
  # source://yarp//lib/prism/serialize.rb#45
  def initialize(source, serialized); end

  # Returns the value of attribute constant_pool.
  #
  # source://yarp//lib/prism/serialize.rb#43
  def constant_pool; end

  # Returns the value of attribute constant_pool_offset.
  #
  # source://yarp//lib/prism/serialize.rb#43
  def constant_pool_offset; end

  # Returns the value of attribute encoding.
  #
  # source://yarp//lib/prism/serialize.rb#42
  def encoding; end

  # Returns the value of attribute input.
  #
  # source://yarp//lib/prism/serialize.rb#42
  def input; end

  # Returns the value of attribute io.
  #
  # source://yarp//lib/prism/serialize.rb#42
  def io; end

  # source://yarp//lib/prism/serialize.rb#59
  def load_encoding; end

  # source://yarp//lib/prism/serialize.rb#63
  def load_metadata; end

  # source://yarp//lib/prism/serialize.rb#96
  def load_nodes; end

  # source://yarp//lib/prism/serialize.rb#115
  def load_result; end

  # source://yarp//lib/prism/serialize.rb#70
  def load_tokens; end

  # source://yarp//lib/prism/serialize.rb#83
  def load_tokens_result; end

  # Returns the value of attribute serialized.
  #
  # source://yarp//lib/prism/serialize.rb#42
  def serialized; end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/serialize.rb#43
  def source; end

  private

  # source://yarp//lib/prism/serialize.rb#172
  def load_constant(index); end

  # source://yarp//lib/prism/serialize.rb#149
  def load_embedded_string; end

  # source://yarp//lib/prism/serialize.rb#164
  def load_location; end

  # source://yarp//lib/prism/serialize.rb#202
  def load_node; end

  # source://yarp//lib/prism/serialize.rb#197
  def load_optional_constant; end

  # source://yarp//lib/prism/serialize.rb#168
  def load_optional_location; end

  # source://yarp//lib/prism/serialize.rb#142
  def load_optional_node; end

  # source://yarp//lib/prism/serialize.rb#193
  def load_required_constant; end

  # source://yarp//lib/prism/serialize.rb#138
  def load_serialized_length; end

  # source://yarp//lib/prism/serialize.rb#153
  def load_string; end

  # variable-length integer using https://en.wikipedia.org/wiki/LEB128
  # This is also what protobuf uses: https://protobuf.dev/programming-guides/encoding/#varints
  #
  # source://yarp//lib/prism/serialize.rb#124
  def load_varint; end
end

# source://yarp//lib/prism/serialize.rb#23
Prism::Serialize::MAJOR_VERSION = T.let(T.unsafe(nil), Integer)

# source://yarp//lib/prism/serialize.rb#24
Prism::Serialize::MINOR_VERSION = T.let(T.unsafe(nil), Integer)

# source://yarp//lib/prism/serialize.rb#25
Prism::Serialize::PATCH_VERSION = T.let(T.unsafe(nil), Integer)

# source://yarp//lib/prism/serialize.rb#494
Prism::Serialize::TOKEN_TYPES = T.let(T.unsafe(nil), Array)

# Represents a singleton class declaration involving the `class` keyword.
#
#     class << self end
#     ^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#12648
class Prism::SingletonClassNode < ::Prism::Node
  # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, operator_loc: Location, expression: Node, body: Node?, end_keyword_loc: Location, location: Location) -> void
  #
  # @return [SingletonClassNode] a new instance of SingletonClassNode
  #
  # source://yarp//lib/prism/node.rb#12668
  def initialize(locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12679
  def accept(visitor); end

  # attr_reader body: Node?
  #
  # source://yarp//lib/prism/node.rb#12662
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12684
  def child_nodes; end

  # def class_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#12723
  def class_keyword; end

  # attr_reader class_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12653
  def class_keyword_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12697
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12689
  def compact_child_nodes; end

  # def copy: (**params) -> SingletonClassNode
  #
  # source://yarp//lib/prism/node.rb#12702
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12684
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12718
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#12733
  def end_keyword; end

  # attr_reader end_keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12665
  def end_keyword_loc; end

  # attr_reader expression: Node
  #
  # source://yarp//lib/prism/node.rb#12659
  def expression; end

  # source://yarp//lib/prism/node.rb#12737
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader locals: Array[Symbol]
  #
  # source://yarp//lib/prism/node.rb#12650
  def locals; end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#12728
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12656
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12768
  def type; end
end

# This represents a source of Ruby code that has been parsed. It is used in
# conjunction with locations to allow them to resolve line numbers and source
# ranges.
#
# source://yarp//lib/prism/parse_result.rb#7
class Prism::Source
  # @return [Source] a new instance of Source
  #
  # source://yarp//lib/prism/parse_result.rb#10
  def initialize(source, offsets = T.unsafe(nil)); end

  # source://yarp//lib/prism/parse_result.rb#27
  def column(value); end

  # source://yarp//lib/prism/parse_result.rb#19
  def line(value); end

  # source://yarp//lib/prism/parse_result.rb#23
  def line_offset(value); end

  # Returns the value of attribute offsets.
  #
  # source://yarp//lib/prism/parse_result.rb#8
  def offsets; end

  # source://yarp//lib/prism/parse_result.rb#15
  def slice(offset, length); end

  # Returns the value of attribute source.
  #
  # source://yarp//lib/prism/parse_result.rb#8
  def source; end

  private

  # source://yarp//lib/prism/parse_result.rb#33
  def compute_offsets(code); end
end

# Represents the use of the `__ENCODING__` keyword.
#
#     __ENCODING__
#     ^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#12777
class Prism::SourceEncodingNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [SourceEncodingNode] a new instance of SourceEncodingNode
  #
  # source://yarp//lib/prism/node.rb#12779
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12784
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12789
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12799
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12794
  def compact_child_nodes; end

  # def copy: (**params) -> SourceEncodingNode
  #
  # source://yarp//lib/prism/node.rb#12804
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12789
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12814
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12818
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12837
  def type; end
end

# Represents the use of the `__FILE__` keyword.
#
#     __FILE__
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#12846
class Prism::SourceFileNode < ::Prism::Node
  # def initialize: (filepath: String, location: Location) -> void
  #
  # @return [SourceFileNode] a new instance of SourceFileNode
  #
  # source://yarp//lib/prism/node.rb#12851
  def initialize(filepath, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12857
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12862
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12872
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12867
  def compact_child_nodes; end

  # def copy: (**params) -> SourceFileNode
  #
  # source://yarp//lib/prism/node.rb#12877
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12862
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12888
  def deconstruct_keys(keys); end

  # attr_reader filepath: String
  #
  # source://yarp//lib/prism/node.rb#12848
  def filepath; end

  # source://yarp//lib/prism/node.rb#12892
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12912
  def type; end
end

# Represents the use of the `__LINE__` keyword.
#
#     __LINE__
#     ^^^^^^^^
#
# source://yarp//lib/prism/node.rb#12921
class Prism::SourceLineNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [SourceLineNode] a new instance of SourceLineNode
  #
  # source://yarp//lib/prism/node.rb#12923
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#12928
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12933
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#12943
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#12938
  def compact_child_nodes; end

  # def copy: (**params) -> SourceLineNode
  #
  # source://yarp//lib/prism/node.rb#12948
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#12933
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#12958
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#12962
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#12981
  def type; end
end

# Represents the use of the splat operator.
#
#     [*a]
#      ^^
#
# source://yarp//lib/prism/node.rb#12990
class Prism::SplatNode < ::Prism::Node
  # def initialize: (operator_loc: Location, expression: Node?, location: Location) -> void
  #
  # @return [SplatNode] a new instance of SplatNode
  #
  # source://yarp//lib/prism/node.rb#12998
  def initialize(operator_loc, expression, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13005
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13010
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13022
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13015
  def compact_child_nodes; end

  # def copy: (**params) -> SplatNode
  #
  # source://yarp//lib/prism/node.rb#13027
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13010
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13039
  def deconstruct_keys(keys); end

  # attr_reader expression: Node?
  #
  # source://yarp//lib/prism/node.rb#12995
  def expression; end

  # source://yarp//lib/prism/node.rb#13048
  def inspect(inspector = T.unsafe(nil)); end

  # def operator: () -> String
  #
  # source://yarp//lib/prism/node.rb#13044
  def operator; end

  # attr_reader operator_loc: Location
  #
  # source://yarp//lib/prism/node.rb#12992
  def operator_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13074
  def type; end
end

# Represents a set of statements contained within some scope.
#
#     foo; bar; baz
#     ^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#13083
class Prism::StatementsNode < ::Prism::Node
  # def initialize: (body: Array[Node], location: Location) -> void
  #
  # @return [StatementsNode] a new instance of StatementsNode
  #
  # source://yarp//lib/prism/node.rb#13088
  def initialize(body, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13094
  def accept(visitor); end

  # attr_reader body: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13085
  def body; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13099
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13109
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13104
  def compact_child_nodes; end

  # def copy: (**params) -> StatementsNode
  #
  # source://yarp//lib/prism/node.rb#13114
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13099
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13125
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13129
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13149
  def type; end
end

# Represents the use of compile-time string concatenation.
#
#     "foo" "bar"
#     ^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#13158
class Prism::StringConcatNode < ::Prism::Node
  # def initialize: (left: Node, right: Node, location: Location) -> void
  #
  # @return [StringConcatNode] a new instance of StringConcatNode
  #
  # source://yarp//lib/prism/node.rb#13166
  def initialize(left, right, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13173
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13178
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13188
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13183
  def compact_child_nodes; end

  # def copy: (**params) -> StringConcatNode
  #
  # source://yarp//lib/prism/node.rb#13193
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13178
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13205
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13209
  def inspect(inspector = T.unsafe(nil)); end

  # attr_reader left: Node
  #
  # source://yarp//lib/prism/node.rb#13160
  def left; end

  # attr_reader right: Node
  #
  # source://yarp//lib/prism/node.rb#13163
  def right; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13232
  def type; end
end

# source://yarp//lib/prism/node.rb#14536
module Prism::StringFlags; end

# frozen by virtue of a frozen_string_literal comment
#
# source://yarp//lib/prism/node.rb#14538
Prism::StringFlags::FROZEN = T.let(T.unsafe(nil), Integer)

# Represents a string literal, a string contained within a `%w` list, or
# plain string content within an interpolated string.
#
#     "foo"
#     ^^^^^
#
#     %w[foo]
#        ^^^
#
#     "foo #{bar} baz"
#      ^^^^      ^^^^
#
# source://yarp//lib/prism/node.rb#13248
class Prism::StringNode < ::Prism::Node
  # def initialize: (flags: Integer, opening_loc: Location?, content_loc: Location, closing_loc: Location?, unescaped: String, location: Location) -> void
  #
  # @return [StringNode] a new instance of StringNode
  #
  # source://yarp//lib/prism/node.rb#13265
  def initialize(flags, opening_loc, content_loc, closing_loc, unescaped, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13275
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13280
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13330
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13259
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13290
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13285
  def compact_child_nodes; end

  # def content: () -> String
  #
  # source://yarp//lib/prism/node.rb#13325
  def content; end

  # attr_reader content_loc: Location
  #
  # source://yarp//lib/prism/node.rb#13256
  def content_loc; end

  # def copy: (**params) -> StringNode
  #
  # source://yarp//lib/prism/node.rb#13295
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13280
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13310
  def deconstruct_keys(keys); end

  # def frozen?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#13315
  def frozen?; end

  # source://yarp//lib/prism/node.rb#13334
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13320
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13253
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13359
  def type; end

  # attr_reader unescaped: String
  #
  # source://yarp//lib/prism/node.rb#13262
  def unescaped; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#13250
  def flags; end
end

# Represents the use of the `super` keyword with parentheses or arguments.
#
#     super()
#     ^^^^^^^
#
#     super foo, bar
#     ^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#13371
class Prism::SuperNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: ArgumentsNode?, rparen_loc: Location?, block: Node?, location: Location) -> void
  #
  # @return [SuperNode] a new instance of SuperNode
  #
  # source://yarp//lib/prism/node.rb#13388
  def initialize(keyword_loc, lparen_loc, arguments, rparen_loc, block, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13398
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#13379
  def arguments; end

  # attr_reader block: Node?
  #
  # source://yarp//lib/prism/node.rb#13385
  def block; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13403
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13416
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13408
  def compact_child_nodes; end

  # def copy: (**params) -> SuperNode
  #
  # source://yarp//lib/prism/node.rb#13421
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13403
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13436
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13455
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#13441
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#13373
  def keyword_loc; end

  # def lparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13446
  def lparen; end

  # attr_reader lparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13376
  def lparen_loc; end

  # def rparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13451
  def rparen; end

  # attr_reader rparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13382
  def rparen_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13489
  def type; end
end

# Represents a symbol literal or a symbol contained within a `%i` list.
#
#     :foo
#     ^^^^
#
#     %i[foo]
#        ^^^
#
# source://yarp//lib/prism/node.rb#13501
class Prism::SymbolNode < ::Prism::Node
  # def initialize: (opening_loc: Location?, value_loc: Location?, closing_loc: Location?, unescaped: String, location: Location) -> void
  #
  # @return [SymbolNode] a new instance of SymbolNode
  #
  # source://yarp//lib/prism/node.rb#13515
  def initialize(opening_loc, value_loc, closing_loc, unescaped, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13524
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13529
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13573
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13509
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13539
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13534
  def compact_child_nodes; end

  # def copy: (**params) -> SymbolNode
  #
  # source://yarp//lib/prism/node.rb#13544
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13529
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13558
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13577
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13563
  def opening; end

  # attr_reader opening_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13503
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13600
  def type; end

  # attr_reader unescaped: String
  #
  # source://yarp//lib/prism/node.rb#13512
  def unescaped; end

  # def value: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13568
  def value; end

  # attr_reader value_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13506
  def value_loc; end
end

# This represents a token from the Ruby source.
#
# source://yarp//lib/prism/parse_result.rb#233
class Prism::Token
  # @return [Token] a new instance of Token
  #
  # source://yarp//lib/prism/parse_result.rb#236
  def initialize(type, value, location); end

  # source://yarp//lib/prism/parse_result.rb#260
  def ==(other); end

  # source://yarp//lib/prism/parse_result.rb#242
  def deconstruct_keys(keys); end

  # Returns the value of attribute location.
  #
  # source://yarp//lib/prism/parse_result.rb#234
  def location; end

  # source://yarp//lib/prism/parse_result.rb#246
  def pretty_print(q); end

  # Returns the value of attribute type.
  #
  # source://yarp//lib/prism/parse_result.rb#234
  def type; end

  # Returns the value of attribute value.
  #
  # source://yarp//lib/prism/parse_result.rb#234
  def value; end
end

# Represents the use of the literal `true` keyword.
#
#     true
#     ^^^^
#
# source://yarp//lib/prism/node.rb#13609
class Prism::TrueNode < ::Prism::Node
  # def initialize: (location: Location) -> void
  #
  # @return [TrueNode] a new instance of TrueNode
  #
  # source://yarp//lib/prism/node.rb#13611
  def initialize(location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13616
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13621
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13631
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13626
  def compact_child_nodes; end

  # def copy: (**params) -> TrueNode
  #
  # source://yarp//lib/prism/node.rb#13636
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13621
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13646
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13650
  def inspect(inspector = T.unsafe(nil)); end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13669
  def type; end
end

# Represents the use of the `undef` keyword.
#
#     undef :foo, :bar, :baz
#     ^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#13678
class Prism::UndefNode < ::Prism::Node
  # def initialize: (names: Array[Node], keyword_loc: Location, location: Location) -> void
  #
  # @return [UndefNode] a new instance of UndefNode
  #
  # source://yarp//lib/prism/node.rb#13686
  def initialize(names, keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13693
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13698
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13708
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13703
  def compact_child_nodes; end

  # def copy: (**params) -> UndefNode
  #
  # source://yarp//lib/prism/node.rb#13713
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13698
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13725
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13734
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#13730
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#13683
  def keyword_loc; end

  # attr_reader names: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13680
  def names; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13755
  def type; end
end

# Represents the use of the `unless` keyword, either in the block form or the modifier form.
#
#     bar unless foo
#     ^^^^^^^^^^^^^^
#
#     unless foo then bar end
#     ^^^^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#13767
class Prism::UnlessNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, predicate: Node, statements: StatementsNode?, consequent: ElseNode?, end_keyword_loc: Location?, location: Location) -> void
  #
  # @return [UnlessNode] a new instance of UnlessNode
  #
  # source://yarp//lib/prism/node.rb#13784
  def initialize(keyword_loc, predicate, statements, consequent, end_keyword_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13794
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13803
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13817
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13808
  def compact_child_nodes; end

  # attr_reader consequent: ElseNode?
  #
  # source://yarp//lib/prism/node.rb#13778
  def consequent; end

  # def copy: (**params) -> UnlessNode
  #
  # source://yarp//lib/prism/node.rb#13822
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13803
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13837
  def deconstruct_keys(keys); end

  # def end_keyword: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13847
  def end_keyword; end

  # attr_reader end_keyword_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13781
  def end_keyword_loc; end

  # source://yarp//lib/prism/node.rb#13851
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#13842
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#13769
  def keyword_loc; end

  # attr_reader predicate: Node
  #
  # source://yarp//lib/prism/node.rb#13772
  def predicate; end

  # source://yarp//lib/prism/node.rb#13798
  def set_newline_flag(newline_marked); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#13775
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#13886
  def type; end
end

# Represents the use of the `until` keyword, either in the block form or the modifier form.
#
#     bar until foo
#     ^^^^^^^^^^^^^
#
#     until foo do bar end
#     ^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#13898
class Prism::UntilNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, closing_loc: Location?, predicate: Node, statements: StatementsNode?, flags: Integer, location: Location) -> void
  #
  # @return [UntilNode] a new instance of UntilNode
  #
  # source://yarp//lib/prism/node.rb#13915
  def initialize(keyword_loc, closing_loc, predicate, statements, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#13925
  def accept(visitor); end

  # def begin_modifier?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#13982
  def begin_modifier?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13934
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#13977
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#13903
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#13947
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#13939
  def compact_child_nodes; end

  # def copy: (**params) -> UntilNode
  #
  # source://yarp//lib/prism/node.rb#13952
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#13934
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#13967
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#13986
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#13972
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#13900
  def keyword_loc; end

  # attr_reader predicate: Node
  #
  # source://yarp//lib/prism/node.rb#13906
  def predicate; end

  # source://yarp//lib/prism/node.rb#13929
  def set_newline_flag(newline_marked); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#13909
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#14017
  def type; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#13912
  def flags; end
end

# The version constant is set by reading the result of calling pm_version.
Prism::VERSION = T.let(T.unsafe(nil), String)

# A visitor is a class that provides a default implementation for every accept
# method defined on the nodes. This means it can walk a tree without the
# caller needing to define any special handling. This allows you to handle a
# subset of the tree, while still walking the whole tree.
#
# For example, to find all of the method calls that call the `foo` method, you
# could write:
#
#     class FooCalls < Prism::Visitor
#       def visit_call_node(node)
#         if node.name == "foo"
#           # Do something with the node
#         end
#
#         # Call super so that the visitor continues walking the tree
#         super
#       end
#     end
#
# source://yarp//lib/prism/visitor.rb#46
class Prism::Visitor < ::Prism::BasicVisitor
  # Visit a AliasGlobalVariableNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_alias_global_variable_node(node); end

  # Visit a AliasMethodNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_alias_method_node(node); end

  # Visit a AlternationPatternNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_alternation_pattern_node(node); end

  # Visit a AndNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_and_node(node); end

  # Visit a ArgumentsNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_arguments_node(node); end

  # Visit a ArrayNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_array_node(node); end

  # Visit a ArrayPatternNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_array_pattern_node(node); end

  # Visit a AssocNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_assoc_node(node); end

  # Visit a AssocSplatNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_assoc_splat_node(node); end

  # Visit a BackReferenceReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_back_reference_read_node(node); end

  # Visit a BeginNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_begin_node(node); end

  # Visit a BlockArgumentNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_block_argument_node(node); end

  # Visit a BlockLocalVariableNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_block_local_variable_node(node); end

  # Visit a BlockNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_block_node(node); end

  # Visit a BlockParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_block_parameter_node(node); end

  # Visit a BlockParametersNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_block_parameters_node(node); end

  # Visit a BreakNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_break_node(node); end

  # Visit a CallAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_call_and_write_node(node); end

  # Visit a CallNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_call_node(node); end

  # Visit a CallOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_call_operator_write_node(node); end

  # Visit a CallOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_call_or_write_node(node); end

  # Visit a CapturePatternNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_capture_pattern_node(node); end

  # Visit a CaseNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_case_node(node); end

  # Visit a ClassNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_node(node); end

  # Visit a ClassVariableAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_variable_and_write_node(node); end

  # Visit a ClassVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_variable_operator_write_node(node); end

  # Visit a ClassVariableOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_variable_or_write_node(node); end

  # Visit a ClassVariableReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_variable_read_node(node); end

  # Visit a ClassVariableTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_variable_target_node(node); end

  # Visit a ClassVariableWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_class_variable_write_node(node); end

  # Visit a ConstantAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_and_write_node(node); end

  # Visit a ConstantOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_operator_write_node(node); end

  # Visit a ConstantOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_or_write_node(node); end

  # Visit a ConstantPathAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_path_and_write_node(node); end

  # Visit a ConstantPathNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_path_node(node); end

  # Visit a ConstantPathOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_path_operator_write_node(node); end

  # Visit a ConstantPathOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_path_or_write_node(node); end

  # Visit a ConstantPathTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_path_target_node(node); end

  # Visit a ConstantPathWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_path_write_node(node); end

  # Visit a ConstantReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_read_node(node); end

  # Visit a ConstantTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_target_node(node); end

  # Visit a ConstantWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_constant_write_node(node); end

  # Visit a DefNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_def_node(node); end

  # Visit a DefinedNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_defined_node(node); end

  # Visit a ElseNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_else_node(node); end

  # Visit a EmbeddedStatementsNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_embedded_statements_node(node); end

  # Visit a EmbeddedVariableNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_embedded_variable_node(node); end

  # Visit a EnsureNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_ensure_node(node); end

  # Visit a FalseNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_false_node(node); end

  # Visit a FindPatternNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_find_pattern_node(node); end

  # Visit a FlipFlopNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_flip_flop_node(node); end

  # Visit a FloatNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_float_node(node); end

  # Visit a ForNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_for_node(node); end

  # Visit a ForwardingArgumentsNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_forwarding_arguments_node(node); end

  # Visit a ForwardingParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_forwarding_parameter_node(node); end

  # Visit a ForwardingSuperNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_forwarding_super_node(node); end

  # Visit a GlobalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_global_variable_and_write_node(node); end

  # Visit a GlobalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_global_variable_operator_write_node(node); end

  # Visit a GlobalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_global_variable_or_write_node(node); end

  # Visit a GlobalVariableReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_global_variable_read_node(node); end

  # Visit a GlobalVariableTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_global_variable_target_node(node); end

  # Visit a GlobalVariableWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_global_variable_write_node(node); end

  # Visit a HashNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_hash_node(node); end

  # Visit a HashPatternNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_hash_pattern_node(node); end

  # Visit a IfNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_if_node(node); end

  # Visit a ImaginaryNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_imaginary_node(node); end

  # Visit a ImplicitNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_implicit_node(node); end

  # Visit a InNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_in_node(node); end

  # Visit a InstanceVariableAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_instance_variable_and_write_node(node); end

  # Visit a InstanceVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_instance_variable_operator_write_node(node); end

  # Visit a InstanceVariableOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_instance_variable_or_write_node(node); end

  # Visit a InstanceVariableReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_instance_variable_read_node(node); end

  # Visit a InstanceVariableTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_instance_variable_target_node(node); end

  # Visit a InstanceVariableWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_instance_variable_write_node(node); end

  # Visit a IntegerNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_integer_node(node); end

  # Visit a InterpolatedMatchLastLineNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_interpolated_match_last_line_node(node); end

  # Visit a InterpolatedRegularExpressionNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_interpolated_regular_expression_node(node); end

  # Visit a InterpolatedStringNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_interpolated_string_node(node); end

  # Visit a InterpolatedSymbolNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_interpolated_symbol_node(node); end

  # Visit a InterpolatedXStringNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_interpolated_x_string_node(node); end

  # Visit a KeywordHashNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_keyword_hash_node(node); end

  # Visit a KeywordParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_keyword_parameter_node(node); end

  # Visit a KeywordRestParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_keyword_rest_parameter_node(node); end

  # Visit a LambdaNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_lambda_node(node); end

  # Visit a LocalVariableAndWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_local_variable_and_write_node(node); end

  # Visit a LocalVariableOperatorWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_local_variable_operator_write_node(node); end

  # Visit a LocalVariableOrWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_local_variable_or_write_node(node); end

  # Visit a LocalVariableReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_local_variable_read_node(node); end

  # Visit a LocalVariableTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_local_variable_target_node(node); end

  # Visit a LocalVariableWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_local_variable_write_node(node); end

  # Visit a MatchLastLineNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_match_last_line_node(node); end

  # Visit a MatchPredicateNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_match_predicate_node(node); end

  # Visit a MatchRequiredNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_match_required_node(node); end

  # Visit a MatchWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_match_write_node(node); end

  # Visit a MissingNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_missing_node(node); end

  # Visit a ModuleNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_module_node(node); end

  # Visit a MultiTargetNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_multi_target_node(node); end

  # Visit a MultiWriteNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_multi_write_node(node); end

  # Visit a NextNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_next_node(node); end

  # Visit a NilNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_nil_node(node); end

  # Visit a NoKeywordsParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_no_keywords_parameter_node(node); end

  # Visit a NumberedReferenceReadNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_numbered_reference_read_node(node); end

  # Visit a OptionalParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_optional_parameter_node(node); end

  # Visit a OrNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_or_node(node); end

  # Visit a ParametersNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_parameters_node(node); end

  # Visit a ParenthesesNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_parentheses_node(node); end

  # Visit a PinnedExpressionNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_pinned_expression_node(node); end

  # Visit a PinnedVariableNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_pinned_variable_node(node); end

  # Visit a PostExecutionNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_post_execution_node(node); end

  # Visit a PreExecutionNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_pre_execution_node(node); end

  # Visit a ProgramNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_program_node(node); end

  # Visit a RangeNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_range_node(node); end

  # Visit a RationalNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_rational_node(node); end

  # Visit a RedoNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_redo_node(node); end

  # Visit a RegularExpressionNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_regular_expression_node(node); end

  # Visit a RequiredDestructuredParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_required_destructured_parameter_node(node); end

  # Visit a RequiredParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_required_parameter_node(node); end

  # Visit a RescueModifierNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_rescue_modifier_node(node); end

  # Visit a RescueNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_rescue_node(node); end

  # Visit a RestParameterNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_rest_parameter_node(node); end

  # Visit a RetryNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_retry_node(node); end

  # Visit a ReturnNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_return_node(node); end

  # Visit a SelfNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_self_node(node); end

  # Visit a SingletonClassNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_singleton_class_node(node); end

  # Visit a SourceEncodingNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_source_encoding_node(node); end

  # Visit a SourceFileNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_source_file_node(node); end

  # Visit a SourceLineNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_source_line_node(node); end

  # Visit a SplatNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_splat_node(node); end

  # Visit a StatementsNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_statements_node(node); end

  # Visit a StringConcatNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_string_concat_node(node); end

  # Visit a StringNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_string_node(node); end

  # Visit a SuperNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_super_node(node); end

  # Visit a SymbolNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_symbol_node(node); end

  # Visit a TrueNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_true_node(node); end

  # Visit a UndefNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_undef_node(node); end

  # Visit a UnlessNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_unless_node(node); end

  # Visit a UntilNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_until_node(node); end

  # Visit a WhenNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_when_node(node); end

  # Visit a WhileNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_while_node(node); end

  # Visit a XStringNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_x_string_node(node); end

  # Visit a YieldNode node
  #
  # source://yarp//lib/prism/visitor.rb#22
  def visit_yield_node(node); end
end

# Represents the use of the `when` keyword within a case statement.
#
#     case true
#     when true
#     ^^^^^^^^^
#     end
#
# source://yarp//lib/prism/node.rb#14028
class Prism::WhenNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, conditions: Array[Node], statements: StatementsNode?, location: Location) -> void
  #
  # @return [WhenNode] a new instance of WhenNode
  #
  # source://yarp//lib/prism/node.rb#14039
  def initialize(keyword_loc, conditions, statements, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#14047
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14052
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#14065
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#14057
  def compact_child_nodes; end

  # attr_reader conditions: Array[Node]
  #
  # source://yarp//lib/prism/node.rb#14033
  def conditions; end

  # def copy: (**params) -> WhenNode
  #
  # source://yarp//lib/prism/node.rb#14070
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14052
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#14083
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#14092
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#14088
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#14030
  def keyword_loc; end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#14036
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#14119
  def type; end
end

# Represents the use of the `while` keyword, either in the block form or the modifier form.
#
#     bar while foo
#     ^^^^^^^^^^^^^
#
#     while foo do bar end
#     ^^^^^^^^^^^^^^^^^^^^
#
# source://yarp//lib/prism/node.rb#14131
class Prism::WhileNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, closing_loc: Location?, predicate: Node, statements: StatementsNode?, flags: Integer, location: Location) -> void
  #
  # @return [WhileNode] a new instance of WhileNode
  #
  # source://yarp//lib/prism/node.rb#14148
  def initialize(keyword_loc, closing_loc, predicate, statements, flags, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#14158
  def accept(visitor); end

  # def begin_modifier?: () -> bool
  #
  # @return [Boolean]
  #
  # source://yarp//lib/prism/node.rb#14215
  def begin_modifier?; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14167
  def child_nodes; end

  # def closing: () -> String?
  #
  # source://yarp//lib/prism/node.rb#14210
  def closing; end

  # attr_reader closing_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#14136
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#14180
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#14172
  def compact_child_nodes; end

  # def copy: (**params) -> WhileNode
  #
  # source://yarp//lib/prism/node.rb#14185
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14167
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#14200
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#14219
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#14205
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#14133
  def keyword_loc; end

  # attr_reader predicate: Node
  #
  # source://yarp//lib/prism/node.rb#14139
  def predicate; end

  # source://yarp//lib/prism/node.rb#14162
  def set_newline_flag(newline_marked); end

  # attr_reader statements: StatementsNode?
  #
  # source://yarp//lib/prism/node.rb#14142
  def statements; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#14250
  def type; end

  private

  # Returns the value of attribute flags.
  #
  # source://yarp//lib/prism/node.rb#14145
  def flags; end
end

# Represents an xstring literal with no interpolation.
#
#     `foo`
#     ^^^^^
#
# source://yarp//lib/prism/node.rb#14259
class Prism::XStringNode < ::Prism::Node
  # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, location: Location) -> void
  #
  # @return [XStringNode] a new instance of XStringNode
  #
  # source://yarp//lib/prism/node.rb#14273
  def initialize(opening_loc, content_loc, closing_loc, unescaped, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#14282
  def accept(visitor); end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14287
  def child_nodes; end

  # def closing: () -> String
  #
  # source://yarp//lib/prism/node.rb#14331
  def closing; end

  # attr_reader closing_loc: Location
  #
  # source://yarp//lib/prism/node.rb#14267
  def closing_loc; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#14297
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#14292
  def compact_child_nodes; end

  # def content: () -> String
  #
  # source://yarp//lib/prism/node.rb#14326
  def content; end

  # attr_reader content_loc: Location
  #
  # source://yarp//lib/prism/node.rb#14264
  def content_loc; end

  # def copy: (**params) -> XStringNode
  #
  # source://yarp//lib/prism/node.rb#14302
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14287
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#14316
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#14335
  def inspect(inspector = T.unsafe(nil)); end

  # def opening: () -> String
  #
  # source://yarp//lib/prism/node.rb#14321
  def opening; end

  # attr_reader opening_loc: Location
  #
  # source://yarp//lib/prism/node.rb#14261
  def opening_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#14358
  def type; end

  # attr_reader unescaped: String
  #
  # source://yarp//lib/prism/node.rb#14270
  def unescaped; end
end

# Represents the use of the `yield` keyword.
#
#     yield 1
#     ^^^^^^^
#
# source://yarp//lib/prism/node.rb#14367
class Prism::YieldNode < ::Prism::Node
  # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: ArgumentsNode?, rparen_loc: Location?, location: Location) -> void
  #
  # @return [YieldNode] a new instance of YieldNode
  #
  # source://yarp//lib/prism/node.rb#14381
  def initialize(keyword_loc, lparen_loc, arguments, rparen_loc, location); end

  # def accept: (visitor: Visitor) -> void
  #
  # source://yarp//lib/prism/node.rb#14390
  def accept(visitor); end

  # attr_reader arguments: ArgumentsNode?
  #
  # source://yarp//lib/prism/node.rb#14375
  def arguments; end

  # def child_nodes: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14395
  def child_nodes; end

  # def comment_targets: () -> Array[Node | Location]
  #
  # source://yarp//lib/prism/node.rb#14407
  def comment_targets; end

  # def compact_child_nodes: () -> Array[Node]
  #
  # source://yarp//lib/prism/node.rb#14400
  def compact_child_nodes; end

  # def copy: (**params) -> YieldNode
  #
  # source://yarp//lib/prism/node.rb#14412
  def copy(**params); end

  # def child_nodes: () -> Array[nil | Node]
  # def deconstruct: () -> Array[nil | Node]
  #
  # source://yarp//lib/prism/node.rb#14395
  def deconstruct; end

  # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
  #
  # source://yarp//lib/prism/node.rb#14426
  def deconstruct_keys(keys); end

  # source://yarp//lib/prism/node.rb#14445
  def inspect(inspector = T.unsafe(nil)); end

  # def keyword: () -> String
  #
  # source://yarp//lib/prism/node.rb#14431
  def keyword; end

  # attr_reader keyword_loc: Location
  #
  # source://yarp//lib/prism/node.rb#14369
  def keyword_loc; end

  # def lparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#14436
  def lparen; end

  # attr_reader lparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#14372
  def lparen_loc; end

  # def rparen: () -> String?
  #
  # source://yarp//lib/prism/node.rb#14441
  def rparen; end

  # attr_reader rparen_loc: Location?
  #
  # source://yarp//lib/prism/node.rb#14378
  def rparen_loc; end

  # Sometimes you want to check an instance of a node against a list of
  # classes to see what kind of behavior to perform. Usually this is done by
  # calling `[cls1, cls2].include?(node.class)` or putting the node into a
  # case statement and doing `case node; when cls1; when cls2; end`. Both of
  # these approaches are relatively slow because of the constant lookups,
  # method calls, and/or array allocations.
  #
  # Instead, you can call #type, which will return to you a symbol that you
  # can use for comparison. This is faster than the other approaches because
  # it uses a single integer comparison, but also because if you're on CRuby
  # you can take advantage of the fact that case statements with all symbol
  # keys will use a jump table.
  #
  # def type: () -> Symbol
  #
  # source://yarp//lib/prism/node.rb#14473
  def type; end
end

# source://yarp//lib/yarp.rb#4
YARP = Prism
