Class: Prism::ConstantPathOperatorWriteNode

Inherits:
PrismNode
  • Object
show all
Defined in:
lib/prism/node.rb,
ext/prism/api_node.c

Overview

Represents assigning to a constant path using an operator that isn’t ‘=`.

Parent::Child += value
^^^^^^^^^^^^^^^^^^^^^^

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target, operator_loc, value, operator, location) ⇒ ConstantPathOperatorWriteNode

def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void



3903
3904
3905
3906
3907
3908
3909
# File 'lib/prism/node.rb', line 3903

def initialize(target, operator_loc, value, operator, location)
  @target = target
  @operator_loc = operator_loc
  @value = value
  @operator = operator
  @location = location
end

Instance Attribute Details

#operatorObject (readonly)

attr_reader operator: Symbol



3900
3901
3902
# File 'lib/prism/node.rb', line 3900

def operator
  @operator
end

#operator_locObject (readonly)

attr_reader operator_loc: Location



3894
3895
3896
# File 'lib/prism/node.rb', line 3894

def operator_loc
  @operator_loc
end

#targetObject (readonly)

attr_reader target: ConstantPathNode



3891
3892
3893
# File 'lib/prism/node.rb', line 3891

def target
  @target
end

#valueObject (readonly)

attr_reader value: Node



3897
3898
3899
# File 'lib/prism/node.rb', line 3897

def value
  @value
end

Instance Method Details

#accept(visitor) ⇒ Object

def accept: (visitor: Visitor) -> void



3912
3913
3914
# File 'lib/prism/node.rb', line 3912

def accept(visitor)
  visitor.visit_constant_path_operator_write_node(self)
end

#child_nodesObject Also known as: deconstruct

def child_nodes: () -> Array[nil | Node]



3917
3918
3919
# File 'lib/prism/node.rb', line 3917

def child_nodes
  [target, value]
end

#comment_targetsObject

def comment_targets: () -> Array[Node | Location]



3927
3928
3929
# File 'lib/prism/node.rb', line 3927

def comment_targets
  [target, operator_loc, value]
end

#compact_child_nodesObject

def compact_child_nodes: () -> Array



3922
3923
3924
# File 'lib/prism/node.rb', line 3922

def compact_child_nodes
  [target, value]
end

#copy(**params) ⇒ Object

def copy: (**params) -> ConstantPathOperatorWriteNode



3932
3933
3934
3935
3936
3937
3938
3939
3940
# File 'lib/prism/node.rb', line 3932

def copy(**params)
  ConstantPathOperatorWriteNode.new(
    params.fetch(:target) { target },
    params.fetch(:operator_loc) { operator_loc },
    params.fetch(:value) { value },
    params.fetch(:operator) { operator },
    params.fetch(:location) { location },
  )
end

#deconstruct_keys(keys) ⇒ Object

def deconstruct_keys: (keys: Array) -> Hash[Symbol, nil | Node | Array | String | Token | Array | Location]



3946
3947
3948
# File 'lib/prism/node.rb', line 3946

def deconstruct_keys(keys)
  { target: target, operator_loc: operator_loc, value: value, operator: operator, location: location }
end

#inspect(inspector = NodeInspector.new) ⇒ Object



3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
# File 'lib/prism/node.rb', line 3950

def inspect(inspector = NodeInspector.new)
  inspector << inspector.header(self)
  inspector << "├── target:\n"
  inspector << inspector.child_node(target, "│   ")
  inspector << "├── operator_loc: #{inspector.location(operator_loc)}\n"
  inspector << "├── value:\n"
  inspector << inspector.child_node(value, "│   ")
  inspector << "└── operator: #{operator.inspect}\n"
  inspector.to_str
end

#typeObject

Sometimes you want to check an instance of a node against a list of classes to see what kind of behavior to perform. Usually this is done by calling ‘[cls1, cls2].include?(node.class)` or putting the node into a case statement and doing `case node; when cls1; when cls2; end`. Both of these approaches are relatively slow because of the constant lookups, method calls, and/or array allocations.

Instead, you can call #type, which will return to you a symbol that you can use for comparison. This is faster than the other approaches because it uses a single integer comparison, but also because if you’re on CRuby you can take advantage of the fact that case statements with all symbol keys will use a jump table.

def type: () -> Symbol



3975
3976
3977
# File 'lib/prism/node.rb', line 3975

def type
  :constant_path_operator_write_node
end