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
Source
# File lib/prism/node.rb, line 12207 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.
Source
# File lib/prism/node.rb, line 12329 def self.type :local_variable_write_node end
Return a symbol representation of this node type. See Node::type
.
Public Instance Methods
Source
# File lib/prism/node.rb, line 12335 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.
Source
# File lib/prism/node.rb, line 12220 def accept(visitor) visitor.visit_local_variable_write_node(self) end
def accept: (Visitor
visitor) -> void
Source
# File lib/prism/node.rb, line 12225 def child_nodes [value] end
def child_nodes
: () -> Array[nil | Node]
Source
# File lib/prism/node.rb, line 12235 def comment_targets [name_loc, value, operator_loc] #: Array[Prism::node | Location] end
def comment_targets
: () -> Array[Node | Location]
Source
# File lib/prism/node.rb, line 12230 def compact_child_nodes [value] end
def compact_child_nodes
: () -> Array
Source
# File lib/prism/node.rb, line 12240 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 copy: (?node_id: Integer, ?location: Location
, ?flags: Integer, ?name: Symbol, ?depth: Integer, ?name_loc: Location
, ?value: Prism::node, ?operator_loc: Location
) -> LocalVariableWriteNode
Source
# File lib/prism/node.rb, line 12248 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
}
Source
# File lib/prism/node.rb, line 12319 def inspect InspectVisitor.compose(self) end
def inspect -> String
Source
# File lib/prism/node.rb, line 12272 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 ^^^
Source
# File lib/prism/node.rb, line 12314 def operator operator_loc.slice end
def operator: () -> String
Source
# File lib/prism/node.rb, line 12301 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 ^
Source
# File lib/prism/node.rb, line 12280 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.
Source
# File lib/prism/node.rb, line 12309 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.
Source
# File lib/prism/node.rb, line 12324 def type :local_variable_write_node end
Return a symbol representation of this node type. See Node#type
.