summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-08-17 14:39:04 -0700
committerGitHub <noreply@github.com>2023-08-17 14:39:04 -0700
commit67b5f63e97eff714d2a028b593ac602515cdc1f1 (patch)
tree222d91e6a2c5a1b5db149329fe4ea0a7355fdd38 /lib
parent5d48825d55bedd1d0d9f975efa01cfc443b2451c (diff)
Render YARP templates in the build process (#8228)
Notes
Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/yarp/node.rb7480
-rw-r--r--lib/yarp/serialize.rb582
2 files changed, 0 insertions, 8062 deletions
diff --git a/lib/yarp/node.rb b/lib/yarp/node.rb
deleted file mode 100644
index b01d9ed24b..0000000000
--- a/lib/yarp/node.rb
+++ /dev/null
@@ -1,7480 +0,0 @@
-# frozen_string_literal: true
-=begin
-This file is generated by the bin/template script and should not be
-modified manually. See templates/lib/yarp/node.rb.erb
-if you are looking to modify the template
-=end
-
-module YARP
- # Represents the use of the `alias` keyword.
- #
- # alias foo bar
- # ^^^^^^^^^^^^^
- class AliasNode < Node
- # attr_reader new_name: Node
- attr_reader :new_name
-
- # attr_reader old_name: Node
- attr_reader :old_name
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # def initialize: (new_name: Node, old_name: Node, keyword_loc: Location, location: Location) -> void
- def initialize(new_name, old_name, keyword_loc, location)
- @new_name = new_name
- @old_name = old_name
- @keyword_loc = keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_alias_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [new_name, old_name]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { new_name: new_name, old_name: old_name, keyword_loc: keyword_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
- end
-
- # Represents an alternation pattern in pattern matching.
- #
- # foo => bar | baz
- # ^^^^^^^^^
- class AlternationPatternNode < Node
- # attr_reader left: Node
- attr_reader :left
-
- # attr_reader right: Node
- attr_reader :right
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void
- def initialize(left, right, operator_loc, location)
- @left = left
- @right = right
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_alternation_pattern_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [left, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { left: left, right: right, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `&&` operator or the `and` keyword.
- #
- # left and right
- # ^^^^^^^^^^^^^^
- class AndNode < Node
- # attr_reader left: Node
- attr_reader :left
-
- # attr_reader right: Node
- attr_reader :right
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void
- def initialize(left, right, operator_loc, location)
- @left = left
- @right = right
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_and_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [left, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { left: left, right: right, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents a set of arguments to a method or a keyword.
- #
- # return foo, bar, baz
- # ^^^^^^^^^^^^^
- class ArgumentsNode < Node
- # attr_reader arguments: Array[Node]
- attr_reader :arguments
-
- # def initialize: (arguments: Array[Node], location: Location) -> void
- def initialize(arguments, location)
- @arguments = arguments
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_arguments_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*arguments]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { arguments: arguments, location: location }
- 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]
- # ^^^^^^^^^
- class ArrayNode < Node
- # attr_reader elements: Array[Node]
- attr_reader :elements
-
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (elements: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void
- def initialize(elements, opening_loc, closing_loc, location)
- @elements = elements
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_array_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*elements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { elements: elements, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- 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]
- # ^^^^^^^^^^^^^^^^^^^
- class ArrayPatternNode < Node
- # attr_reader constant: Node?
- attr_reader :constant
-
- # attr_reader requireds: Array[Node]
- attr_reader :requireds
-
- # attr_reader rest: Node?
- attr_reader :rest
-
- # attr_reader posts: Array[Node]
- attr_reader :posts
-
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (constant: Node?, requireds: Array[Node], rest: Node?, posts: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void
- def initialize(constant, requireds, rest, posts, opening_loc, closing_loc, location)
- @constant = constant
- @requireds = requireds
- @rest = rest
- @posts = posts
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_array_pattern_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [constant, *requireds, rest, *posts]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant: constant, requireds: requireds, rest: rest, posts: posts, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents a hash key/value pair.
- #
- # { a => b }
- # ^^^^^^
- class AssocNode < Node
- # attr_reader key: Node
- attr_reader :key
-
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # def initialize: (key: Node, value: Node?, operator_loc: Location?, location: Location) -> void
- def initialize(key, value, operator_loc, location)
- @key = key
- @value = value
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_assoc_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [key, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { key: key, value: value, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents a splat in a hash literal.
- #
- # { **foo }
- # ^^^^^
- class AssocSplatNode < Node
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (value: Node?, operator_loc: Location, location: Location) -> void
- def initialize(value, operator_loc, location)
- @value = value
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_assoc_splat_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { value: value, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents reading a reference to a field in the previous match.
- #
- # $'
- # ^^
- class BackReferenceReadNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_back_reference_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents a begin statement.
- #
- # begin
- # foo
- # end
- # ^^^^^
- class BeginNode < Node
- # attr_reader begin_keyword_loc: Location?
- attr_reader :begin_keyword_loc
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader rescue_clause: Node?
- attr_reader :rescue_clause
-
- # attr_reader else_clause: Node?
- attr_reader :else_clause
-
- # attr_reader ensure_clause: Node?
- attr_reader :ensure_clause
-
- # attr_reader end_keyword_loc: Location?
- attr_reader :end_keyword_loc
-
- # def initialize: (begin_keyword_loc: Location?, statements: Node?, rescue_clause: Node?, else_clause: Node?, ensure_clause: Node?, end_keyword_loc: Location?, location: Location) -> void
- def initialize(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location)
- @begin_keyword_loc = begin_keyword_loc
- @statements = statements
- @rescue_clause = rescue_clause
- @else_clause = else_clause
- @ensure_clause = ensure_clause
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_begin_node(self)
- end
-
- def set_newline_flag(newline_marked)
- # Never mark BeginNode with a newline flag, mark children instead
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements, rescue_clause, else_clause, ensure_clause]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { begin_keyword_loc: begin_keyword_loc, statements: statements, rescue_clause: rescue_clause, else_clause: else_clause, ensure_clause: ensure_clause, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def begin_keyword: () -> String?
- def begin_keyword
- begin_keyword_loc&.slice
- end
-
- # def end_keyword: () -> String?
- def end_keyword
- end_keyword_loc&.slice
- end
- end
-
- # Represents block method arguments.
- #
- # bar(&args)
- # ^^^^^^^^^^
- class BlockArgumentNode < Node
- # attr_reader expression: Node?
- attr_reader :expression
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (expression: Node?, operator_loc: Location, location: Location) -> void
- def initialize(expression, operator_loc, location)
- @expression = expression
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_block_argument_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [expression]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { expression: expression, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents a block of ruby code.
- #
- # [1, 2, 3].each { |i| puts x }
- # ^^^^^^^^^^^^^^
- class BlockNode < Node
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader parameters: Node?
- attr_reader :parameters
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (locals: Array[Symbol], parameters: Node?, statements: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void
- def initialize(locals, parameters, statements, opening_loc, closing_loc, location)
- @locals = locals
- @parameters = parameters
- @statements = statements
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_block_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [parameters, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { locals: locals, parameters: parameters, statements: statements, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents a block parameter to a method, block, or lambda definition.
- #
- # def a(&b)
- # ^^
- # end
- class BlockParameterNode < Node
- # attr_reader name_loc: Location?
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (name_loc: Location?, operator_loc: Location, location: Location) -> void
- def initialize(name_loc, operator_loc, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_block_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, location: location }
- end
-
- # def name: () -> String?
- def name
- name_loc&.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents a block's parameters declaration.
- #
- # -> (a, b = 1; local) { }
- # ^^^^^^^^^^^^^^^^^
- #
- # foo do |a, b = 1; local|
- # ^^^^^^^^^^^^^^^^^
- # end
- class BlockParametersNode < Node
- # attr_reader parameters: Node?
- attr_reader :parameters
-
- # attr_reader locals: Array[Location]
- attr_reader :locals
-
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (parameters: Node?, locals: Array[Location], opening_loc: Location?, closing_loc: Location?, location: Location) -> void
- def initialize(parameters, locals, opening_loc, closing_loc, location)
- @parameters = parameters
- @locals = locals
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_block_parameters_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [parameters]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { parameters: parameters, locals: locals, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents the use of the `break` keyword.
- #
- # break foo
- # ^^^^^^^^^
- class BreakNode < Node
- # attr_reader arguments: Node?
- attr_reader :arguments
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # def initialize: (arguments: Node?, keyword_loc: Location, location: Location) -> void
- def initialize(arguments, keyword_loc, location)
- @arguments = arguments
- @keyword_loc = keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_break_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [arguments]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { arguments: arguments, keyword_loc: keyword_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
- end
-
- # Represents a method call, in all of the various forms that can take.
- #
- # foo
- # ^^^
- #
- # foo()
- # ^^^^^
- #
- # +foo
- # ^^^^
- #
- # foo + bar
- # ^^^^^^^^^
- #
- # foo.bar
- # ^^^^^^^
- #
- # foo&.bar
- # ^^^^^^^^
- class CallNode < Node
- # attr_reader receiver: Node?
- attr_reader :receiver
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # attr_reader message_loc: Location?
- attr_reader :message_loc
-
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader arguments: Node?
- attr_reader :arguments
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # attr_reader block: Node?
- attr_reader :block
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # attr_reader name: String
- attr_reader :name
-
- # def initialize: (receiver: Node?, operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: Node?, closing_loc: Location?, block: Node?, flags: Integer, name: String, location: Location) -> void
- def initialize(receiver, operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location)
- @receiver = receiver
- @operator_loc = operator_loc
- @message_loc = message_loc
- @opening_loc = opening_loc
- @arguments = arguments
- @closing_loc = closing_loc
- @block = block
- @flags = flags
- @name = name
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_call_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [receiver, arguments, block]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { receiver: receiver, operator_loc: operator_loc, message_loc: message_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block, flags: flags, name: name, location: location }
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
-
- # def message: () -> String?
- def message
- message_loc&.slice
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
-
- # def safe_navigation?: () -> bool
- def safe_navigation?
- flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
- end
-
- # def variable_call?: () -> bool
- def variable_call?
- flags.anybits?(CallNodeFlags::VARIABLE_CALL)
- end
- end
-
- # Represents the use of the `&&=` operator on a call.
- #
- # foo.bar &&= value
- # ^^^^^^^^^^^^^^^^^
- class CallOperatorAndWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (target: Node, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(target, operator_loc, value, location)
- @target = target
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_call_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator on a call.
- #
- # foo.bar ||= value
- # ^^^^^^^^^^^^^^^^^
- class CallOperatorOrWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (target: Node, value: Node, operator_loc: Location, location: Location) -> void
- def initialize(target, value, operator_loc, location)
- @target = target
- @value = value
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_call_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, value: value, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of an assignment operator on a call.
- #
- # foo.bar += baz
- # ^^^^^^^^^^^^^^
- class CallOperatorWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator_id: Symbol
- attr_reader :operator_id
-
- # def initialize: (target: Node, operator_loc: Location, value: Node, operator_id: Symbol, location: Location) -> void
- def initialize(target, operator_loc, value, operator_id, location)
- @target = target
- @operator_loc = operator_loc
- @value = value
- @operator_id = operator_id
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_call_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, operator_loc: operator_loc, value: value, operator_id: operator_id, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to a local variable in pattern matching.
- #
- # foo => [bar => baz]
- # ^^^^^^^^^^^^
- class CapturePatternNode < Node
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (value: Node, target: Node, operator_loc: Location, location: Location) -> void
- def initialize(value, target, operator_loc, location)
- @value = value
- @target = target
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_capture_pattern_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value, target]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { value: value, target: target, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of a case statement.
- #
- # case true
- # ^^^^^^^^^
- # when false
- # end
- class CaseNode < Node
- # attr_reader predicate: Node?
- attr_reader :predicate
-
- # attr_reader conditions: Array[Node]
- attr_reader :conditions
-
- # attr_reader consequent: Node?
- attr_reader :consequent
-
- # attr_reader case_keyword_loc: Location
- attr_reader :case_keyword_loc
-
- # attr_reader end_keyword_loc: Location
- attr_reader :end_keyword_loc
-
- # def initialize: (predicate: Node?, conditions: Array[Node], consequent: Node?, case_keyword_loc: Location, end_keyword_loc: Location, location: Location) -> void
- def initialize(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location)
- @predicate = predicate
- @conditions = conditions
- @consequent = consequent
- @case_keyword_loc = case_keyword_loc
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_case_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [predicate, *conditions, consequent]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { predicate: predicate, conditions: conditions, consequent: consequent, case_keyword_loc: case_keyword_loc, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def case_keyword: () -> String
- def case_keyword
- case_keyword_loc.slice
- end
-
- # def end_keyword: () -> String
- def end_keyword
- end_keyword_loc.slice
- end
- end
-
- # Represents a class declaration involving the `class` keyword.
- #
- # class Foo end
- # ^^^^^^^^^^^^^
- class ClassNode < Node
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader class_keyword_loc: Location
- attr_reader :class_keyword_loc
-
- # attr_reader constant_path: Node
- attr_reader :constant_path
-
- # attr_reader inheritance_operator_loc: Location?
- attr_reader :inheritance_operator_loc
-
- # attr_reader superclass: Node?
- attr_reader :superclass
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader end_keyword_loc: Location
- attr_reader :end_keyword_loc
-
- # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, constant_path: Node, inheritance_operator_loc: Location?, superclass: Node?, statements: Node?, end_keyword_loc: Location, location: Location) -> void
- def initialize(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, statements, end_keyword_loc, location)
- @locals = locals
- @class_keyword_loc = class_keyword_loc
- @constant_path = constant_path
- @inheritance_operator_loc = inheritance_operator_loc
- @superclass = superclass
- @statements = statements
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_class_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [constant_path, superclass, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { locals: locals, class_keyword_loc: class_keyword_loc, constant_path: constant_path, inheritance_operator_loc: inheritance_operator_loc, superclass: superclass, statements: statements, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def class_keyword: () -> String
- def class_keyword
- class_keyword_loc.slice
- end
-
- # def inheritance_operator: () -> String?
- def inheritance_operator
- inheritance_operator_loc&.slice
- end
-
- # def end_keyword: () -> String
- def end_keyword
- end_keyword_loc.slice
- end
- end
-
- # Represents the use of the `&&=` operator for assignment to a class variable.
- #
- # @@target &&= value
- # ^^^^^^^^^^^^^^^^
- class ClassVariableOperatorAndWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_class_variable_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator for assignment to a class variable.
- #
- # @@target ||= value
- # ^^^^^^^^^^^^^^^^^^
- class ClassVariableOperatorOrWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_class_variable_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to a class variable using an operator that isn't `=`.
- #
- # @@target += value
- # ^^^^^^^^^^^^^^^^^
- class ClassVariableOperatorWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator: Symbol
- attr_reader :operator
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, operator, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @operator = operator
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_class_variable_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, operator: operator, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
- end
-
- # Represents referencing a class variable.
- #
- # @@foo
- # ^^^^^
- class ClassVariableReadNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_class_variable_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents writing to a class variable.
- #
- # @@foo = 1
- # ^^^^^^^^^
- class ClassVariableWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # def initialize: (name_loc: Location, value: Node?, operator_loc: Location?, location: Location) -> void
- def initialize(name_loc, value, operator_loc, location)
- @name_loc = name_loc
- @value = value
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_class_variable_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, value: value, operator_loc: operator_loc, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents the use of the `&&=` operator for assignment to a constant.
- #
- # Target &&= value
- # ^^^^^^^^^^^^^^^^
- class ConstantOperatorAndWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator for assignment to a constant.
- #
- # Target ||= value
- # ^^^^^^^^^^^^^^^^
- class ConstantOperatorOrWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to a constant using an operator that isn't `=`.
- #
- # Target += value
- # ^^^^^^^^^^^^^^^
- class ConstantOperatorWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator: Symbol
- attr_reader :operator
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, operator, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @operator = operator
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, operator: operator, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
- end
-
- # Represents accessing a constant through a path of `::` operators.
- #
- # Foo::Bar
- # ^^^^^^^^
- class ConstantPathNode < Node
- # attr_reader parent: Node?
- attr_reader :parent
-
- # attr_reader child: Node
- attr_reader :child
-
- # attr_reader delimiter_loc: Location
- attr_reader :delimiter_loc
-
- # def initialize: (parent: Node?, child: Node, delimiter_loc: Location, location: Location) -> void
- def initialize(parent, child, delimiter_loc, location)
- @parent = parent
- @child = child
- @delimiter_loc = delimiter_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_path_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [parent, child]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { parent: parent, child: child, delimiter_loc: delimiter_loc, location: location }
- end
-
- # def delimiter: () -> String
- def delimiter
- delimiter_loc.slice
- end
- end
-
- # Represents the use of the `&&=` operator for assignment to a constant path.
- #
- # Parent::Child &&= value
- # ^^^^^^^^^^^^^^^^^^^^^^^
- class ConstantPathOperatorAndWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (target: Node, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(target, operator_loc, value, location)
- @target = target
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_path_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator for assignment to a constant path.
- #
- # Parent::Child ||= value
- # ^^^^^^^^^^^^^^^^^^^^^^^
- class ConstantPathOperatorOrWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (target: Node, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(target, operator_loc, value, location)
- @target = target
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_path_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to a constant path using an operator that isn't `=`.
- #
- # Parent::Child += value
- # ^^^^^^^^^^^^^^^^^^^^^^
- class ConstantPathOperatorWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator: Symbol
- attr_reader :operator
-
- # def initialize: (target: Node, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
- def initialize(target, operator_loc, value, operator, location)
- @target = target
- @operator_loc = operator_loc
- @value = value
- @operator = operator
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_path_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, operator_loc: operator_loc, value: value, operator: operator, location: location }
- end
- end
-
- # Represents writing to a constant path.
- #
- # ::Foo = 1
- # ^^^^^^^^^
- #
- # Foo::Bar = 1
- # ^^^^^^^^^^^^
- #
- # ::Foo::Bar = 1
- # ^^^^^^^^^^^^^^
- class ConstantPathWriteNode < Node
- # attr_reader target: Node
- attr_reader :target
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # def initialize: (target: Node, operator_loc: Location?, value: Node?, location: Location) -> void
- def initialize(target, operator_loc, value, location)
- @target = target
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_path_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [target, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { target: target, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents referencing a constant.
- #
- # Foo
- # ^^^
- class ConstantReadNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents writing to a constant.
- #
- # Foo = 1
- # ^^^^^^^
- class ConstantWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # def initialize: (name_loc: Location, value: Node?, operator_loc: Location?, location: Location) -> void
- def initialize(name_loc, value, operator_loc, location)
- @name_loc = name_loc
- @value = value
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_constant_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, value: value, operator_loc: operator_loc, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents a method definition.
- #
- # def method
- # end
- # ^^^^^^^^^^
- class DefNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader receiver: Node?
- attr_reader :receiver
-
- # attr_reader parameters: Node?
- attr_reader :parameters
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader def_keyword_loc: Location
- attr_reader :def_keyword_loc
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # attr_reader lparen_loc: Location?
- attr_reader :lparen_loc
-
- # attr_reader rparen_loc: Location?
- attr_reader :rparen_loc
-
- # attr_reader equal_loc: Location?
- attr_reader :equal_loc
-
- # attr_reader end_keyword_loc: Location?
- attr_reader :end_keyword_loc
-
- # def initialize: (name_loc: Location, receiver: Node?, parameters: Node?, statements: 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
- def initialize(name_loc, receiver, parameters, statements, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location)
- @name_loc = name_loc
- @receiver = receiver
- @parameters = parameters
- @statements = statements
- @locals = locals
- @def_keyword_loc = def_keyword_loc
- @operator_loc = operator_loc
- @lparen_loc = lparen_loc
- @rparen_loc = rparen_loc
- @equal_loc = equal_loc
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_def_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [receiver, parameters, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, receiver: receiver, parameters: parameters, statements: statements, locals: locals, def_keyword_loc: def_keyword_loc, operator_loc: operator_loc, lparen_loc: lparen_loc, rparen_loc: rparen_loc, equal_loc: equal_loc, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def def_keyword: () -> String
- def def_keyword
- def_keyword_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
-
- # def lparen: () -> String?
- def lparen
- lparen_loc&.slice
- end
-
- # def rparen: () -> String?
- def rparen
- rparen_loc&.slice
- end
-
- # def equal: () -> String?
- def equal
- equal_loc&.slice
- end
-
- # def end_keyword: () -> String?
- def end_keyword
- end_keyword_loc&.slice
- end
- end
-
- # Represents the use of the `defined?` keyword.
- #
- # defined?(a)
- # ^^^^^^^^^^^
- class DefinedNode < Node
- # attr_reader lparen_loc: Location?
- attr_reader :lparen_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader rparen_loc: Location?
- attr_reader :rparen_loc
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # def initialize: (lparen_loc: Location?, value: Node, rparen_loc: Location?, keyword_loc: Location, location: Location) -> void
- def initialize(lparen_loc, value, rparen_loc, keyword_loc, location)
- @lparen_loc = lparen_loc
- @value = value
- @rparen_loc = rparen_loc
- @keyword_loc = keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_defined_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { lparen_loc: lparen_loc, value: value, rparen_loc: rparen_loc, keyword_loc: keyword_loc, location: location }
- end
-
- # def lparen: () -> String?
- def lparen
- lparen_loc&.slice
- end
-
- # def rparen: () -> String?
- def rparen
- rparen_loc&.slice
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
- end
-
- # Represents an `else` clause in a `case`, `if`, or `unless` statement.
- #
- # if a then b else c end
- # ^^^^^^^^^^
- class ElseNode < Node
- # attr_reader else_keyword_loc: Location
- attr_reader :else_keyword_loc
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader end_keyword_loc: Location?
- attr_reader :end_keyword_loc
-
- # def initialize: (else_keyword_loc: Location, statements: Node?, end_keyword_loc: Location?, location: Location) -> void
- def initialize(else_keyword_loc, statements, end_keyword_loc, location)
- @else_keyword_loc = else_keyword_loc
- @statements = statements
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_else_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { else_keyword_loc: else_keyword_loc, statements: statements, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def else_keyword: () -> String
- def else_keyword
- else_keyword_loc.slice
- end
-
- # def end_keyword: () -> String?
- def end_keyword
- end_keyword_loc&.slice
- end
- end
-
- # Represents an interpolated set of statements.
- #
- # "foo #{bar}"
- # ^^^^^^
- class EmbeddedStatementsNode < Node
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (opening_loc: Location, statements: Node?, closing_loc: Location, location: Location) -> void
- def initialize(opening_loc, statements, closing_loc, location)
- @opening_loc = opening_loc
- @statements = statements
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_embedded_statements_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, statements: statements, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents an interpolated variable.
- #
- # "foo #@bar"
- # ^^^^^
- class EmbeddedVariableNode < Node
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader variable: Node
- attr_reader :variable
-
- # def initialize: (operator_loc: Location, variable: Node, location: Location) -> void
- def initialize(operator_loc, variable, location)
- @operator_loc = operator_loc
- @variable = variable
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_embedded_variable_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [variable]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { operator_loc: operator_loc, variable: variable, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents an `ensure` clause in a `begin` statement.
- #
- # begin
- # foo
- # ensure
- # ^^^^^^
- # bar
- # end
- class EnsureNode < Node
- # attr_reader ensure_keyword_loc: Location
- attr_reader :ensure_keyword_loc
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader end_keyword_loc: Location
- attr_reader :end_keyword_loc
-
- # def initialize: (ensure_keyword_loc: Location, statements: Node?, end_keyword_loc: Location, location: Location) -> void
- def initialize(ensure_keyword_loc, statements, end_keyword_loc, location)
- @ensure_keyword_loc = ensure_keyword_loc
- @statements = statements
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_ensure_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { ensure_keyword_loc: ensure_keyword_loc, statements: statements, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def ensure_keyword: () -> String
- def ensure_keyword
- ensure_keyword_loc.slice
- end
-
- # def end_keyword: () -> String
- def end_keyword
- end_keyword_loc.slice
- end
- end
-
- # Represents the use of the literal `false` keyword.
- #
- # false
- # ^^^^^
- class FalseNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_false_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- 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)
- # ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- class FindPatternNode < Node
- # attr_reader constant: Node?
- attr_reader :constant
-
- # attr_reader left: Node
- attr_reader :left
-
- # attr_reader requireds: Array[Node]
- attr_reader :requireds
-
- # attr_reader right: Node
- attr_reader :right
-
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (constant: Node?, left: Node, requireds: Array[Node], right: Node, opening_loc: Location?, closing_loc: Location?, location: Location) -> void
- def initialize(constant, left, requireds, right, opening_loc, closing_loc, location)
- @constant = constant
- @left = left
- @requireds = requireds
- @right = right
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_find_pattern_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [constant, left, *requireds, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant: constant, left: left, requireds: requireds, right: right, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents the use of the `..` or `...` operators to create flip flops.
- #
- # baz if foo .. bar
- # ^^^^^^^^^^
- class FlipFlopNode < Node
- # attr_reader left: Node?
- attr_reader :left
-
- # attr_reader right: Node?
- attr_reader :right
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void
- def initialize(left, right, operator_loc, flags, location)
- @left = left
- @right = right
- @operator_loc = operator_loc
- @flags = flags
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_flip_flop_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [left, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { left: left, right: right, operator_loc: operator_loc, flags: flags, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def exclude_end?: () -> bool
- def exclude_end?
- flags.anybits?(RangeFlags::EXCLUDE_END)
- end
- end
-
- # Represents a floating point number literal.
- #
- # 1.0
- # ^^^
- class FloatNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_float_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the `for` keyword.
- #
- # for i in a end
- # ^^^^^^^^^^^^^^
- class ForNode < Node
- # attr_reader index: Node
- attr_reader :index
-
- # attr_reader collection: Node
- attr_reader :collection
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader for_keyword_loc: Location
- attr_reader :for_keyword_loc
-
- # attr_reader in_keyword_loc: Location
- attr_reader :in_keyword_loc
-
- # attr_reader do_keyword_loc: Location?
- attr_reader :do_keyword_loc
-
- # attr_reader end_keyword_loc: Location
- attr_reader :end_keyword_loc
-
- # def initialize: (index: Node, collection: Node, statements: Node?, for_keyword_loc: Location, in_keyword_loc: Location, do_keyword_loc: Location?, end_keyword_loc: Location, location: Location) -> void
- def initialize(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location)
- @index = index
- @collection = collection
- @statements = statements
- @for_keyword_loc = for_keyword_loc
- @in_keyword_loc = in_keyword_loc
- @do_keyword_loc = do_keyword_loc
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_for_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [index, collection, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { index: index, collection: collection, statements: statements, for_keyword_loc: for_keyword_loc, in_keyword_loc: in_keyword_loc, do_keyword_loc: do_keyword_loc, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def for_keyword: () -> String
- def for_keyword
- for_keyword_loc.slice
- end
-
- # def in_keyword: () -> String
- def in_keyword
- in_keyword_loc.slice
- end
-
- # def do_keyword: () -> String?
- def do_keyword
- do_keyword_loc&.slice
- end
-
- # def end_keyword: () -> String
- def end_keyword
- end_keyword_loc.slice
- end
- end
-
- # Represents forwarding all arguments to this method to another method.
- #
- # def foo(...)
- # bar(...)
- # ^^^^^^^^
- # end
- class ForwardingArgumentsNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_forwarding_arguments_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the forwarding parameter in a method, block, or lambda declaration.
- #
- # def foo(...)
- # ^^^
- # end
- class ForwardingParameterNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_forwarding_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the `super` keyword without parentheses or arguments.
- #
- # super
- # ^^^^^
- class ForwardingSuperNode < Node
- # attr_reader block: Node?
- attr_reader :block
-
- # def initialize: (block: Node?, location: Location) -> void
- def initialize(block, location)
- @block = block
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_forwarding_super_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [block]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { block: block, location: location }
- end
- end
-
- # Represents the use of the `&&=` operator for assignment to a global variable.
- #
- # $target &&= value
- # ^^^^^^^^^^^^^^^^^
- class GlobalVariableOperatorAndWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_global_variable_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator for assignment to a global variable.
- #
- # $target ||= value
- # ^^^^^^^^^^^^^^^^^
- class GlobalVariableOperatorOrWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_global_variable_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to a global variable using an operator that isn't `=`.
- #
- # $target += value
- # ^^^^^^^^^^^^^^^^
- class GlobalVariableOperatorWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator: Symbol
- attr_reader :operator
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, operator, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @operator = operator
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_global_variable_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, operator: operator, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
- end
-
- # Represents referencing a global variable.
- #
- # $foo
- # ^^^^
- class GlobalVariableReadNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_global_variable_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents writing to a global variable.
- #
- # $foo = 1
- # ^^^^^^^^
- class GlobalVariableWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location?, value: Node?, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_global_variable_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents a hash literal.
- #
- # { a => b }
- # ^^^^^^^^^^
- class HashNode < Node
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader elements: Array[Node]
- attr_reader :elements
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (opening_loc: Location, elements: Array[Node], closing_loc: Location, location: Location) -> void
- def initialize(opening_loc, elements, closing_loc, location)
- @opening_loc = opening_loc
- @elements = elements
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_hash_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*elements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, elements: elements, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents a hash pattern in pattern matching.
- #
- # foo => { a: 1, b: 2 }
- # ^^^^^^^^^^^^^^
- #
- # foo => { a: 1, b: 2, **c }
- # ^^^^^^^^^^^^^^^^^^^
- class HashPatternNode < Node
- # attr_reader constant: Node?
- attr_reader :constant
-
- # attr_reader assocs: Array[Node]
- attr_reader :assocs
-
- # attr_reader kwrest: Node?
- attr_reader :kwrest
-
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (constant: Node?, assocs: Array[Node], kwrest: Node?, opening_loc: Location?, closing_loc: Location?, location: Location) -> void
- def initialize(constant, assocs, kwrest, opening_loc, closing_loc, location)
- @constant = constant
- @assocs = assocs
- @kwrest = kwrest
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_hash_pattern_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [constant, *assocs, kwrest]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant: constant, assocs: assocs, kwrest: kwrest, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- 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
- # ^^^^^^^^^^^^^^^^^^^
- class IfNode < Node
- # attr_reader if_keyword_loc: Location?
- attr_reader :if_keyword_loc
-
- # attr_reader predicate: Node
- attr_reader :predicate
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader consequent: Node?
- attr_reader :consequent
-
- # attr_reader end_keyword_loc: Location?
- attr_reader :end_keyword_loc
-
- # def initialize: (if_keyword_loc: Location?, predicate: Node, statements: Node?, consequent: Node?, end_keyword_loc: Location?, location: Location) -> void
- def initialize(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location)
- @if_keyword_loc = if_keyword_loc
- @predicate = predicate
- @statements = statements
- @consequent = consequent
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_if_node(self)
- end
-
- def set_newline_flag(newline_marked)
- predicate.set_newline_flag(newline_marked)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [predicate, statements, consequent]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { if_keyword_loc: if_keyword_loc, predicate: predicate, statements: statements, consequent: consequent, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def if_keyword: () -> String?
- def if_keyword
- if_keyword_loc&.slice
- end
-
- # def end_keyword: () -> String?
- def end_keyword
- end_keyword_loc&.slice
- end
- end
-
- # Represents an imaginary number literal.
- #
- # 1.0i
- # ^^^^
- class ImaginaryNode < Node
- # attr_reader numeric: Node
- attr_reader :numeric
-
- # def initialize: (numeric: Node, location: Location) -> void
- def initialize(numeric, location)
- @numeric = numeric
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_imaginary_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [numeric]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { numeric: numeric, location: location }
- end
- end
-
- # Represents the use of the `in` keyword in a case statement.
- #
- # case a; in b then c end
- # ^^^^^^^^^^^
- class InNode < Node
- # attr_reader pattern: Node
- attr_reader :pattern
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader in_loc: Location
- attr_reader :in_loc
-
- # attr_reader then_loc: Location?
- attr_reader :then_loc
-
- # def initialize: (pattern: Node, statements: Node?, in_loc: Location, then_loc: Location?, location: Location) -> void
- def initialize(pattern, statements, in_loc, then_loc, location)
- @pattern = pattern
- @statements = statements
- @in_loc = in_loc
- @then_loc = then_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_in_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [pattern, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { pattern: pattern, statements: statements, in_loc: in_loc, then_loc: then_loc, location: location }
- end
-
- # def in: () -> String
- def in
- in_loc.slice
- end
-
- # def then: () -> String?
- def then
- then_loc&.slice
- end
- end
-
- # Represents the use of the `&&=` operator for assignment to an instance variable.
- #
- # @target &&= value
- # ^^^^^^^^^^^^^^^^^
- class InstanceVariableOperatorAndWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_instance_variable_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator for assignment to an instance variable.
- #
- # @target ||= value
- # ^^^^^^^^^^^^^^^^^
- class InstanceVariableOperatorOrWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(name_loc, operator_loc, value, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_instance_variable_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to an instance variable using an operator that isn't `=`.
- #
- # @target += value
- # ^^^^^^^^^^^^^^^^
- class InstanceVariableOperatorWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader operator: Symbol
- attr_reader :operator
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, operator, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @operator = operator
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_instance_variable_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, operator: operator, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
- end
-
- # Represents referencing an instance variable.
- #
- # @foo
- # ^^^^
- class InstanceVariableReadNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_instance_variable_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents writing to an instance variable.
- #
- # @foo = 1
- # ^^^^^^^^
- class InstanceVariableWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # def initialize: (name_loc: Location, value: Node?, operator_loc: Location?, location: Location) -> void
- def initialize(name_loc, value, operator_loc, location)
- @name_loc = name_loc
- @value = value
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_instance_variable_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, value: value, operator_loc: operator_loc, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents an integer number literal.
- #
- # 1
- # ^
- class IntegerNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_integer_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents a regular expression literal that contains interpolation.
- #
- # /foo #{bar} baz/
- # ^^^^^^^^^^^^^^^^
- class InterpolatedRegularExpressionNode < Node
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader parts: Array[Node]
- attr_reader :parts
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, flags: Integer, location: Location) -> void
- def initialize(opening_loc, parts, closing_loc, flags, location)
- @opening_loc = opening_loc
- @parts = parts
- @closing_loc = closing_loc
- @flags = flags
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_interpolated_regular_expression_node(self)
- end
-
- def set_newline_flag(newline_marked)
- first = parts.first
- first.set_newline_flag(newline_marked) if first
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*parts]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, parts: parts, closing_loc: closing_loc, flags: flags, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
-
- # def ignore_case?: () -> bool
- def ignore_case?
- flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
- end
-
- # def multi_line?: () -> bool
- def multi_line?
- flags.anybits?(RegularExpressionFlags::MULTI_LINE)
- end
-
- # def extended?: () -> bool
- def extended?
- flags.anybits?(RegularExpressionFlags::EXTENDED)
- end
-
- # def euc_jp?: () -> bool
- def euc_jp?
- flags.anybits?(RegularExpressionFlags::EUC_JP)
- end
-
- # def ascii_8bit?: () -> bool
- def ascii_8bit?
- flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
- end
-
- # def windows_31j?: () -> bool
- def windows_31j?
- flags.anybits?(RegularExpressionFlags::WINDOWS_31J)
- end
-
- # def utf_8?: () -> bool
- def utf_8?
- flags.anybits?(RegularExpressionFlags::UTF_8)
- end
-
- # def once?: () -> bool
- def once?
- flags.anybits?(RegularExpressionFlags::ONCE)
- end
- end
-
- # Represents a string literal that contains interpolation.
- #
- # "foo #{bar} baz"
- # ^^^^^^^^^^^^^^^^
- class InterpolatedStringNode < Node
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader parts: Array[Node]
- attr_reader :parts
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void
- def initialize(opening_loc, parts, closing_loc, location)
- @opening_loc = opening_loc
- @parts = parts
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_interpolated_string_node(self)
- end
-
- def set_newline_flag(newline_marked)
- first = parts.first
- first.set_newline_flag(newline_marked) if first
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*parts]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, parts: parts, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents a symbol literal that contains interpolation.
- #
- # :"foo #{bar} baz"
- # ^^^^^^^^^^^^^^^^^
- class InterpolatedSymbolNode < Node
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader parts: Array[Node]
- attr_reader :parts
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void
- def initialize(opening_loc, parts, closing_loc, location)
- @opening_loc = opening_loc
- @parts = parts
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_interpolated_symbol_node(self)
- end
-
- def set_newline_flag(newline_marked)
- first = parts.first
- first.set_newline_flag(newline_marked) if first
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*parts]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, parts: parts, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents an xstring literal that contains interpolation.
- #
- # `foo #{bar} baz`
- # ^^^^^^^^^^^^^^^^
- class InterpolatedXStringNode < Node
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader parts: Array[Node]
- attr_reader :parts
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, location: Location) -> void
- def initialize(opening_loc, parts, closing_loc, location)
- @opening_loc = opening_loc
- @parts = parts
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_interpolated_x_string_node(self)
- end
-
- def set_newline_flag(newline_marked)
- first = parts.first
- first.set_newline_flag(newline_marked) if first
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*parts]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, parts: parts, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents a hash literal without opening and closing braces.
- #
- # foo(a: b)
- # ^^^^
- class KeywordHashNode < Node
- # attr_reader elements: Array[Node]
- attr_reader :elements
-
- # def initialize: (elements: Array[Node], location: Location) -> void
- def initialize(elements, location)
- @elements = elements
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_keyword_hash_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*elements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { elements: elements, location: location }
- end
- end
-
- # Represents a keyword parameter to a method, block, or lambda definition.
- #
- # def a(b:)
- # ^^
- # end
- #
- # def a(b: 1)
- # ^^^^
- # end
- class KeywordParameterNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # def initialize: (name_loc: Location, value: Node?, location: Location) -> void
- def initialize(name_loc, value, location)
- @name_loc = name_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_keyword_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
- end
-
- # Represents a keyword rest parameter to a method, block, or lambda definition.
- #
- # def a(**b)
- # ^^^
- # end
- class KeywordRestParameterNode < Node
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader name_loc: Location?
- attr_reader :name_loc
-
- # def initialize: (operator_loc: Location, name_loc: Location?, location: Location) -> void
- def initialize(operator_loc, name_loc, location)
- @operator_loc = operator_loc
- @name_loc = name_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_keyword_rest_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { operator_loc: operator_loc, name_loc: name_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def name: () -> String?
- def name
- name_loc&.slice
- end
- end
-
- # Represents using a lambda literal (not the lambda method call).
- #
- # ->(value) { value * 2 }
- # ^^^^^^^^^^^^^^^^^^^^^^^
- class LambdaNode < Node
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader parameters: Node?
- attr_reader :parameters
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # def initialize: (locals: Array[Symbol], opening_loc: Location, parameters: Node?, statements: Node?, location: Location) -> void
- def initialize(locals, opening_loc, parameters, statements, location)
- @locals = locals
- @opening_loc = opening_loc
- @parameters = parameters
- @statements = statements
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_lambda_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [parameters, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { locals: locals, opening_loc: opening_loc, parameters: parameters, statements: statements, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
- end
-
- # Represents the use of the `&&=` operator for assignment to a local variable.
- #
- # target &&= value
- # ^^^^^^^^^^^^^^^^
- class LocalVariableOperatorAndWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, constant_id: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, constant_id, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @constant_id = constant_id
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_local_variable_operator_and_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, constant_id: constant_id, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||=` operator for assignment to a local variable.
- #
- # target ||= value
- # ^^^^^^^^^^^^^^^^
- class LocalVariableOperatorOrWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, constant_id: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, constant_id, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @constant_id = constant_id
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_local_variable_operator_or_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, constant_id: constant_id, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents assigning to a local variable using an operator that isn't `=`.
- #
- # target += value
- # ^^^^^^^^^^^^^^^
- class LocalVariableOperatorWriteNode < Node
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # attr_reader operator_id: Symbol
- attr_reader :operator_id
-
- # def initialize: (name_loc: Location, operator_loc: Location, value: Node, constant_id: Symbol, operator_id: Symbol, location: Location) -> void
- def initialize(name_loc, operator_loc, value, constant_id, operator_id, location)
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @constant_id = constant_id
- @operator_id = operator_id
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_local_variable_operator_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { name_loc: name_loc, operator_loc: operator_loc, value: value, constant_id: constant_id, operator_id: operator_id, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- 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
- # ^^^
- class LocalVariableReadNode < Node
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # attr_reader depth: Integer
- attr_reader :depth
-
- # def initialize: (constant_id: Symbol, depth: Integer, location: Location) -> void
- def initialize(constant_id, depth, location)
- @constant_id = constant_id
- @depth = depth
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_local_variable_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant_id: constant_id, depth: depth, location: location }
- end
- end
-
- # Represents writing to a local variable.
- #
- # foo = 1
- # ^^^^^^^
- class LocalVariableWriteNode < Node
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # attr_reader depth: Integer
- attr_reader :depth
-
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # def initialize: (constant_id: Symbol, depth: Integer, value: Node?, name_loc: Location, operator_loc: Location?, location: Location) -> void
- def initialize(constant_id, depth, value, name_loc, operator_loc, location)
- @constant_id = constant_id
- @depth = depth
- @value = value
- @name_loc = name_loc
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_local_variable_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant_id: constant_id, depth: depth, value: value, name_loc: name_loc, operator_loc: operator_loc, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents the use of the modifier `in` operator.
- #
- # foo in bar
- # ^^^^^^^^^^
- class MatchPredicateNode < Node
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader pattern: Node
- attr_reader :pattern
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void
- def initialize(value, pattern, operator_loc, location)
- @value = value
- @pattern = pattern
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_match_predicate_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value, pattern]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { value: value, pattern: pattern, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `=>` operator.
- #
- # foo => bar
- # ^^^^^^^^^^
- class MatchRequiredNode < Node
- # attr_reader value: Node
- attr_reader :value
-
- # attr_reader pattern: Node
- attr_reader :pattern
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void
- def initialize(value, pattern, operator_loc, location)
- @value = value
- @pattern = pattern
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_match_required_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value, pattern]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { value: value, pattern: pattern, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents a node that is missing from the source and results in a syntax
- # error.
- class MissingNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_missing_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents a module declaration involving the `module` keyword.
- #
- # module Foo end
- # ^^^^^^^^^^^^^^
- class ModuleNode < Node
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader module_keyword_loc: Location
- attr_reader :module_keyword_loc
-
- # attr_reader constant_path: Node
- attr_reader :constant_path
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader end_keyword_loc: Location
- attr_reader :end_keyword_loc
-
- # def initialize: (locals: Array[Symbol], module_keyword_loc: Location, constant_path: Node, statements: Node?, end_keyword_loc: Location, location: Location) -> void
- def initialize(locals, module_keyword_loc, constant_path, statements, end_keyword_loc, location)
- @locals = locals
- @module_keyword_loc = module_keyword_loc
- @constant_path = constant_path
- @statements = statements
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_module_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [constant_path, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { locals: locals, module_keyword_loc: module_keyword_loc, constant_path: constant_path, statements: statements, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def module_keyword: () -> String
- def module_keyword
- module_keyword_loc.slice
- end
-
- # def end_keyword: () -> String
- def end_keyword
- end_keyword_loc.slice
- end
- end
-
- # Represents a multi-target expression.
- #
- # a, b, c = 1, 2, 3
- # ^^^^^^^^^^^^^^^^^
- class MultiWriteNode < Node
- # attr_reader targets: Array[Node]
- attr_reader :targets
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # attr_reader value: Node?
- attr_reader :value
-
- # attr_reader lparen_loc: Location?
- attr_reader :lparen_loc
-
- # attr_reader rparen_loc: Location?
- attr_reader :rparen_loc
-
- # def initialize: (targets: Array[Node], operator_loc: Location?, value: Node?, lparen_loc: Location?, rparen_loc: Location?, location: Location) -> void
- def initialize(targets, operator_loc, value, lparen_loc, rparen_loc, location)
- @targets = targets
- @operator_loc = operator_loc
- @value = value
- @lparen_loc = lparen_loc
- @rparen_loc = rparen_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_multi_write_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*targets, value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { targets: targets, operator_loc: operator_loc, value: value, lparen_loc: lparen_loc, rparen_loc: rparen_loc, location: location }
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
-
- # def lparen: () -> String?
- def lparen
- lparen_loc&.slice
- end
-
- # def rparen: () -> String?
- def rparen
- rparen_loc&.slice
- end
- end
-
- # Represents the use of the `next` keyword.
- #
- # next 1
- # ^^^^^^
- class NextNode < Node
- # attr_reader arguments: Node?
- attr_reader :arguments
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # def initialize: (arguments: Node?, keyword_loc: Location, location: Location) -> void
- def initialize(arguments, keyword_loc, location)
- @arguments = arguments
- @keyword_loc = keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_next_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [arguments]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { arguments: arguments, keyword_loc: keyword_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
- end
-
- # Represents the use of the `nil` keyword.
- #
- # nil
- # ^^^
- class NilNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_nil_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of `**nil` inside method arguments.
- #
- # def a(**nil)
- # ^^^^^
- # end
- class NoKeywordsParameterNode < Node
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # def initialize: (operator_loc: Location, keyword_loc: Location, location: Location) -> void
- def initialize(operator_loc, keyword_loc, location)
- @operator_loc = operator_loc
- @keyword_loc = keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_no_keywords_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { operator_loc: operator_loc, keyword_loc: keyword_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
- end
-
- # Represents reading a numbered reference to a capture in the previous match.
- #
- # $1
- # ^^
- class NumberedReferenceReadNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_numbered_reference_read_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents an optional parameter to a method, block, or lambda definition.
- #
- # def a(b = 1)
- # ^^^^^
- # end
- class OptionalParameterNode < Node
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # attr_reader name_loc: Location
- attr_reader :name_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader value: Node
- attr_reader :value
-
- # def initialize: (constant_id: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void
- def initialize(constant_id, name_loc, operator_loc, value, location)
- @constant_id = constant_id
- @name_loc = name_loc
- @operator_loc = operator_loc
- @value = value
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_optional_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [value]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant_id: constant_id, name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
- end
-
- # def name: () -> String
- def name
- name_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `||` operator or the `or` keyword.
- #
- # left or right
- # ^^^^^^^^^^^^^
- class OrNode < Node
- # attr_reader left: Node
- attr_reader :left
-
- # attr_reader right: Node
- attr_reader :right
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void
- def initialize(left, right, operator_loc, location)
- @left = left
- @right = right
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_or_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [left, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { left: left, right: right, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the list of parameters on a method, block, or lambda definition.
- #
- # def a(b, c, d)
- # ^^^^^^^
- # end
- class ParametersNode < Node
- # attr_reader requireds: Array[Node]
- attr_reader :requireds
-
- # attr_reader optionals: Array[Node]
- attr_reader :optionals
-
- # attr_reader posts: Array[Node]
- attr_reader :posts
-
- # attr_reader rest: Node?
- attr_reader :rest
-
- # attr_reader keywords: Array[Node]
- attr_reader :keywords
-
- # attr_reader keyword_rest: Node?
- attr_reader :keyword_rest
-
- # attr_reader block: Node?
- attr_reader :block
-
- # def initialize: (requireds: Array[Node], optionals: Array[Node], posts: Array[Node], rest: Node?, keywords: Array[Node], keyword_rest: Node?, block: Node?, location: Location) -> void
- def initialize(requireds, optionals, posts, rest, keywords, keyword_rest, block, location)
- @requireds = requireds
- @optionals = optionals
- @posts = posts
- @rest = rest
- @keywords = keywords
- @keyword_rest = keyword_rest
- @block = block
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_parameters_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*requireds, *optionals, *posts, rest, *keywords, keyword_rest, block]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { requireds: requireds, optionals: optionals, posts: posts, rest: rest, keywords: keywords, keyword_rest: keyword_rest, block: block, location: location }
- end
- end
-
- # Represents a parenthesized expression
- #
- # (10 + 34)
- # ^^^^^^^^^
- class ParenthesesNode < Node
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (statements: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void
- def initialize(statements, opening_loc, closing_loc, location)
- @statements = statements
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_parentheses_node(self)
- end
-
- def set_newline_flag(newline_marked)
- # Never mark ParenthesesNode with a newline flag, mark children instead
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { statements: statements, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents the use of the `^` operator for pinning an expression in a
- # pattern matching expression.
- #
- # foo in ^(bar)
- # ^^^^^^
- class PinnedExpressionNode < Node
- # attr_reader expression: Node
- attr_reader :expression
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader lparen_loc: Location
- attr_reader :lparen_loc
-
- # attr_reader rparen_loc: Location
- attr_reader :rparen_loc
-
- # def initialize: (expression: Node, operator_loc: Location, lparen_loc: Location, rparen_loc: Location, location: Location) -> void
- def initialize(expression, operator_loc, lparen_loc, rparen_loc, location)
- @expression = expression
- @operator_loc = operator_loc
- @lparen_loc = lparen_loc
- @rparen_loc = rparen_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_pinned_expression_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [expression]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { expression: expression, operator_loc: operator_loc, lparen_loc: lparen_loc, rparen_loc: rparen_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def lparen: () -> String
- def lparen
- lparen_loc.slice
- end
-
- # def rparen: () -> String
- def rparen
- rparen_loc.slice
- end
- end
-
- # Represents the use of the `^` operator for pinning a variable in a pattern
- # matching expression.
- #
- # foo in ^bar
- # ^^^^
- class PinnedVariableNode < Node
- # attr_reader variable: Node
- attr_reader :variable
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # def initialize: (variable: Node, operator_loc: Location, location: Location) -> void
- def initialize(variable, operator_loc, location)
- @variable = variable
- @operator_loc = operator_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_pinned_variable_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [variable]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { variable: variable, operator_loc: operator_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents the use of the `END` keyword.
- #
- # END { foo }
- # ^^^^^^^^^^^
- class PostExecutionNode < Node
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (statements: Node?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void
- def initialize(statements, keyword_loc, opening_loc, closing_loc, location)
- @statements = statements
- @keyword_loc = keyword_loc
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_post_execution_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { statements: statements, keyword_loc: keyword_loc, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents the use of the `BEGIN` keyword.
- #
- # BEGIN { foo }
- # ^^^^^^^^^^^^^
- class PreExecutionNode < Node
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (statements: Node?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void
- def initialize(statements, keyword_loc, opening_loc, closing_loc, location)
- @statements = statements
- @keyword_loc = keyword_loc
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_pre_execution_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { statements: statements, keyword_loc: keyword_loc, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # The top level node of any parse tree.
- class ProgramNode < Node
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader statements: Node
- attr_reader :statements
-
- # def initialize: (locals: Array[Symbol], statements: Node, location: Location) -> void
- def initialize(locals, statements, location)
- @locals = locals
- @statements = statements
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_program_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { locals: locals, statements: statements, location: location }
- end
- end
-
- # Represents the use of the `..` or `...` operators.
- #
- # 1..2
- # ^^^^
- #
- # c if a =~ /left/ ... b =~ /right/
- # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- class RangeNode < Node
- # attr_reader left: Node?
- attr_reader :left
-
- # attr_reader right: Node?
- attr_reader :right
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void
- def initialize(left, right, operator_loc, flags, location)
- @left = left
- @right = right
- @operator_loc = operator_loc
- @flags = flags
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_range_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [left, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { left: left, right: right, operator_loc: operator_loc, flags: flags, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def exclude_end?: () -> bool
- def exclude_end?
- flags.anybits?(RangeFlags::EXCLUDE_END)
- end
- end
-
- # Represents a rational number literal.
- #
- # 1.0r
- # ^^^^
- class RationalNode < Node
- # attr_reader numeric: Node
- attr_reader :numeric
-
- # def initialize: (numeric: Node, location: Location) -> void
- def initialize(numeric, location)
- @numeric = numeric
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_rational_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [numeric]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { numeric: numeric, location: location }
- end
- end
-
- # Represents the use of the `redo` keyword.
- #
- # redo
- # ^^^^
- class RedoNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_redo_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents a regular expression literal with no interpolation.
- #
- # /foo/i
- # ^^^^^^
- class RegularExpressionNode < Node
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader content_loc: Location
- attr_reader :content_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # attr_reader unescaped: String
- attr_reader :unescaped
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, flags: Integer, location: Location) -> void
- def initialize(opening_loc, content_loc, closing_loc, unescaped, flags, location)
- @opening_loc = opening_loc
- @content_loc = content_loc
- @closing_loc = closing_loc
- @unescaped = unescaped
- @flags = flags
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_regular_expression_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped, flags: flags, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def content: () -> String
- def content
- content_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
-
- # def ignore_case?: () -> bool
- def ignore_case?
- flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
- end
-
- # def multi_line?: () -> bool
- def multi_line?
- flags.anybits?(RegularExpressionFlags::MULTI_LINE)
- end
-
- # def extended?: () -> bool
- def extended?
- flags.anybits?(RegularExpressionFlags::EXTENDED)
- end
-
- # def euc_jp?: () -> bool
- def euc_jp?
- flags.anybits?(RegularExpressionFlags::EUC_JP)
- end
-
- # def ascii_8bit?: () -> bool
- def ascii_8bit?
- flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
- end
-
- # def windows_31j?: () -> bool
- def windows_31j?
- flags.anybits?(RegularExpressionFlags::WINDOWS_31J)
- end
-
- # def utf_8?: () -> bool
- def utf_8?
- flags.anybits?(RegularExpressionFlags::UTF_8)
- end
-
- # def once?: () -> bool
- def once?
- flags.anybits?(RegularExpressionFlags::ONCE)
- end
- end
-
- # Represents a destructured required parameter node.
- #
- # def foo((bar, baz))
- # ^^^^^^^^^^
- # end
- class RequiredDestructuredParameterNode < Node
- # attr_reader parameters: Array[Node]
- attr_reader :parameters
-
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # def initialize: (parameters: Array[Node], opening_loc: Location, closing_loc: Location, location: Location) -> void
- def initialize(parameters, opening_loc, closing_loc, location)
- @parameters = parameters
- @opening_loc = opening_loc
- @closing_loc = closing_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_required_destructured_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*parameters]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { parameters: parameters, opening_loc: opening_loc, closing_loc: closing_loc, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents a required parameter to a method, block, or lambda definition.
- #
- # def a(b)
- # ^
- # end
- class RequiredParameterNode < Node
- # attr_reader constant_id: Symbol
- attr_reader :constant_id
-
- # def initialize: (constant_id: Symbol, location: Location) -> void
- def initialize(constant_id, location)
- @constant_id = constant_id
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_required_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { constant_id: constant_id, location: location }
- end
- end
-
- # Represents an expression modified with a rescue.
- #
- # foo rescue nil
- # ^^^^^^^^^^^^^^
- class RescueModifierNode < Node
- # attr_reader expression: Node
- attr_reader :expression
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader rescue_expression: Node
- attr_reader :rescue_expression
-
- # def initialize: (expression: Node, keyword_loc: Location, rescue_expression: Node, location: Location) -> void
- def initialize(expression, keyword_loc, rescue_expression, location)
- @expression = expression
- @keyword_loc = keyword_loc
- @rescue_expression = rescue_expression
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_rescue_modifier_node(self)
- end
-
- def set_newline_flag(newline_marked)
- expression.set_newline_flag(newline_marked)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [expression, rescue_expression]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { expression: expression, keyword_loc: keyword_loc, rescue_expression: rescue_expression, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- 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.
- class RescueNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader exceptions: Array[Node]
- attr_reader :exceptions
-
- # attr_reader operator_loc: Location?
- attr_reader :operator_loc
-
- # attr_reader reference: Node?
- attr_reader :reference
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader consequent: Node?
- attr_reader :consequent
-
- # def initialize: (keyword_loc: Location, exceptions: Array[Node], operator_loc: Location?, reference: Node?, statements: Node?, consequent: Node?, location: Location) -> void
- def initialize(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location)
- @keyword_loc = keyword_loc
- @exceptions = exceptions
- @operator_loc = operator_loc
- @reference = reference
- @statements = statements
- @consequent = consequent
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_rescue_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*exceptions, reference, statements, consequent]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, exceptions: exceptions, operator_loc: operator_loc, reference: reference, statements: statements, consequent: consequent, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def operator: () -> String?
- def operator
- operator_loc&.slice
- end
- end
-
- # Represents a rest parameter to a method, block, or lambda definition.
- #
- # def a(*b)
- # ^^
- # end
- class RestParameterNode < Node
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader name_loc: Location?
- attr_reader :name_loc
-
- # def initialize: (operator_loc: Location, name_loc: Location?, location: Location) -> void
- def initialize(operator_loc, name_loc, location)
- @operator_loc = operator_loc
- @name_loc = name_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_rest_parameter_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { operator_loc: operator_loc, name_loc: name_loc, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def name: () -> String?
- def name
- name_loc&.slice
- end
- end
-
- # Represents the use of the `retry` keyword.
- #
- # retry
- # ^^^^^
- class RetryNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_retry_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the `return` keyword.
- #
- # return 1
- # ^^^^^^^^
- class ReturnNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader arguments: Node?
- attr_reader :arguments
-
- # def initialize: (keyword_loc: Location, arguments: Node?, location: Location) -> void
- def initialize(keyword_loc, arguments, location)
- @keyword_loc = keyword_loc
- @arguments = arguments
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_return_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [arguments]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, arguments: arguments, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
- end
-
- # Represents the `self` keyword.
- #
- # self
- # ^^^^
- class SelfNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_self_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents a singleton class declaration involving the `class` keyword.
- #
- # class << self end
- # ^^^^^^^^^^^^^^^^^
- class SingletonClassNode < Node
- # attr_reader locals: Array[Symbol]
- attr_reader :locals
-
- # attr_reader class_keyword_loc: Location
- attr_reader :class_keyword_loc
-
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader expression: Node
- attr_reader :expression
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader end_keyword_loc: Location
- attr_reader :end_keyword_loc
-
- # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, operator_loc: Location, expression: Node, statements: Node?, end_keyword_loc: Location, location: Location) -> void
- def initialize(locals, class_keyword_loc, operator_loc, expression, statements, end_keyword_loc, location)
- @locals = locals
- @class_keyword_loc = class_keyword_loc
- @operator_loc = operator_loc
- @expression = expression
- @statements = statements
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_singleton_class_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [expression, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { locals: locals, class_keyword_loc: class_keyword_loc, operator_loc: operator_loc, expression: expression, statements: statements, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def class_keyword: () -> String
- def class_keyword
- class_keyword_loc.slice
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
-
- # def end_keyword: () -> String
- def end_keyword
- end_keyword_loc.slice
- end
- end
-
- # Represents the use of the `__ENCODING__` keyword.
- #
- # __ENCODING__
- # ^^^^^^^^^^^^
- class SourceEncodingNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_source_encoding_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the `__FILE__` keyword.
- #
- # __FILE__
- # ^^^^^^^^
- class SourceFileNode < Node
- # attr_reader filepath: String
- attr_reader :filepath
-
- # def initialize: (filepath: String, location: Location) -> void
- def initialize(filepath, location)
- @filepath = filepath
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_source_file_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { filepath: filepath, location: location }
- end
- end
-
- # Represents the use of the `__LINE__` keyword.
- #
- # __LINE__
- # ^^^^^^^^
- class SourceLineNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_source_line_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the splat operator.
- #
- # [*a]
- # ^^
- class SplatNode < Node
- # attr_reader operator_loc: Location
- attr_reader :operator_loc
-
- # attr_reader expression: Node?
- attr_reader :expression
-
- # def initialize: (operator_loc: Location, expression: Node?, location: Location) -> void
- def initialize(operator_loc, expression, location)
- @operator_loc = operator_loc
- @expression = expression
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_splat_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [expression]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { operator_loc: operator_loc, expression: expression, location: location }
- end
-
- # def operator: () -> String
- def operator
- operator_loc.slice
- end
- end
-
- # Represents a set of statements contained within some scope.
- #
- # foo; bar; baz
- # ^^^^^^^^^^^^^
- class StatementsNode < Node
- # attr_reader body: Array[Node]
- attr_reader :body
-
- # def initialize: (body: Array[Node], location: Location) -> void
- def initialize(body, location)
- @body = body
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_statements_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*body]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { body: body, location: location }
- end
- end
-
- # Represents the use of compile-time string concatenation.
- #
- # "foo" "bar"
- # ^^^^^^^^^^^
- class StringConcatNode < Node
- # attr_reader left: Node
- attr_reader :left
-
- # attr_reader right: Node
- attr_reader :right
-
- # def initialize: (left: Node, right: Node, location: Location) -> void
- def initialize(left, right, location)
- @left = left
- @right = right
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_string_concat_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [left, right]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { left: left, right: right, location: location }
- end
- end
-
- # 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"
- # ^^^^ ^^^^
- class StringNode < Node
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader content_loc: Location
- attr_reader :content_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # attr_reader unescaped: String
- attr_reader :unescaped
-
- # def initialize: (opening_loc: Location?, content_loc: Location, closing_loc: Location?, unescaped: String, location: Location) -> void
- def initialize(opening_loc, content_loc, closing_loc, unescaped, location)
- @opening_loc = opening_loc
- @content_loc = content_loc
- @closing_loc = closing_loc
- @unescaped = unescaped
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_string_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def content: () -> String
- def content
- content_loc.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents the use of the `super` keyword with parentheses or arguments.
- #
- # super()
- # ^^^^^^^
- #
- # super foo, bar
- # ^^^^^^^^^^^^^^
- class SuperNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader lparen_loc: Location?
- attr_reader :lparen_loc
-
- # attr_reader arguments: Node?
- attr_reader :arguments
-
- # attr_reader rparen_loc: Location?
- attr_reader :rparen_loc
-
- # attr_reader block: Node?
- attr_reader :block
-
- # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: Node?, rparen_loc: Location?, block: Node?, location: Location) -> void
- def initialize(keyword_loc, lparen_loc, arguments, rparen_loc, block, location)
- @keyword_loc = keyword_loc
- @lparen_loc = lparen_loc
- @arguments = arguments
- @rparen_loc = rparen_loc
- @block = block
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_super_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [arguments, block]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, lparen_loc: lparen_loc, arguments: arguments, rparen_loc: rparen_loc, block: block, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def lparen: () -> String?
- def lparen
- lparen_loc&.slice
- end
-
- # def rparen: () -> String?
- def rparen
- rparen_loc&.slice
- end
- end
-
- # Represents a symbol literal or a symbol contained within a `%i` list.
- #
- # :foo
- # ^^^^
- #
- # %i[foo]
- # ^^^
- class SymbolNode < Node
- # attr_reader opening_loc: Location?
- attr_reader :opening_loc
-
- # attr_reader value_loc: Location
- attr_reader :value_loc
-
- # attr_reader closing_loc: Location?
- attr_reader :closing_loc
-
- # attr_reader unescaped: String
- attr_reader :unescaped
-
- # def initialize: (opening_loc: Location?, value_loc: Location, closing_loc: Location?, unescaped: String, location: Location) -> void
- def initialize(opening_loc, value_loc, closing_loc, unescaped, location)
- @opening_loc = opening_loc
- @value_loc = value_loc
- @closing_loc = closing_loc
- @unescaped = unescaped
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_symbol_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, value_loc: value_loc, closing_loc: closing_loc, unescaped: unescaped, location: location }
- end
-
- # def opening: () -> String?
- def opening
- opening_loc&.slice
- end
-
- # def value: () -> String
- def value
- value_loc.slice
- end
-
- # def closing: () -> String?
- def closing
- closing_loc&.slice
- end
- end
-
- # Represents the use of the literal `true` keyword.
- #
- # true
- # ^^^^
- class TrueNode < Node
- # def initialize: (location: Location) -> void
- def initialize(location)
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_true_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { location: location }
- end
- end
-
- # Represents the use of the `undef` keyword.
- #
- # undef :foo, :bar, :baz
- # ^^^^^^^^^^^^^^^^^^^^^^
- class UndefNode < Node
- # attr_reader names: Array[Node]
- attr_reader :names
-
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # def initialize: (names: Array[Node], keyword_loc: Location, location: Location) -> void
- def initialize(names, keyword_loc, location)
- @names = names
- @keyword_loc = keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_undef_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*names]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { names: names, keyword_loc: keyword_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- 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
- # ^^^^^^^^^^^^^^^^^^^^^^^
- class UnlessNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader predicate: Node
- attr_reader :predicate
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader consequent: Node?
- attr_reader :consequent
-
- # attr_reader end_keyword_loc: Location?
- attr_reader :end_keyword_loc
-
- # def initialize: (keyword_loc: Location, predicate: Node, statements: Node?, consequent: Node?, end_keyword_loc: Location?, location: Location) -> void
- def initialize(keyword_loc, predicate, statements, consequent, end_keyword_loc, location)
- @keyword_loc = keyword_loc
- @predicate = predicate
- @statements = statements
- @consequent = consequent
- @end_keyword_loc = end_keyword_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_unless_node(self)
- end
-
- def set_newline_flag(newline_marked)
- predicate.set_newline_flag(newline_marked)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [predicate, statements, consequent]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, predicate: predicate, statements: statements, consequent: consequent, end_keyword_loc: end_keyword_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def end_keyword: () -> String?
- def end_keyword
- end_keyword_loc&.slice
- 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
- # ^^^^^^^^^^^^^^^^^^^^
- class UntilNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader predicate: Node
- attr_reader :predicate
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # def initialize: (keyword_loc: Location, predicate: Node, statements: Node?, flags: Integer, location: Location) -> void
- def initialize(keyword_loc, predicate, statements, flags, location)
- @keyword_loc = keyword_loc
- @predicate = predicate
- @statements = statements
- @flags = flags
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_until_node(self)
- end
-
- def set_newline_flag(newline_marked)
- predicate.set_newline_flag(newline_marked)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [predicate, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, predicate: predicate, statements: statements, flags: flags, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def begin_modifier?: () -> bool
- def begin_modifier?
- flags.anybits?(LoopFlags::BEGIN_MODIFIER)
- end
- end
-
- # case true
- # when true
- # ^^^^^^^^^
- # end
- class WhenNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader conditions: Array[Node]
- attr_reader :conditions
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # def initialize: (keyword_loc: Location, conditions: Array[Node], statements: Node?, location: Location) -> void
- def initialize(keyword_loc, conditions, statements, location)
- @keyword_loc = keyword_loc
- @conditions = conditions
- @statements = statements
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_when_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [*conditions, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, conditions: conditions, statements: statements, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- 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
- # ^^^^^^^^^^^^^^^^^^^^
- class WhileNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader predicate: Node
- attr_reader :predicate
-
- # attr_reader statements: Node?
- attr_reader :statements
-
- # attr_reader flags: Integer
- attr_reader :flags
-
- # def initialize: (keyword_loc: Location, predicate: Node, statements: Node?, flags: Integer, location: Location) -> void
- def initialize(keyword_loc, predicate, statements, flags, location)
- @keyword_loc = keyword_loc
- @predicate = predicate
- @statements = statements
- @flags = flags
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_while_node(self)
- end
-
- def set_newline_flag(newline_marked)
- predicate.set_newline_flag(newline_marked)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [predicate, statements]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, predicate: predicate, statements: statements, flags: flags, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def begin_modifier?: () -> bool
- def begin_modifier?
- flags.anybits?(LoopFlags::BEGIN_MODIFIER)
- end
- end
-
- # Represents an xstring literal with no interpolation.
- #
- # `foo`
- # ^^^^^
- class XStringNode < Node
- # attr_reader opening_loc: Location
- attr_reader :opening_loc
-
- # attr_reader content_loc: Location
- attr_reader :content_loc
-
- # attr_reader closing_loc: Location
- attr_reader :closing_loc
-
- # attr_reader unescaped: String
- attr_reader :unescaped
-
- # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, location: Location) -> void
- def initialize(opening_loc, content_loc, closing_loc, unescaped, location)
- @opening_loc = opening_loc
- @content_loc = content_loc
- @closing_loc = closing_loc
- @unescaped = unescaped
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_x_string_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- []
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped, location: location }
- end
-
- # def opening: () -> String
- def opening
- opening_loc.slice
- end
-
- # def content: () -> String
- def content
- content_loc.slice
- end
-
- # def closing: () -> String
- def closing
- closing_loc.slice
- end
- end
-
- # Represents the use of the `yield` keyword.
- #
- # yield 1
- # ^^^^^^^
- class YieldNode < Node
- # attr_reader keyword_loc: Location
- attr_reader :keyword_loc
-
- # attr_reader lparen_loc: Location?
- attr_reader :lparen_loc
-
- # attr_reader arguments: Node?
- attr_reader :arguments
-
- # attr_reader rparen_loc: Location?
- attr_reader :rparen_loc
-
- # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: Node?, rparen_loc: Location?, location: Location) -> void
- def initialize(keyword_loc, lparen_loc, arguments, rparen_loc, location)
- @keyword_loc = keyword_loc
- @lparen_loc = lparen_loc
- @arguments = arguments
- @rparen_loc = rparen_loc
- @location = location
- end
-
- # def accept: (visitor: Visitor) -> void
- def accept(visitor)
- visitor.visit_yield_node(self)
- end
-
- # def child_nodes: () -> Array[nil | Node]
- def child_nodes
- [arguments]
- end
-
- # def deconstruct: () -> Array[nil | Node]
- alias deconstruct child_nodes
-
- # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
- def deconstruct_keys(keys)
- { keyword_loc: keyword_loc, lparen_loc: lparen_loc, arguments: arguments, rparen_loc: rparen_loc, location: location }
- end
-
- # def keyword: () -> String
- def keyword
- keyword_loc.slice
- end
-
- # def lparen: () -> String?
- def lparen
- lparen_loc&.slice
- end
-
- # def rparen: () -> String?
- def rparen
- rparen_loc&.slice
- end
- end
-
- module CallNodeFlags
- # &. operator
- SAFE_NAVIGATION = 1 << 0
-
- # a call that could have been a local variable
- VARIABLE_CALL = 1 << 1
- end
-
- module LoopFlags
- # a loop after a begin statement, so the body is executed first before the condition
- BEGIN_MODIFIER = 1 << 0
- end
-
- module RangeFlags
- # ... operator
- EXCLUDE_END = 1 << 0
- end
-
- module RegularExpressionFlags
- # i - ignores the case of characters when matching
- IGNORE_CASE = 1 << 0
-
- # m - allows $ to match the end of lines within strings
- MULTI_LINE = 1 << 1
-
- # x - ignores whitespace and allows comments in regular expressions
- EXTENDED = 1 << 2
-
- # e - forces the EUC-JP encoding
- EUC_JP = 1 << 3
-
- # n - forces the ASCII-8BIT encoding
- ASCII_8BIT = 1 << 4
-
- # s - forces the Windows-31J encoding
- WINDOWS_31J = 1 << 5
-
- # u - forces the UTF-8 encoding
- UTF_8 = 1 << 6
-
- # o - only interpolates values into the regular expression once
- ONCE = 1 << 7
- end
-
- class Visitor < BasicVisitor
- # Visit a AliasNode node
- alias visit_alias_node visit_child_nodes
-
- # Visit a AlternationPatternNode node
- alias visit_alternation_pattern_node visit_child_nodes
-
- # Visit a AndNode node
- alias visit_and_node visit_child_nodes
-
- # Visit a ArgumentsNode node
- alias visit_arguments_node visit_child_nodes
-
- # Visit a ArrayNode node
- alias visit_array_node visit_child_nodes
-
- # Visit a ArrayPatternNode node
- alias visit_array_pattern_node visit_child_nodes
-
- # Visit a AssocNode node
- alias visit_assoc_node visit_child_nodes
-
- # Visit a AssocSplatNode node
- alias visit_assoc_splat_node visit_child_nodes
-
- # Visit a BackReferenceReadNode node
- alias visit_back_reference_read_node visit_child_nodes
-
- # Visit a BeginNode node
- alias visit_begin_node visit_child_nodes
-
- # Visit a BlockArgumentNode node
- alias visit_block_argument_node visit_child_nodes
-
- # Visit a BlockNode node
- alias visit_block_node visit_child_nodes
-
- # Visit a BlockParameterNode node
- alias visit_block_parameter_node visit_child_nodes
-
- # Visit a BlockParametersNode node
- alias visit_block_parameters_node visit_child_nodes
-
- # Visit a BreakNode node
- alias visit_break_node visit_child_nodes
-
- # Visit a CallNode node
- alias visit_call_node visit_child_nodes
-
- # Visit a CallOperatorAndWriteNode node
- alias visit_call_operator_and_write_node visit_child_nodes
-
- # Visit a CallOperatorOrWriteNode node
- alias visit_call_operator_or_write_node visit_child_nodes
-
- # Visit a CallOperatorWriteNode node
- alias visit_call_operator_write_node visit_child_nodes
-
- # Visit a CapturePatternNode node
- alias visit_capture_pattern_node visit_child_nodes
-
- # Visit a CaseNode node
- alias visit_case_node visit_child_nodes
-
- # Visit a ClassNode node
- alias visit_class_node visit_child_nodes
-
- # Visit a ClassVariableOperatorAndWriteNode node
- alias visit_class_variable_operator_and_write_node visit_child_nodes
-
- # Visit a ClassVariableOperatorOrWriteNode node
- alias visit_class_variable_operator_or_write_node visit_child_nodes
-
- # Visit a ClassVariableOperatorWriteNode node
- alias visit_class_variable_operator_write_node visit_child_nodes
-
- # Visit a ClassVariableReadNode node
- alias visit_class_variable_read_node visit_child_nodes
-
- # Visit a ClassVariableWriteNode node
- alias visit_class_variable_write_node visit_child_nodes
-
- # Visit a ConstantOperatorAndWriteNode node
- alias visit_constant_operator_and_write_node visit_child_nodes
-
- # Visit a ConstantOperatorOrWriteNode node
- alias visit_constant_operator_or_write_node visit_child_nodes
-
- # Visit a ConstantOperatorWriteNode node
- alias visit_constant_operator_write_node visit_child_nodes
-
- # Visit a ConstantPathNode node
- alias visit_constant_path_node visit_child_nodes
-
- # Visit a ConstantPathOperatorAndWriteNode node
- alias visit_constant_path_operator_and_write_node visit_child_nodes
-
- # Visit a ConstantPathOperatorOrWriteNode node
- alias visit_constant_path_operator_or_write_node visit_child_nodes
-
- # Visit a ConstantPathOperatorWriteNode node
- alias visit_constant_path_operator_write_node visit_child_nodes
-
- # Visit a ConstantPathWriteNode node
- alias visit_constant_path_write_node visit_child_nodes
-
- # Visit a ConstantReadNode node
- alias visit_constant_read_node visit_child_nodes
-
- # Visit a ConstantWriteNode node
- alias visit_constant_write_node visit_child_nodes
-
- # Visit a DefNode node
- alias visit_def_node visit_child_nodes
-
- # Visit a DefinedNode node
- alias visit_defined_node visit_child_nodes
-
- # Visit a ElseNode node
- alias visit_else_node visit_child_nodes
-
- # Visit a EmbeddedStatementsNode node
- alias visit_embedded_statements_node visit_child_nodes
-
- # Visit a EmbeddedVariableNode node
- alias visit_embedded_variable_node visit_child_nodes
-
- # Visit a EnsureNode node
- alias visit_ensure_node visit_child_nodes
-
- # Visit a FalseNode node
- alias visit_false_node visit_child_nodes
-
- # Visit a FindPatternNode node
- alias visit_find_pattern_node visit_child_nodes
-
- # Visit a FlipFlopNode node
- alias visit_flip_flop_node visit_child_nodes
-
- # Visit a FloatNode node
- alias visit_float_node visit_child_nodes
-
- # Visit a ForNode node
- alias visit_for_node visit_child_nodes
-
- # Visit a ForwardingArgumentsNode node
- alias visit_forwarding_arguments_node visit_child_nodes
-
- # Visit a ForwardingParameterNode node
- alias visit_forwarding_parameter_node visit_child_nodes
-
- # Visit a ForwardingSuperNode node
- alias visit_forwarding_super_node visit_child_nodes
-
- # Visit a GlobalVariableOperatorAndWriteNode node
- alias visit_global_variable_operator_and_write_node visit_child_nodes
-
- # Visit a GlobalVariableOperatorOrWriteNode node
- alias visit_global_variable_operator_or_write_node visit_child_nodes
-
- # Visit a GlobalVariableOperatorWriteNode node
- alias visit_global_variable_operator_write_node visit_child_nodes
-
- # Visit a GlobalVariableReadNode node
- alias visit_global_variable_read_node visit_child_nodes
-
- # Visit a GlobalVariableWriteNode node
- alias visit_global_variable_write_node visit_child_nodes
-
- # Visit a HashNode node
- alias visit_hash_node visit_child_nodes
-
- # Visit a HashPatternNode node
- alias visit_hash_pattern_node visit_child_nodes
-
- # Visit a IfNode node
- alias visit_if_node visit_child_nodes
-
- # Visit a ImaginaryNode node
- alias visit_imaginary_node visit_child_nodes
-
- # Visit a InNode node
- alias visit_in_node visit_child_nodes
-
- # Visit a InstanceVariableOperatorAndWriteNode node
- alias visit_instance_variable_operator_and_write_node visit_child_nodes
-
- # Visit a InstanceVariableOperatorOrWriteNode node
- alias visit_instance_variable_operator_or_write_node visit_child_nodes
-
- # Visit a InstanceVariableOperatorWriteNode node
- alias visit_instance_variable_operator_write_node visit_child_nodes
-
- # Visit a InstanceVariableReadNode node
- alias visit_instance_variable_read_node visit_child_nodes
-
- # Visit a InstanceVariableWriteNode node
- alias visit_instance_variable_write_node visit_child_nodes
-
- # Visit a IntegerNode node
- alias visit_integer_node visit_child_nodes
-
- # Visit a InterpolatedRegularExpressionNode node
- alias visit_interpolated_regular_expression_node visit_child_nodes
-
- # Visit a InterpolatedStringNode node
- alias visit_interpolated_string_node visit_child_nodes
-
- # Visit a InterpolatedSymbolNode node
- alias visit_interpolated_symbol_node visit_child_nodes
-
- # Visit a InterpolatedXStringNode node
- alias visit_interpolated_x_string_node visit_child_nodes
-
- # Visit a KeywordHashNode node
- alias visit_keyword_hash_node visit_child_nodes
-
- # Visit a KeywordParameterNode node
- alias visit_keyword_parameter_node visit_child_nodes
-
- # Visit a KeywordRestParameterNode node
- alias visit_keyword_rest_parameter_node visit_child_nodes
-
- # Visit a LambdaNode node
- alias visit_lambda_node visit_child_nodes
-
- # Visit a LocalVariableOperatorAndWriteNode node
- alias visit_local_variable_operator_and_write_node visit_child_nodes
-
- # Visit a LocalVariableOperatorOrWriteNode node
- alias visit_local_variable_operator_or_write_node visit_child_nodes
-
- # Visit a LocalVariableOperatorWriteNode node
- alias visit_local_variable_operator_write_node visit_child_nodes
-
- # Visit a LocalVariableReadNode node
- alias visit_local_variable_read_node visit_child_nodes
-
- # Visit a LocalVariableWriteNode node
- alias visit_local_variable_write_node visit_child_nodes
-
- # Visit a MatchPredicateNode node
- alias visit_match_predicate_node visit_child_nodes
-
- # Visit a MatchRequiredNode node
- alias visit_match_required_node visit_child_nodes
-
- # Visit a MissingNode node
- alias visit_missing_node visit_child_nodes
-
- # Visit a ModuleNode node
- alias visit_module_node visit_child_nodes
-
- # Visit a MultiWriteNode node
- alias visit_multi_write_node visit_child_nodes
-
- # Visit a NextNode node
- alias visit_next_node visit_child_nodes
-
- # Visit a NilNode node
- alias visit_nil_node visit_child_nodes
-
- # Visit a NoKeywordsParameterNode node
- alias visit_no_keywords_parameter_node visit_child_nodes
-
- # Visit a NumberedReferenceReadNode node
- alias visit_numbered_reference_read_node visit_child_nodes
-
- # Visit a OptionalParameterNode node
- alias visit_optional_parameter_node visit_child_nodes
-
- # Visit a OrNode node
- alias visit_or_node visit_child_nodes
-
- # Visit a ParametersNode node
- alias visit_parameters_node visit_child_nodes
-
- # Visit a ParenthesesNode node
- alias visit_parentheses_node visit_child_nodes
-
- # Visit a PinnedExpressionNode node
- alias visit_pinned_expression_node visit_child_nodes
-
- # Visit a PinnedVariableNode node
- alias visit_pinned_variable_node visit_child_nodes
-
- # Visit a PostExecutionNode node
- alias visit_post_execution_node visit_child_nodes
-
- # Visit a PreExecutionNode node
- alias visit_pre_execution_node visit_child_nodes
-
- # Visit a ProgramNode node
- alias visit_program_node visit_child_nodes
-
- # Visit a RangeNode node
- alias visit_range_node visit_child_nodes
-
- # Visit a RationalNode node
- alias visit_rational_node visit_child_nodes
-
- # Visit a RedoNode node
- alias visit_redo_node visit_child_nodes
-
- # Visit a RegularExpressionNode node
- alias visit_regular_expression_node visit_child_nodes
-
- # Visit a RequiredDestructuredParameterNode node
- alias visit_required_destructured_parameter_node visit_child_nodes
-
- # Visit a RequiredParameterNode node
- alias visit_required_parameter_node visit_child_nodes
-
- # Visit a RescueModifierNode node
- alias visit_rescue_modifier_node visit_child_nodes
-
- # Visit a RescueNode node
- alias visit_rescue_node visit_child_nodes
-
- # Visit a RestParameterNode node
- alias visit_rest_parameter_node visit_child_nodes
-
- # Visit a RetryNode node
- alias visit_retry_node visit_child_nodes
-
- # Visit a ReturnNode node
- alias visit_return_node visit_child_nodes
-
- # Visit a SelfNode node
- alias visit_self_node visit_child_nodes
-
- # Visit a SingletonClassNode node
- alias visit_singleton_class_node visit_child_nodes
-
- # Visit a SourceEncodingNode node
- alias visit_source_encoding_node visit_child_nodes
-
- # Visit a SourceFileNode node
- alias visit_source_file_node visit_child_nodes
-
- # Visit a SourceLineNode node
- alias visit_source_line_node visit_child_nodes
-
- # Visit a SplatNode node
- alias visit_splat_node visit_child_nodes
-
- # Visit a StatementsNode node
- alias visit_statements_node visit_child_nodes
-
- # Visit a StringConcatNode node
- alias visit_string_concat_node visit_child_nodes
-
- # Visit a StringNode node
- alias visit_string_node visit_child_nodes
-
- # Visit a SuperNode node
- alias visit_super_node visit_child_nodes
-
- # Visit a SymbolNode node
- alias visit_symbol_node visit_child_nodes
-
- # Visit a TrueNode node
- alias visit_true_node visit_child_nodes
-
- # Visit a UndefNode node
- alias visit_undef_node visit_child_nodes
-
- # Visit a UnlessNode node
- alias visit_unless_node visit_child_nodes
-
- # Visit a UntilNode node
- alias visit_until_node visit_child_nodes
-
- # Visit a WhenNode node
- alias visit_when_node visit_child_nodes
-
- # Visit a WhileNode node
- alias visit_while_node visit_child_nodes
-
- # Visit a XStringNode node
- alias visit_x_string_node visit_child_nodes
-
- # Visit a YieldNode node
- alias visit_yield_node visit_child_nodes
- end
-
- module DSL
- private
-
- # Create a new Location object
- def Location(source = nil, start_offset = 0, length = 0)
- Location.new(source, start_offset, length)
- end
-
- # Create a new AliasNode node
- def AliasNode(new_name, old_name, keyword_loc, location = Location())
- AliasNode.new(new_name, old_name, keyword_loc, location)
- end
-
- # Create a new AlternationPatternNode node
- def AlternationPatternNode(left, right, operator_loc, location = Location())
- AlternationPatternNode.new(left, right, operator_loc, location)
- end
-
- # Create a new AndNode node
- def AndNode(left, right, operator_loc, location = Location())
- AndNode.new(left, right, operator_loc, location)
- end
-
- # Create a new ArgumentsNode node
- def ArgumentsNode(arguments, location = Location())
- ArgumentsNode.new(arguments, location)
- end
-
- # Create a new ArrayNode node
- def ArrayNode(elements, opening_loc, closing_loc, location = Location())
- ArrayNode.new(elements, opening_loc, closing_loc, location)
- end
-
- # Create a new ArrayPatternNode node
- def ArrayPatternNode(constant, requireds, rest, posts, opening_loc, closing_loc, location = Location())
- ArrayPatternNode.new(constant, requireds, rest, posts, opening_loc, closing_loc, location)
- end
-
- # Create a new AssocNode node
- def AssocNode(key, value, operator_loc, location = Location())
- AssocNode.new(key, value, operator_loc, location)
- end
-
- # Create a new AssocSplatNode node
- def AssocSplatNode(value, operator_loc, location = Location())
- AssocSplatNode.new(value, operator_loc, location)
- end
-
- # Create a new BackReferenceReadNode node
- def BackReferenceReadNode(location = Location())
- BackReferenceReadNode.new(location)
- end
-
- # Create a new BeginNode node
- def BeginNode(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location = Location())
- BeginNode.new(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location)
- end
-
- # Create a new BlockArgumentNode node
- def BlockArgumentNode(expression, operator_loc, location = Location())
- BlockArgumentNode.new(expression, operator_loc, location)
- end
-
- # Create a new BlockNode node
- def BlockNode(locals, parameters, statements, opening_loc, closing_loc, location = Location())
- BlockNode.new(locals, parameters, statements, opening_loc, closing_loc, location)
- end
-
- # Create a new BlockParameterNode node
- def BlockParameterNode(name_loc, operator_loc, location = Location())
- BlockParameterNode.new(name_loc, operator_loc, location)
- end
-
- # Create a new BlockParametersNode node
- def BlockParametersNode(parameters, locals, opening_loc, closing_loc, location = Location())
- BlockParametersNode.new(parameters, locals, opening_loc, closing_loc, location)
- end
-
- # Create a new BreakNode node
- def BreakNode(arguments, keyword_loc, location = Location())
- BreakNode.new(arguments, keyword_loc, location)
- end
-
- # Create a new CallNode node
- def CallNode(receiver, operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location = Location())
- CallNode.new(receiver, operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location)
- end
-
- # Create a new CallOperatorAndWriteNode node
- def CallOperatorAndWriteNode(target, operator_loc, value, location = Location())
- CallOperatorAndWriteNode.new(target, operator_loc, value, location)
- end
-
- # Create a new CallOperatorOrWriteNode node
- def CallOperatorOrWriteNode(target, value, operator_loc, location = Location())
- CallOperatorOrWriteNode.new(target, value, operator_loc, location)
- end
-
- # Create a new CallOperatorWriteNode node
- def CallOperatorWriteNode(target, operator_loc, value, operator_id, location = Location())
- CallOperatorWriteNode.new(target, operator_loc, value, operator_id, location)
- end
-
- # Create a new CapturePatternNode node
- def CapturePatternNode(value, target, operator_loc, location = Location())
- CapturePatternNode.new(value, target, operator_loc, location)
- end
-
- # Create a new CaseNode node
- def CaseNode(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location = Location())
- CaseNode.new(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location)
- end
-
- # Create a new ClassNode node
- def ClassNode(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, statements, end_keyword_loc, location = Location())
- ClassNode.new(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, statements, end_keyword_loc, location)
- end
-
- # Create a new ClassVariableOperatorAndWriteNode node
- def ClassVariableOperatorAndWriteNode(name_loc, operator_loc, value, location = Location())
- ClassVariableOperatorAndWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new ClassVariableOperatorOrWriteNode node
- def ClassVariableOperatorOrWriteNode(name_loc, operator_loc, value, location = Location())
- ClassVariableOperatorOrWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new ClassVariableOperatorWriteNode node
- def ClassVariableOperatorWriteNode(name_loc, operator_loc, value, operator, location = Location())
- ClassVariableOperatorWriteNode.new(name_loc, operator_loc, value, operator, location)
- end
-
- # Create a new ClassVariableReadNode node
- def ClassVariableReadNode(location = Location())
- ClassVariableReadNode.new(location)
- end
-
- # Create a new ClassVariableWriteNode node
- def ClassVariableWriteNode(name_loc, value, operator_loc, location = Location())
- ClassVariableWriteNode.new(name_loc, value, operator_loc, location)
- end
-
- # Create a new ConstantOperatorAndWriteNode node
- def ConstantOperatorAndWriteNode(name_loc, operator_loc, value, location = Location())
- ConstantOperatorAndWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new ConstantOperatorOrWriteNode node
- def ConstantOperatorOrWriteNode(name_loc, operator_loc, value, location = Location())
- ConstantOperatorOrWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new ConstantOperatorWriteNode node
- def ConstantOperatorWriteNode(name_loc, operator_loc, value, operator, location = Location())
- ConstantOperatorWriteNode.new(name_loc, operator_loc, value, operator, location)
- end
-
- # Create a new ConstantPathNode node
- def ConstantPathNode(parent, child, delimiter_loc, location = Location())
- ConstantPathNode.new(parent, child, delimiter_loc, location)
- end
-
- # Create a new ConstantPathOperatorAndWriteNode node
- def ConstantPathOperatorAndWriteNode(target, operator_loc, value, location = Location())
- ConstantPathOperatorAndWriteNode.new(target, operator_loc, value, location)
- end
-
- # Create a new ConstantPathOperatorOrWriteNode node
- def ConstantPathOperatorOrWriteNode(target, operator_loc, value, location = Location())
- ConstantPathOperatorOrWriteNode.new(target, operator_loc, value, location)
- end
-
- # Create a new ConstantPathOperatorWriteNode node
- def ConstantPathOperatorWriteNode(target, operator_loc, value, operator, location = Location())
- ConstantPathOperatorWriteNode.new(target, operator_loc, value, operator, location)
- end
-
- # Create a new ConstantPathWriteNode node
- def ConstantPathWriteNode(target, operator_loc, value, location = Location())
- ConstantPathWriteNode.new(target, operator_loc, value, location)
- end
-
- # Create a new ConstantReadNode node
- def ConstantReadNode(location = Location())
- ConstantReadNode.new(location)
- end
-
- # Create a new ConstantWriteNode node
- def ConstantWriteNode(name_loc, value, operator_loc, location = Location())
- ConstantWriteNode.new(name_loc, value, operator_loc, location)
- end
-
- # Create a new DefNode node
- def DefNode(name_loc, receiver, parameters, statements, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location = Location())
- DefNode.new(name_loc, receiver, parameters, statements, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location)
- end
-
- # Create a new DefinedNode node
- def DefinedNode(lparen_loc, value, rparen_loc, keyword_loc, location = Location())
- DefinedNode.new(lparen_loc, value, rparen_loc, keyword_loc, location)
- end
-
- # Create a new ElseNode node
- def ElseNode(else_keyword_loc, statements, end_keyword_loc, location = Location())
- ElseNode.new(else_keyword_loc, statements, end_keyword_loc, location)
- end
-
- # Create a new EmbeddedStatementsNode node
- def EmbeddedStatementsNode(opening_loc, statements, closing_loc, location = Location())
- EmbeddedStatementsNode.new(opening_loc, statements, closing_loc, location)
- end
-
- # Create a new EmbeddedVariableNode node
- def EmbeddedVariableNode(operator_loc, variable, location = Location())
- EmbeddedVariableNode.new(operator_loc, variable, location)
- end
-
- # Create a new EnsureNode node
- def EnsureNode(ensure_keyword_loc, statements, end_keyword_loc, location = Location())
- EnsureNode.new(ensure_keyword_loc, statements, end_keyword_loc, location)
- end
-
- # Create a new FalseNode node
- def FalseNode(location = Location())
- FalseNode.new(location)
- end
-
- # Create a new FindPatternNode node
- def FindPatternNode(constant, left, requireds, right, opening_loc, closing_loc, location = Location())
- FindPatternNode.new(constant, left, requireds, right, opening_loc, closing_loc, location)
- end
-
- # Create a new FlipFlopNode node
- def FlipFlopNode(left, right, operator_loc, flags, location = Location())
- FlipFlopNode.new(left, right, operator_loc, flags, location)
- end
-
- # Create a new FloatNode node
- def FloatNode(location = Location())
- FloatNode.new(location)
- end
-
- # Create a new ForNode node
- def ForNode(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location = Location())
- ForNode.new(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location)
- end
-
- # Create a new ForwardingArgumentsNode node
- def ForwardingArgumentsNode(location = Location())
- ForwardingArgumentsNode.new(location)
- end
-
- # Create a new ForwardingParameterNode node
- def ForwardingParameterNode(location = Location())
- ForwardingParameterNode.new(location)
- end
-
- # Create a new ForwardingSuperNode node
- def ForwardingSuperNode(block, location = Location())
- ForwardingSuperNode.new(block, location)
- end
-
- # Create a new GlobalVariableOperatorAndWriteNode node
- def GlobalVariableOperatorAndWriteNode(name_loc, operator_loc, value, location = Location())
- GlobalVariableOperatorAndWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new GlobalVariableOperatorOrWriteNode node
- def GlobalVariableOperatorOrWriteNode(name_loc, operator_loc, value, location = Location())
- GlobalVariableOperatorOrWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new GlobalVariableOperatorWriteNode node
- def GlobalVariableOperatorWriteNode(name_loc, operator_loc, value, operator, location = Location())
- GlobalVariableOperatorWriteNode.new(name_loc, operator_loc, value, operator, location)
- end
-
- # Create a new GlobalVariableReadNode node
- def GlobalVariableReadNode(location = Location())
- GlobalVariableReadNode.new(location)
- end
-
- # Create a new GlobalVariableWriteNode node
- def GlobalVariableWriteNode(name_loc, operator_loc, value, location = Location())
- GlobalVariableWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new HashNode node
- def HashNode(opening_loc, elements, closing_loc, location = Location())
- HashNode.new(opening_loc, elements, closing_loc, location)
- end
-
- # Create a new HashPatternNode node
- def HashPatternNode(constant, assocs, kwrest, opening_loc, closing_loc, location = Location())
- HashPatternNode.new(constant, assocs, kwrest, opening_loc, closing_loc, location)
- end
-
- # Create a new IfNode node
- def IfNode(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location = Location())
- IfNode.new(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location)
- end
-
- # Create a new ImaginaryNode node
- def ImaginaryNode(numeric, location = Location())
- ImaginaryNode.new(numeric, location)
- end
-
- # Create a new InNode node
- def InNode(pattern, statements, in_loc, then_loc, location = Location())
- InNode.new(pattern, statements, in_loc, then_loc, location)
- end
-
- # Create a new InstanceVariableOperatorAndWriteNode node
- def InstanceVariableOperatorAndWriteNode(name_loc, operator_loc, value, location = Location())
- InstanceVariableOperatorAndWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new InstanceVariableOperatorOrWriteNode node
- def InstanceVariableOperatorOrWriteNode(name_loc, operator_loc, value, location = Location())
- InstanceVariableOperatorOrWriteNode.new(name_loc, operator_loc, value, location)
- end
-
- # Create a new InstanceVariableOperatorWriteNode node
- def InstanceVariableOperatorWriteNode(name_loc, operator_loc, value, operator, location = Location())
- InstanceVariableOperatorWriteNode.new(name_loc, operator_loc, value, operator, location)
- end
-
- # Create a new InstanceVariableReadNode node
- def InstanceVariableReadNode(location = Location())
- InstanceVariableReadNode.new(location)
- end
-
- # Create a new InstanceVariableWriteNode node
- def InstanceVariableWriteNode(name_loc, value, operator_loc, location = Location())
- InstanceVariableWriteNode.new(name_loc, value, operator_loc, location)
- end
-
- # Create a new IntegerNode node
- def IntegerNode(location = Location())
- IntegerNode.new(location)
- end
-
- # Create a new InterpolatedRegularExpressionNode node
- def InterpolatedRegularExpressionNode(opening_loc, parts, closing_loc, flags, location = Location())
- InterpolatedRegularExpressionNode.new(opening_loc, parts, closing_loc, flags, location)
- end
-
- # Create a new InterpolatedStringNode node
- def InterpolatedStringNode(opening_loc, parts, closing_loc, location = Location())
- InterpolatedStringNode.new(opening_loc, parts, closing_loc, location)
- end
-
- # Create a new InterpolatedSymbolNode node
- def InterpolatedSymbolNode(opening_loc, parts, closing_loc, location = Location())
- InterpolatedSymbolNode.new(opening_loc, parts, closing_loc, location)
- end
-
- # Create a new InterpolatedXStringNode node
- def InterpolatedXStringNode(opening_loc, parts, closing_loc, location = Location())
- InterpolatedXStringNode.new(opening_loc, parts, closing_loc, location)
- end
-
- # Create a new KeywordHashNode node
- def KeywordHashNode(elements, location = Location())
- KeywordHashNode.new(elements, location)
- end
-
- # Create a new KeywordParameterNode node
- def KeywordParameterNode(name_loc, value, location = Location())
- KeywordParameterNode.new(name_loc, value, location)
- end
-
- # Create a new KeywordRestParameterNode node
- def KeywordRestParameterNode(operator_loc, name_loc, location = Location())
- KeywordRestParameterNode.new(operator_loc, name_loc, location)
- end
-
- # Create a new LambdaNode node
- def LambdaNode(locals, opening_loc, parameters, statements, location = Location())
- LambdaNode.new(locals, opening_loc, parameters, statements, location)
- end
-
- # Create a new LocalVariableOperatorAndWriteNode node
- def LocalVariableOperatorAndWriteNode(name_loc, operator_loc, value, constant_id, location = Location())
- LocalVariableOperatorAndWriteNode.new(name_loc, operator_loc, value, constant_id, location)
- end
-
- # Create a new LocalVariableOperatorOrWriteNode node
- def LocalVariableOperatorOrWriteNode(name_loc, operator_loc, value, constant_id, location = Location())
- LocalVariableOperatorOrWriteNode.new(name_loc, operator_loc, value, constant_id, location)
- end
-
- # Create a new LocalVariableOperatorWriteNode node
- def LocalVariableOperatorWriteNode(name_loc, operator_loc, value, constant_id, operator_id, location = Location())
- LocalVariableOperatorWriteNode.new(name_loc, operator_loc, value, constant_id, operator_id, location)
- end
-
- # Create a new LocalVariableReadNode node
- def LocalVariableReadNode(constant_id, depth, location = Location())
- LocalVariableReadNode.new(constant_id, depth, location)
- end
-
- # Create a new LocalVariableWriteNode node
- def LocalVariableWriteNode(constant_id, depth, value, name_loc, operator_loc, location = Location())
- LocalVariableWriteNode.new(constant_id, depth, value, name_loc, operator_loc, location)
- end
-
- # Create a new MatchPredicateNode node
- def MatchPredicateNode(value, pattern, operator_loc, location = Location())
- MatchPredicateNode.new(value, pattern, operator_loc, location)
- end
-
- # Create a new MatchRequiredNode node
- def MatchRequiredNode(value, pattern, operator_loc, location = Location())
- MatchRequiredNode.new(value, pattern, operator_loc, location)
- end
-
- # Create a new MissingNode node
- def MissingNode(location = Location())
- MissingNode.new(location)
- end
-
- # Create a new ModuleNode node
- def ModuleNode(locals, module_keyword_loc, constant_path, statements, end_keyword_loc, location = Location())
- ModuleNode.new(locals, module_keyword_loc, constant_path, statements, end_keyword_loc, location)
- end
-
- # Create a new MultiWriteNode node
- def MultiWriteNode(targets, operator_loc, value, lparen_loc, rparen_loc, location = Location())
- MultiWriteNode.new(targets, operator_loc, value, lparen_loc, rparen_loc, location)
- end
-
- # Create a new NextNode node
- def NextNode(arguments, keyword_loc, location = Location())
- NextNode.new(arguments, keyword_loc, location)
- end
-
- # Create a new NilNode node
- def NilNode(location = Location())
- NilNode.new(location)
- end
-
- # Create a new NoKeywordsParameterNode node
- def NoKeywordsParameterNode(operator_loc, keyword_loc, location = Location())
- NoKeywordsParameterNode.new(operator_loc, keyword_loc, location)
- end
-
- # Create a new NumberedReferenceReadNode node
- def NumberedReferenceReadNode(location = Location())
- NumberedReferenceReadNode.new(location)
- end
-
- # Create a new OptionalParameterNode node
- def OptionalParameterNode(constant_id, name_loc, operator_loc, value, location = Location())
- OptionalParameterNode.new(constant_id, name_loc, operator_loc, value, location)
- end
-
- # Create a new OrNode node
- def OrNode(left, right, operator_loc, location = Location())
- OrNode.new(left, right, operator_loc, location)
- end
-
- # Create a new ParametersNode node
- def ParametersNode(requireds, optionals, posts, rest, keywords, keyword_rest, block, location = Location())
- ParametersNode.new(requireds, optionals, posts, rest, keywords, keyword_rest, block, location)
- end
-
- # Create a new ParenthesesNode node
- def ParenthesesNode(statements, opening_loc, closing_loc, location = Location())
- ParenthesesNode.new(statements, opening_loc, closing_loc, location)
- end
-
- # Create a new PinnedExpressionNode node
- def PinnedExpressionNode(expression, operator_loc, lparen_loc, rparen_loc, location = Location())
- PinnedExpressionNode.new(expression, operator_loc, lparen_loc, rparen_loc, location)
- end
-
- # Create a new PinnedVariableNode node
- def PinnedVariableNode(variable, operator_loc, location = Location())
- PinnedVariableNode.new(variable, operator_loc, location)
- end
-
- # Create a new PostExecutionNode node
- def PostExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = Location())
- PostExecutionNode.new(statements, keyword_loc, opening_loc, closing_loc, location)
- end
-
- # Create a new PreExecutionNode node
- def PreExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = Location())
- PreExecutionNode.new(statements, keyword_loc, opening_loc, closing_loc, location)
- end
-
- # Create a new ProgramNode node
- def ProgramNode(locals, statements, location = Location())
- ProgramNode.new(locals, statements, location)
- end
-
- # Create a new RangeNode node
- def RangeNode(left, right, operator_loc, flags, location = Location())
- RangeNode.new(left, right, operator_loc, flags, location)
- end
-
- # Create a new RationalNode node
- def RationalNode(numeric, location = Location())
- RationalNode.new(numeric, location)
- end
-
- # Create a new RedoNode node
- def RedoNode(location = Location())
- RedoNode.new(location)
- end
-
- # Create a new RegularExpressionNode node
- def RegularExpressionNode(opening_loc, content_loc, closing_loc, unescaped, flags, location = Location())
- RegularExpressionNode.new(opening_loc, content_loc, closing_loc, unescaped, flags, location)
- end
-
- # Create a new RequiredDestructuredParameterNode node
- def RequiredDestructuredParameterNode(parameters, opening_loc, closing_loc, location = Location())
- RequiredDestructuredParameterNode.new(parameters, opening_loc, closing_loc, location)
- end
-
- # Create a new RequiredParameterNode node
- def RequiredParameterNode(constant_id, location = Location())
- RequiredParameterNode.new(constant_id, location)
- end
-
- # Create a new RescueModifierNode node
- def RescueModifierNode(expression, keyword_loc, rescue_expression, location = Location())
- RescueModifierNode.new(expression, keyword_loc, rescue_expression, location)
- end
-
- # Create a new RescueNode node
- def RescueNode(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location = Location())
- RescueNode.new(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location)
- end
-
- # Create a new RestParameterNode node
- def RestParameterNode(operator_loc, name_loc, location = Location())
- RestParameterNode.new(operator_loc, name_loc, location)
- end
-
- # Create a new RetryNode node
- def RetryNode(location = Location())
- RetryNode.new(location)
- end
-
- # Create a new ReturnNode node
- def ReturnNode(keyword_loc, arguments, location = Location())
- ReturnNode.new(keyword_loc, arguments, location)
- end
-
- # Create a new SelfNode node
- def SelfNode(location = Location())
- SelfNode.new(location)
- end
-
- # Create a new SingletonClassNode node
- def SingletonClassNode(locals, class_keyword_loc, operator_loc, expression, statements, end_keyword_loc, location = Location())
- SingletonClassNode.new(locals, class_keyword_loc, operator_loc, expression, statements, end_keyword_loc, location)
- end
-
- # Create a new SourceEncodingNode node
- def SourceEncodingNode(location = Location())
- SourceEncodingNode.new(location)
- end
-
- # Create a new SourceFileNode node
- def SourceFileNode(filepath, location = Location())
- SourceFileNode.new(filepath, location)
- end
-
- # Create a new SourceLineNode node
- def SourceLineNode(location = Location())
- SourceLineNode.new(location)
- end
-
- # Create a new SplatNode node
- def SplatNode(operator_loc, expression, location = Location())
- SplatNode.new(operator_loc, expression, location)
- end
-
- # Create a new StatementsNode node
- def StatementsNode(body, location = Location())
- StatementsNode.new(body, location)
- end
-
- # Create a new StringConcatNode node
- def StringConcatNode(left, right, location = Location())
- StringConcatNode.new(left, right, location)
- end
-
- # Create a new StringNode node
- def StringNode(opening_loc, content_loc, closing_loc, unescaped, location = Location())
- StringNode.new(opening_loc, content_loc, closing_loc, unescaped, location)
- end
-
- # Create a new SuperNode node
- def SuperNode(keyword_loc, lparen_loc, arguments, rparen_loc, block, location = Location())
- SuperNode.new(keyword_loc, lparen_loc, arguments, rparen_loc, block, location)
- end
-
- # Create a new SymbolNode node
- def SymbolNode(opening_loc, value_loc, closing_loc, unescaped, location = Location())
- SymbolNode.new(opening_loc, value_loc, closing_loc, unescaped, location)
- end
-
- # Create a new TrueNode node
- def TrueNode(location = Location())
- TrueNode.new(location)
- end
-
- # Create a new UndefNode node
- def UndefNode(names, keyword_loc, location = Location())
- UndefNode.new(names, keyword_loc, location)
- end
-
- # Create a new UnlessNode node
- def UnlessNode(keyword_loc, predicate, statements, consequent, end_keyword_loc, location = Location())
- UnlessNode.new(keyword_loc, predicate, statements, consequent, end_keyword_loc, location)
- end
-
- # Create a new UntilNode node
- def UntilNode(keyword_loc, predicate, statements, flags, location = Location())
- UntilNode.new(keyword_loc, predicate, statements, flags, location)
- end
-
- # Create a new WhenNode node
- def WhenNode(keyword_loc, conditions, statements, location = Location())
- WhenNode.new(keyword_loc, conditions, statements, location)
- end
-
- # Create a new WhileNode node
- def WhileNode(keyword_loc, predicate, statements, flags, location = Location())
- WhileNode.new(keyword_loc, predicate, statements, flags, location)
- end
-
- # Create a new XStringNode node
- def XStringNode(opening_loc, content_loc, closing_loc, unescaped, location = Location())
- XStringNode.new(opening_loc, content_loc, closing_loc, unescaped, location)
- end
-
- # Create a new YieldNode node
- def YieldNode(keyword_loc, lparen_loc, arguments, rparen_loc, location = Location())
- YieldNode.new(keyword_loc, lparen_loc, arguments, rparen_loc, location)
- end
- end
-end
diff --git a/lib/yarp/serialize.rb b/lib/yarp/serialize.rb
deleted file mode 100644
index d6f7b7a0de..0000000000
--- a/lib/yarp/serialize.rb
+++ /dev/null
@@ -1,582 +0,0 @@
-# frozen_string_literal: true
-=begin
-This file is generated by the bin/template script and should not be
-modified manually. See templates/lib/yarp/serialize.rb.erb
-if you are looking to modify the template
-=end
-
-require "stringio"
-
-# Polyfill for String#unpack1 with the offset parameter.
-if String.instance_method(:unpack1).parameters.none? { |_, name| name == :offset }
- String.prepend(
- Module.new {
- def unpack1(format, offset: 0)
- offset == 0 ? super(format) : self[offset..].unpack1(format)
- end
- }
- )
-end
-
-module YARP
- module Serialize
- MAJOR_VERSION = 0
- MINOR_VERSION = 7
- PATCH_VERSION = 0
-
- def self.load(input, serialized)
- Loader.new(Source.new(input), serialized).load
- end
-
- def self.load_tokens(source, serialized)
- Loader.new(source, serialized).load_tokens
- end
-
- class Loader
- attr_reader :encoding, :input, :serialized, :io
- attr_reader :constant_pool_offset, :constant_pool, :source
-
- def initialize(source, serialized)
- @encoding = Encoding::UTF_8
-
- @input = source.source.dup
- @serialized = serialized
- @io = StringIO.new(serialized)
- @io.set_encoding(Encoding::BINARY)
-
- @constant_pool_offset = nil
- @constant_pool = nil
-
- @source = source
- end
-
- def load_tokens
- tokens = []
- while type = TOKEN_TYPES.fetch(load_varint)
- start = load_varint
- length = load_varint
- lex_state = load_varint
- location = Location.new(@source, start, length)
- tokens << [YARP::Token.new(type, location.slice, location), lex_state]
- end
-
- comments = load_varint.times.map { Comment.new(Comment::TYPES.fetch(load_varint), load_location) }
- errors = load_varint.times.map { ParseError.new(load_string, load_location) }
- warnings = load_varint.times.map { ParseWarning.new(load_string, load_location) }
-
- raise "Expected to consume all bytes while deserializing" unless @io.eof?
-
- YARP::ParseResult.new(tokens, comments, errors, warnings, @source)
- end
-
- def load
- raise "Invalid serialization" if io.read(4) != "YARP"
- raise "Invalid serialization" if io.read(3).unpack("C3") != [MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION]
-
- @encoding = Encoding.find(io.read(load_varint))
- @input = input.force_encoding(@encoding).freeze
-
- comments = load_varint.times.map { Comment.new(Comment::TYPES.fetch(io.getbyte), load_location) }
- errors = load_varint.times.map { ParseError.new(load_string, load_location) }
- warnings = load_varint.times.map { ParseWarning.new(load_string, load_location) }
-
- @constant_pool_offset = io.read(4).unpack1("L")
- @constant_pool = Array.new(load_varint, nil)
-
- ast = load_node
-
- YARP::ParseResult.new(ast, comments, errors, warnings, @source)
- end
-
- private
-
- # variable-length integer using https://en.wikipedia.org/wiki/LEB128
- # This is also what protobuf uses: https://protobuf.dev/programming-guides/encoding/#varints
- def load_varint
- n = io.getbyte
- if n < 128
- n
- else
- n -= 128
- shift = 0
- while (b = io.getbyte) >= 128
- n += (b - 128) << (shift += 7)
- end
- n + (b << (shift + 7))
- end
- end
-
- def load_serialized_length
- io.read(4).unpack1("L")
- end
-
- def load_optional_node
- if io.getbyte != 0
- io.pos -= 1
- load_node
- end
- end
-
- def load_string
- io.read(load_varint).force_encoding(encoding)
- end
-
- def load_location
- Location.new(source, load_varint, load_varint)
- end
-
- def load_optional_location
- load_location if io.getbyte != 0
- end
-
- def load_constant
- index = load_varint - 1
- constant = constant_pool[index]
-
- unless constant
- offset = constant_pool_offset + index * 8
-
- start = serialized.unpack1("L", offset: offset)
- length = serialized.unpack1("L", offset: offset + 4)
-
- constant = input.byteslice(start, length).to_sym
- constant_pool[index] = constant
- end
-
- constant
- end
-
- def load_node
- type = io.getbyte
- location = load_location
-
- case type
- when 1 then
- AliasNode.new(load_node, load_node, load_location, location)
- when 2 then
- AlternationPatternNode.new(load_node, load_node, load_location, location)
- when 3 then
- AndNode.new(load_node, load_node, load_location, location)
- when 4 then
- ArgumentsNode.new(Array.new(load_varint) { load_node }, location)
- when 5 then
- ArrayNode.new(Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
- when 6 then
- ArrayPatternNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, Array.new(load_varint) { load_node }, load_optional_location, load_optional_location, location)
- when 7 then
- AssocNode.new(load_node, load_optional_node, load_optional_location, location)
- when 8 then
- AssocSplatNode.new(load_optional_node, load_location, location)
- when 9 then
- BackReferenceReadNode.new(location)
- when 10 then
- BeginNode.new(load_optional_location, load_optional_node, load_optional_node, load_optional_node, load_optional_node, load_optional_location, location)
- when 11 then
- BlockArgumentNode.new(load_optional_node, load_location, location)
- when 12 then
- BlockNode.new(Array.new(load_varint) { load_constant }, load_optional_node, load_optional_node, load_location, load_location, location)
- when 13 then
- BlockParameterNode.new(load_optional_location, load_location, location)
- when 14 then
- BlockParametersNode.new(load_optional_node, Array.new(load_varint) { load_location }, load_optional_location, load_optional_location, location)
- when 15 then
- BreakNode.new(load_optional_node, load_location, location)
- when 16 then
- CallNode.new(load_optional_node, load_optional_location, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, load_varint, load_string, location)
- when 17 then
- CallOperatorAndWriteNode.new(load_node, load_location, load_node, location)
- when 18 then
- CallOperatorOrWriteNode.new(load_node, load_node, load_location, location)
- when 19 then
- CallOperatorWriteNode.new(load_node, load_location, load_node, load_constant, location)
- when 20 then
- CapturePatternNode.new(load_node, load_node, load_location, location)
- when 21 then
- CaseNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_location, load_location, location)
- when 22 then
- ClassNode.new(Array.new(load_varint) { load_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, location)
- when 23 then
- ClassVariableOperatorAndWriteNode.new(load_location, load_location, load_node, location)
- when 24 then
- ClassVariableOperatorOrWriteNode.new(load_location, load_location, load_node, location)
- when 25 then
- ClassVariableOperatorWriteNode.new(load_location, load_location, load_node, load_constant, location)
- when 26 then
- ClassVariableReadNode.new(location)
- when 27 then
- ClassVariableWriteNode.new(load_location, load_optional_node, load_optional_location, location)
- when 28 then
- ConstantOperatorAndWriteNode.new(load_location, load_location, load_node, location)
- when 29 then
- ConstantOperatorOrWriteNode.new(load_location, load_location, load_node, location)
- when 30 then
- ConstantOperatorWriteNode.new(load_location, load_location, load_node, load_constant, location)
- when 31 then
- ConstantPathNode.new(load_optional_node, load_node, load_location, location)
- when 32 then
- ConstantPathOperatorAndWriteNode.new(load_node, load_location, load_node, location)
- when 33 then
- ConstantPathOperatorOrWriteNode.new(load_node, load_location, load_node, location)
- when 34 then
- ConstantPathOperatorWriteNode.new(load_node, load_location, load_node, load_constant, location)
- when 35 then
- ConstantPathWriteNode.new(load_node, load_optional_location, load_optional_node, location)
- when 36 then
- ConstantReadNode.new(location)
- when 37 then
- ConstantWriteNode.new(load_location, load_optional_node, load_optional_location, location)
- when 38 then
- load_serialized_length
- DefNode.new(load_location, load_optional_node, load_optional_node, load_optional_node, Array.new(load_varint) { load_constant }, load_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, location)
- when 39 then
- DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
- when 40 then
- ElseNode.new(load_location, load_optional_node, load_optional_location, location)
- when 41 then
- EmbeddedStatementsNode.new(load_location, load_optional_node, load_location, location)
- when 42 then
- EmbeddedVariableNode.new(load_location, load_node, location)
- when 43 then
- EnsureNode.new(load_location, load_optional_node, load_location, location)
- when 44 then
- FalseNode.new(location)
- when 45 then
- FindPatternNode.new(load_optional_node, load_node, Array.new(load_varint) { load_node }, load_node, load_optional_location, load_optional_location, location)
- when 46 then
- FlipFlopNode.new(load_optional_node, load_optional_node, load_location, load_varint, location)
- when 47 then
- FloatNode.new(location)
- when 48 then
- ForNode.new(load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location, location)
- when 49 then
- ForwardingArgumentsNode.new(location)
- when 50 then
- ForwardingParameterNode.new(location)
- when 51 then
- ForwardingSuperNode.new(load_optional_node, location)
- when 52 then
- GlobalVariableOperatorAndWriteNode.new(load_location, load_location, load_node, location)
- when 53 then
- GlobalVariableOperatorOrWriteNode.new(load_location, load_location, load_node, location)
- when 54 then
- GlobalVariableOperatorWriteNode.new(load_location, load_location, load_node, load_constant, location)
- when 55 then
- GlobalVariableReadNode.new(location)
- when 56 then
- GlobalVariableWriteNode.new(load_location, load_optional_location, load_optional_node, location)
- when 57 then
- HashNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
- when 58 then
- HashPatternNode.new(load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_optional_location, load_optional_location, location)
- when 59 then
- IfNode.new(load_optional_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
- when 60 then
- ImaginaryNode.new(load_node, location)
- when 61 then
- InNode.new(load_node, load_optional_node, load_location, load_optional_location, location)
- when 62 then
- InstanceVariableOperatorAndWriteNode.new(load_location, load_location, load_node, location)
- when 63 then
- InstanceVariableOperatorOrWriteNode.new(load_location, load_location, load_node, location)
- when 64 then
- InstanceVariableOperatorWriteNode.new(load_location, load_location, load_node, load_constant, location)
- when 65 then
- InstanceVariableReadNode.new(location)
- when 66 then
- InstanceVariableWriteNode.new(load_location, load_optional_node, load_optional_location, location)
- when 67 then
- IntegerNode.new(location)
- when 68 then
- InterpolatedRegularExpressionNode.new(load_location, Array.new(load_varint) { load_node }, load_location, load_varint, location)
- when 69 then
- InterpolatedStringNode.new(load_optional_location, Array.new(load_varint) { load_node }, load_optional_location, location)
- when 70 then
- InterpolatedSymbolNode.new(load_optional_location, Array.new(load_varint) { load_node }, load_optional_location, location)
- when 71 then
- InterpolatedXStringNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
- when 72 then
- KeywordHashNode.new(Array.new(load_varint) { load_node }, location)
- when 73 then
- KeywordParameterNode.new(load_location, load_optional_node, location)
- when 74 then
- KeywordRestParameterNode.new(load_location, load_optional_location, location)
- when 75 then
- LambdaNode.new(Array.new(load_varint) { load_constant }, load_location, load_optional_node, load_optional_node, location)
- when 76 then
- LocalVariableOperatorAndWriteNode.new(load_location, load_location, load_node, load_constant, location)
- when 77 then
- LocalVariableOperatorOrWriteNode.new(load_location, load_location, load_node, load_constant, location)
- when 78 then
- LocalVariableOperatorWriteNode.new(load_location, load_location, load_node, load_constant, load_constant, location)
- when 79 then
- LocalVariableReadNode.new(load_constant, load_varint, location)
- when 80 then
- LocalVariableWriteNode.new(load_constant, load_varint, load_optional_node, load_location, load_optional_location, location)
- when 81 then
- MatchPredicateNode.new(load_node, load_node, load_location, location)
- when 82 then
- MatchRequiredNode.new(load_node, load_node, load_location, location)
- when 83 then
- MissingNode.new(location)
- when 84 then
- ModuleNode.new(Array.new(load_varint) { load_constant }, load_location, load_node, load_optional_node, load_location, location)
- when 85 then
- MultiWriteNode.new(Array.new(load_varint) { load_node }, load_optional_location, load_optional_node, load_optional_location, load_optional_location, location)
- when 86 then
- NextNode.new(load_optional_node, load_location, location)
- when 87 then
- NilNode.new(location)
- when 88 then
- NoKeywordsParameterNode.new(load_location, load_location, location)
- when 89 then
- NumberedReferenceReadNode.new(location)
- when 90 then
- OptionalParameterNode.new(load_constant, load_location, load_location, load_node, location)
- when 91 then
- OrNode.new(load_node, load_node, load_location, location)
- when 92 then
- ParametersNode.new(Array.new(load_varint) { load_node }, Array.new(load_varint) { load_node }, Array.new(load_varint) { load_node }, load_optional_node, Array.new(load_varint) { load_node }, load_optional_node, load_optional_node, location)
- when 93 then
- ParenthesesNode.new(load_optional_node, load_location, load_location, location)
- when 94 then
- PinnedExpressionNode.new(load_node, load_location, load_location, load_location, location)
- when 95 then
- PinnedVariableNode.new(load_node, load_location, location)
- when 96 then
- PostExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
- when 97 then
- PreExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
- when 98 then
- ProgramNode.new(Array.new(load_varint) { load_constant }, load_node, location)
- when 99 then
- RangeNode.new(load_optional_node, load_optional_node, load_location, load_varint, location)
- when 100 then
- RationalNode.new(load_node, location)
- when 101 then
- RedoNode.new(location)
- when 102 then
- RegularExpressionNode.new(load_location, load_location, load_location, load_string, load_varint, location)
- when 103 then
- RequiredDestructuredParameterNode.new(Array.new(load_varint) { load_node }, load_location, load_location, location)
- when 104 then
- RequiredParameterNode.new(load_constant, location)
- when 105 then
- RescueModifierNode.new(load_node, load_location, load_node, location)
- when 106 then
- RescueNode.new(load_location, Array.new(load_varint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node, location)
- when 107 then
- RestParameterNode.new(load_location, load_optional_location, location)
- when 108 then
- RetryNode.new(location)
- when 109 then
- ReturnNode.new(load_location, load_optional_node, location)
- when 110 then
- SelfNode.new(location)
- when 111 then
- SingletonClassNode.new(Array.new(load_varint) { load_constant }, load_location, load_location, load_node, load_optional_node, load_location, location)
- when 112 then
- SourceEncodingNode.new(location)
- when 113 then
- SourceFileNode.new(load_string, location)
- when 114 then
- SourceLineNode.new(location)
- when 115 then
- SplatNode.new(load_location, load_optional_node, location)
- when 116 then
- StatementsNode.new(Array.new(load_varint) { load_node }, location)
- when 117 then
- StringConcatNode.new(load_node, load_node, location)
- when 118 then
- StringNode.new(load_optional_location, load_location, load_optional_location, load_string, location)
- when 119 then
- SuperNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
- when 120 then
- SymbolNode.new(load_optional_location, load_location, load_optional_location, load_string, location)
- when 121 then
- TrueNode.new(location)
- when 122 then
- UndefNode.new(Array.new(load_varint) { load_node }, load_location, location)
- when 123 then
- UnlessNode.new(load_location, load_node, load_optional_node, load_optional_node, load_optional_location, location)
- when 124 then
- UntilNode.new(load_location, load_node, load_optional_node, load_varint, location)
- when 125 then
- WhenNode.new(load_location, Array.new(load_varint) { load_node }, load_optional_node, location)
- when 126 then
- WhileNode.new(load_location, load_node, load_optional_node, load_varint, location)
- when 127 then
- XStringNode.new(load_location, load_location, load_location, load_string, location)
- when 128 then
- YieldNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, location)
- end
- end
- end
-
- TOKEN_TYPES = [
- nil,
- :EOF,
- :MISSING,
- :NOT_PROVIDED,
- :AMPERSAND,
- :AMPERSAND_AMPERSAND,
- :AMPERSAND_AMPERSAND_EQUAL,
- :AMPERSAND_DOT,
- :AMPERSAND_EQUAL,
- :BACKTICK,
- :BACK_REFERENCE,
- :BANG,
- :BANG_EQUAL,
- :BANG_TILDE,
- :BRACE_LEFT,
- :BRACE_RIGHT,
- :BRACKET_LEFT,
- :BRACKET_LEFT_ARRAY,
- :BRACKET_LEFT_RIGHT,
- :BRACKET_LEFT_RIGHT_EQUAL,
- :BRACKET_RIGHT,
- :CARET,
- :CARET_EQUAL,
- :CHARACTER_LITERAL,
- :CLASS_VARIABLE,
- :COLON,
- :COLON_COLON,
- :COMMA,
- :COMMENT,
- :CONSTANT,
- :DOT,
- :DOT_DOT,
- :DOT_DOT_DOT,
- :EMBDOC_BEGIN,
- :EMBDOC_END,
- :EMBDOC_LINE,
- :EMBEXPR_BEGIN,
- :EMBEXPR_END,
- :EMBVAR,
- :EQUAL,
- :EQUAL_EQUAL,
- :EQUAL_EQUAL_EQUAL,
- :EQUAL_GREATER,
- :EQUAL_TILDE,
- :FLOAT,
- :FLOAT_IMAGINARY,
- :FLOAT_RATIONAL,
- :FLOAT_RATIONAL_IMAGINARY,
- :GLOBAL_VARIABLE,
- :GREATER,
- :GREATER_EQUAL,
- :GREATER_GREATER,
- :GREATER_GREATER_EQUAL,
- :HEREDOC_END,
- :HEREDOC_START,
- :IDENTIFIER,
- :IGNORED_NEWLINE,
- :INSTANCE_VARIABLE,
- :INTEGER,
- :INTEGER_IMAGINARY,
- :INTEGER_RATIONAL,
- :INTEGER_RATIONAL_IMAGINARY,
- :KEYWORD_ALIAS,
- :KEYWORD_AND,
- :KEYWORD_BEGIN,
- :KEYWORD_BEGIN_UPCASE,
- :KEYWORD_BREAK,
- :KEYWORD_CASE,
- :KEYWORD_CLASS,
- :KEYWORD_DEF,
- :KEYWORD_DEFINED,
- :KEYWORD_DO,
- :KEYWORD_DO_LOOP,
- :KEYWORD_ELSE,
- :KEYWORD_ELSIF,
- :KEYWORD_END,
- :KEYWORD_END_UPCASE,
- :KEYWORD_ENSURE,
- :KEYWORD_FALSE,
- :KEYWORD_FOR,
- :KEYWORD_IF,
- :KEYWORD_IF_MODIFIER,
- :KEYWORD_IN,
- :KEYWORD_MODULE,
- :KEYWORD_NEXT,
- :KEYWORD_NIL,
- :KEYWORD_NOT,
- :KEYWORD_OR,
- :KEYWORD_REDO,
- :KEYWORD_RESCUE,
- :KEYWORD_RESCUE_MODIFIER,
- :KEYWORD_RETRY,
- :KEYWORD_RETURN,
- :KEYWORD_SELF,
- :KEYWORD_SUPER,
- :KEYWORD_THEN,
- :KEYWORD_TRUE,
- :KEYWORD_UNDEF,
- :KEYWORD_UNLESS,
- :KEYWORD_UNLESS_MODIFIER,
- :KEYWORD_UNTIL,
- :KEYWORD_UNTIL_MODIFIER,
- :KEYWORD_WHEN,
- :KEYWORD_WHILE,
- :KEYWORD_WHILE_MODIFIER,
- :KEYWORD_YIELD,
- :KEYWORD___ENCODING__,
- :KEYWORD___FILE__,
- :KEYWORD___LINE__,
- :LABEL,
- :LABEL_END,
- :LAMBDA_BEGIN,
- :LESS,
- :LESS_EQUAL,
- :LESS_EQUAL_GREATER,
- :LESS_LESS,
- :LESS_LESS_EQUAL,
- :MINUS,
- :MINUS_EQUAL,
- :MINUS_GREATER,
- :NEWLINE,
- :NUMBERED_REFERENCE,
- :PARENTHESIS_LEFT,
- :PARENTHESIS_LEFT_PARENTHESES,
- :PARENTHESIS_RIGHT,
- :PERCENT,
- :PERCENT_EQUAL,
- :PERCENT_LOWER_I,
- :PERCENT_LOWER_W,
- :PERCENT_LOWER_X,
- :PERCENT_UPPER_I,
- :PERCENT_UPPER_W,
- :PIPE,
- :PIPE_EQUAL,
- :PIPE_PIPE,
- :PIPE_PIPE_EQUAL,
- :PLUS,
- :PLUS_EQUAL,
- :QUESTION_MARK,
- :REGEXP_BEGIN,
- :REGEXP_END,
- :SEMICOLON,
- :SLASH,
- :SLASH_EQUAL,
- :STAR,
- :STAR_EQUAL,
- :STAR_STAR,
- :STAR_STAR_EQUAL,
- :STRING_BEGIN,
- :STRING_CONTENT,
- :STRING_END,
- :SYMBOL_BEGIN,
- :TILDE,
- :UAMPERSAND,
- :UCOLON_COLON,
- :UDOT_DOT,
- :UDOT_DOT_DOT,
- :UMINUS,
- :UMINUS_NUM,
- :UPLUS,
- :USTAR,
- :USTAR_STAR,
- :WORDS_SEP,
- :__END__,
- ]
- end
-end