class Prism::LocalVariableWriteNode
Represents writing to a local variable.
foo = 1 ^^^^^^^
The line event for a statement is emitted where its first instruction is compiled, so nodes whose first instruction comes from a sub-expression delegate their newline flag to that sub-expression: assignments to their value, calls to their receiver, and array, hash, and interpolated string literals to their first element. Static literals are the exception: they are compiled to a single instruction on the first line of the literal, so they do not delegate.
Public Class Methods
(Source source, Integer node_id, Location location, Integer flags, Symbol name, Integer depth, Location name_loc, Prism::node value, Location operator_loc) → void
Source
# File lib/prism/node.rb, line 22378 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.
Public Instance Methods
() → Integer
Source
# File lib/prism/node.rb, line 22517 def depth @depth end
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
Explore code sample 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.
() → Symbol
Source
# File lib/prism/node.rb, line 22497 def name @name end
The name of the local variable, which is an identifier.
foo = :bar # name `:foo` abc = 123 # name `:abc`
() → Prism::node
Source
# File lib/prism/node.rb, line 22574 def value @value end
The value to write to the local variable. It can be any non-void expression.
foo = :bar ^^^^ abc = 1234 ^^^^
Explore code sample 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
Locations
Public Instance Methods
Source
# File lib/prism/node.rb, line 22535 def name_loc location = @name_loc return location if location.is_a?(Location) @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end
Source
# File lib/prism/node.rb, line 22592 def operator_loc location = @operator_loc return location if location.is_a?(Location) @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end
Node Interface
These methods are present on all subclasses of Node. Read the node interface docs for more information.
Public Class Methods
Public Instance Methods
(_Visitor visitor) → untyped
Source
# File lib/prism/node.rb, line 22404 def accept(visitor) visitor.visit_local_variable_write_node(self) end
See Node.accept.
() → Array[node?]
Source
# File lib/prism/node.rb, line 22411 def child_nodes [value] end
See Node.child_nodes.
() → Array[node]
Source
# File lib/prism/node.rb, line 22428 def compact_child_nodes [value] end
(?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 22438 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
Creates a copy of self with the given fields, using self as the template.
() → Enumerator[node, void]
() { (node) → void } → void
Source
# File lib/prism/node.rb, line 22419 def each_child_node(&blk) return to_enum(:each_child_node) unless block_given? yield value end
See Node.each_child_node.
Repository
Methods related to Relocation.
Public Instance Methods
(_Repository repository) → Relocation::Entry
Source
# File lib/prism/node.rb, line 22546 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.
(_Repository repository) → Relocation::Entry
Source
# File lib/prism/node.rb, line 22603 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.
Slicing
Public Instance Methods
() → String
Source
# File lib/prism/node.rb, line 22615 def operator operator_loc.slice end
Slice the location of operator_loc from the source.