File: mlhs_node.rb

package info (click to toggle)
ruby-rubocop-ast 1.49.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,768 kB
  • sloc: ruby: 17,017; yacc: 90; makefile: 9
file content (29 lines) | stat: -rw-r--r-- 1,026 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# frozen_string_literal: true

module RuboCop
  module AST
    # A node extension for `mlhs` nodes.
    # This will be used in place of a plain node when the builder constructs
    # the AST, making its methods available to all assignment nodes within RuboCop.
    class MlhsNode < Node
      # Returns all the assignment nodes on the left hand side (LHS) of a multiple assignment.
      # These are generally assignment nodes (`lvasgn`, `ivasgn`, `cvasgn`, `gvasgn`, `casgn`)
      # but can also be `send` nodes in case of `foo.bar, ... =` or `foo[:bar], ... =`,
      # or a `splat` node for `*, ... =`.
      #
      # @return [Array<Node>] the assignment nodes of the multiple assignment LHS
      def assignments
        child_nodes.flat_map do |node|
          if node.splat_type?
            # Anonymous splats have no children
            node.child_nodes.first || node
          elsif node.mlhs_type?
            node.assignments
          else
            node
          end
        end
      end
    end
  end
end