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 12210 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 12332 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 12338 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 12223 def accept(visitor) visitor.visit_local_variable_write_node(self) end
def accept: (Visitor
visitor) -> void
Source
# File lib/prism/node.rb, line 12228 def child_nodes [value] end
def child_nodes
: () -> Array
Source
# File lib/prism/node.rb, line 12238 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 12233 def compact_child_nodes [value] end
def compact_child_nodes
: () -> Array
Source
# File lib/prism/node.rb, line 12243 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 12251 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 12322 def inspect InspectVisitor.compose(self) end
def inspect -> String
Source
# File lib/prism/node.rb, line 12275 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 12317 def operator operator_loc.slice end
def operator: () -> String
Source
# File lib/prism/node.rb, line 12304 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 12283 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 12312 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.