class Prism::MultiTargetNode - Documentation for Ruby 4.1
Description: class Prism::MultiTargetNode: Represents a multi-target expression.
Keywords: ruby,class,Prism::MultiTargetNode

🔍

No recent searches

# class Prism::MultiTargetNode

Represents a multi-target expression.

    a, (b, c) = 1, 2, 3
       ^^^^^^

This can be a part of `MultiWriteNode` as above, or the target of a `for` loop

    for a, b in [[1, 2], [3, 4]]
        ^^^^

### Public Class Methods

new (source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc)
Source

    # File lib/prism/node.rb, line 22224
    def initialize(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @lefts = lefts
      @rest = rest
      @rights = rights
      @lparen_loc = lparen_loc
      @rparen_loc = rparen_loc
    end

Initialize a new `MultiTargetNode` node.

### Public Instance Methods

lefts → Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode]
Source

    # File lib/prism/node.rb, line 22343
    def lefts
      @lefts
    end

Represents the targets expressions before a splat node.

    a, (b, c, *) = 1, 2, 3, 4, 5
        ^^^^

The splat node can be absent, in that case all target expressions are in the left field.

    a, (b, c) = 1, 2, 3, 4, 5
        ^^^^

rest → ImplicitRestNode | SplatNode | nil
Source

    # File lib/prism/node.rb, line 22366
    def rest
      @rest
    end

Represents a splat node in the target expression.

    a, (b, *c) = 1, 2, 3, 4
           ^^

The variable can be empty, this results in a `SplatNode` with a `nil` expression field.

    a, (b, *) = 1, 2, 3, 4
           ^

If the `*` is omitted, this field will contain an `ImplicitRestNode`

    a, (b,) = 1, 2, 3, 4
         ^

rights → Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode]
Source

    # File lib/prism/node.rb, line 22379
    def rights
      @rights
    end

Represents the targets expressions after a splat node.

    a, (*, b, c) = 1, 2, 3, 4, 5
           ^^^^

## Locations

### Public Instance Methods

lparen_loc → Location | nil
Source

    # File lib/prism/node.rb, line 22393
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

The `Location` of the opening parenthesis.

    a, (b, c) = 1, 2, 3
       ^

rparen_loc → Location | nil
Source

    # File lib/prism/node.rb, line 22423
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

The `Location` of the closing parenthesis.

    a, (b, c) = 1, 2, 3
            ^

## Node Interface

These methods are present on all subclasses of `Node`. Read the node interface docs for more information.

### Public Class Methods

type ()
Source

    # File lib/prism/node.rb, line 22318
    def self.type
      :multi_target_node
    end

See `Node.type`.

### Public Instance Methods

accept (visitor)
Source

    # File lib/prism/node.rb, line 22250
    def accept(visitor)
      visitor.visit_multi_target_node(self)
    end

See `Node.accept`.

child_nodes ()
Source

    # File lib/prism/node.rb, line 22257
    def child_nodes
      [*lefts, rest, *rights]
    end

See `Node.child_nodes`.

Also aliased as: deconstruct
comment_targets ()
Source

    # File lib/prism/node.rb, line 22287
    def comment_targets
      [*lefts, *rest, *rights, *lparen_loc, *rparen_loc] #: Array[Prism::node | Location]
    end

See `Node.comment_targets`.

compact_child_nodes ()
Source

    # File lib/prism/node.rb, line 22276
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact.concat(lefts)
      if (rest = self.rest); compact << rest; end
      compact.concat(rights)
      compact
    end

See `Node.compact_child_nodes`.

copy(**fields) → MultiTargetNode
Source

    # File lib/prism/node.rb, line 22297
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, lefts: self.lefts, rest: self.rest, rights: self.rights, lparen_loc: self.lparen_loc, rparen_loc: self.rparen_loc)
      MultiTargetNode.new(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc)
    end

Creates a copy of self with the given fields, using self as the template.

deconstruct ()
Alias for: child_nodes
each_child_node () { |node| ... }
Source

    # File lib/prism/node.rb, line 22265
    def each_child_node(&blk)
      return to_enum(:each_child_node) unless block_given?

      lefts.each { |node| yield node }
      if (rest = self.rest); yield rest; end
      rights.each { |node| yield node }
    end

See `Node.each_child_node`.

type ()
Source

    # File lib/prism/node.rb, line 22311
    def type
      :multi_target_node
    end

See `Node#type`.

## Repository

Methods related to `Relocation`.

### Public Instance Methods

save_lparen_loc (repository)
Source

    # File lib/prism/node.rb, line 22410
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

Save the `lparen_loc` location using the given saved source so that it can be retrieved later.

save_rparen_loc (repository)
Source

    # File lib/prism/node.rb, line 22440
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

Save the `rparen_loc` location using the given saved source so that it can be retrieved later.

## Slicing

### Public Instance Methods

lparen → String | nil
Source

    # File lib/prism/node.rb, line 22451
    def lparen
      lparen_loc&.slice
    end

Slice the location of `lparen_loc` from the source.

rparen → String | nil
Source

    # File lib/prism/node.rb, line 22461
    def rparen
      rparen_loc&.slice
    end

Slice the location of `rparen_loc` from the source.