class Prism::LocalVariableWriteNode
Represents writing to a local variable.
foo = 1 ^^^^^^^
Attributes
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
Public Class Methods
Initialize a new LocalVariableWriteNode
node.
# File lib/prism/node.rb, line 11949 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
Return a symbol representation of this node type. See Node::type
.
# File lib/prism/node.rb, line 12071 def self.type :local_variable_write_node end
Public Instance Methods
Implements case-equality for the node. This is effectively == but without comparing the value of locations. Locations are checked only for presence.
# File lib/prism/node.rb, line 12077 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
def accept: (Visitor
visitor) -> void
# File lib/prism/node.rb, line 11962 def accept(visitor) visitor.visit_local_variable_write_node(self) end
def child_nodes
: () -> Array[nil | Node]
# File lib/prism/node.rb, line 11967 def child_nodes [value] end
def comment_targets
: () -> Array[Node | Location]
# File lib/prism/node.rb, line 11977 def comment_targets [name_loc, value, operator_loc] #: Array[Prism::node | Location] end
def compact_child_nodes
: () -> Array
# File lib/prism/node.rb, line 11972 def compact_child_nodes [value] end
def copy: (?node_id: Integer, ?location: Location
, ?flags: Integer, ?name: Symbol, ?depth: Integer, ?name_loc: Location
, ?value: Prism::node, ?operator_loc: Location
) -> LocalVariableWriteNode
# File lib/prism/node.rb, line 11982 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
def deconstruct_keys
: (Array keys) -> { node_id: Integer, location: Location
, name: Symbol, depth: Integer, name_loc
: Location
, value: Prism::node, operator_loc
: Location
}
# File lib/prism/node.rb, line 11990 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 inspect -> String
# File lib/prism/node.rb, line 12061 def inspect InspectVisitor.compose(self) end
The location of the variable name.
foo = :bar ^^^
# File lib/prism/node.rb, line 12014 def name_loc location = @name_loc return location if location.is_a?(Location) @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end
def operator: () -> String
# File lib/prism/node.rb, line 12056 def operator operator_loc.slice end
The location of the =
operator.
x = :y ^
# File lib/prism/node.rb, line 12043 def operator_loc location = @operator_loc return location if location.is_a?(Location) @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end
Save the name_loc
location using the given saved source so that it can be retrieved later.
# File lib/prism/node.rb, line 12022 def save_name_loc(repository) repository.enter(node_id, :name_loc) end
Save the operator_loc
location using the given saved source so that it can be retrieved later.
# File lib/prism/node.rb, line 12051 def save_operator_loc(repository) repository.enter(node_id, :operator_loc) end
Return a symbol representation of this node type. See Node#type
.
# File lib/prism/node.rb, line 12066 def type :local_variable_write_node end