Represents writing to a local variable.
foo = 1 ^^^^^^^
The number of semantic scopes we have to traverse to find the declaration of this variable.
foo = 1 # depth 0 tap { foo = 1 } # depth 1
The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see the Prism documentation.
The name of the local variable, which is an identifier.
foo = :bar # name `:foo` abc = 123 # name `:abc`
The value to write to the local variable. It can be any non-void expression.
foo = :bar
^^^^
abc = 1234
^^^^
Note that since the name of a local variable is known before the value is parsed, it is valid for a local variable to appear within the value of its own write.
foo = foo
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12349
def initialize(source, node_id, location, flags, name, depth, name_loc, value, operator_loc)
@source = source
@node_id = node_id
@location = location
@flags = flags
@name = name
@depth = depth
@name_loc = name_loc
@value = value
@operator_loc = operator_loc
end
Initialize a new LocalVariableWriteNode node.
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12471
def self.type
:local_variable_write_node
end
Return a symbol representation of this node type. See Node::type.
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12477
def ===(other)
other.is_a?(LocalVariableWriteNode) &&
(name === other.name) &&
(depth === other.depth) &&
(name_loc.nil? == other.name_loc.nil?) &&
(value === other.value) &&
(operator_loc.nil? == other.operator_loc.nil?)
end
Implements case-equality for the node. This is effectively == but without comparing the value of locations. Locations are checked only for presence.
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12362
def accept(visitor)
visitor.visit_local_variable_write_node(self)
end
def accept: (Visitor visitor) -> void
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12367
def child_nodes
[value]
end
def child_nodes: () -> Array
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12377
def comment_targets
[name_loc, value, operator_loc] #: Array[Prism::node | Location]
end
def comment_targets: () -> Array[Node | Location]
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12372
def compact_child_nodes
[value]
end
def compact_child_nodes: () -> Array
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12382
def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, depth: self.depth, name_loc: self.name_loc, value: self.value, operator_loc: self.operator_loc)
LocalVariableWriteNode.new(source, node_id, location, flags, name, depth, name_loc, value, operator_loc)
end
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12390
def deconstruct_keys(keys)
{ node_id: node_id, location: location, name: name, depth: depth, name_loc: name_loc, value: value, operator_loc: operator_loc }
end
def deconstruct_keys: (Array keys) -> { node_id: Integer, location: Location, name: Symbol, depth: Integer, name_loc: Location, value: Prism::node, operator_loc: Location }
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12461
def inspect
InspectVisitor.compose(self)
end
def inspect -> String
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12414
def name_loc
location = @name_loc
return location if location.is_a?(Location)
@name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
end
The location of the variable name.
foo = :bar ^^^
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12456
def operator
operator_loc.slice
end
def operator: () -> String
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12443
def operator_loc
location = @operator_loc
return location if location.is_a?(Location)
@operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
end
The location of the = operator.
x = :y ^
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12422
def save_name_loc(repository)
repository.enter(node_id, :name_loc)
end
Save the name_loc location using the given saved source so that it can be retrieved later.
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12451
def save_operator_loc(repository)
repository.enter(node_id, :operator_loc)
end
Save the operator_loc location using the given saved source so that it can be retrieved later.
# File tmp/rubies/ruby-4.0.0/lib/prism/node.rb, line 12466
def type
:local_variable_write_node
end
Return a symbol representation of this node type. See Node#type.