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 10922 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 11032 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 11038 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 10935 def accept(visitor) visitor.visit_local_variable_write_node(self) end
def child_nodes
: () -> Array[nil | Node]
# File lib/prism/node.rb, line 10940 def child_nodes [value] end
def comment_targets
: () -> Array[Node | Location]
# File lib/prism/node.rb, line 10950 def comment_targets [name_loc, value, operator_loc] #: Array[Prism::node | Location] end
def compact_child_nodes
: () -> Array
# File lib/prism/node.rb, line 10945 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 10955 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 10963 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 11022 def inspect InspectVisitor.compose(self) end
The location of the variable name.
foo = :bar ^^^
# File lib/prism/node.rb, line 10987 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 11017 def operator operator_loc.slice end
The location of the =
operator.
x = :y ^
# File lib/prism/node.rb, line 11010 def operator_loc location = @operator_loc return location if location.is_a?(Location) @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end
Return a symbol representation of this node type. See Node#type
.
# File lib/prism/node.rb, line 11027 def type :local_variable_write_node end