Class: SyntaxTree::RangeNode

Inherits:
Node
  • Object
show all
Defined in:
lib/syntax_tree/node.rb

Overview

RangeNode represents using the .. or the … operator between two expressions. Usually this is to create a range object.

1..2

Sometimes this operator is used to create a flip-flop.

if value == 5 .. value == 10
end

One of the sides of the expression may be nil, but not both.

Instance Attribute Summary collapse

Attributes inherited from Node

#location

Instance Method Summary collapse

Methods inherited from Node

#construct_keys, #end_char, #pretty_print, #start_char, #to_json, #to_mermaid

Constructor Details

#initialize(left:, operator:, right:, location:) ⇒ RangeNode

Returns a new instance of RangeNode.



4553
4554
4555
4556
4557
4558
4559
# File 'lib/syntax_tree/node.rb', line 4553

def initialize(left:, operator:, right:, location:)
  @left = left
  @operator = operator
  @right = right
  @location = location
  @comments = []
end

Instance Attribute Details

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



4551
4552
4553
# File 'lib/syntax_tree/node.rb', line 4551

def comments
  @comments
end

#leftObject (readonly)

nil | Node

the left side of the expression



4542
4543
4544
# File 'lib/syntax_tree/node.rb', line 4542

def left
  @left
end

#operatorObject (readonly)

Op

the operator used for this range



4545
4546
4547
# File 'lib/syntax_tree/node.rb', line 4545

def operator
  @operator
end

#rightObject (readonly)

nil | Node

the right side of the expression



4548
4549
4550
# File 'lib/syntax_tree/node.rb', line 4548

def right
  @right
end

Instance Method Details

#===(other) ⇒ Object



4607
4608
4609
4610
# File 'lib/syntax_tree/node.rb', line 4607

def ===(other)
  other.is_a?(RangeNode) && left === other.left &&
    operator === other.operator && right === other.right
end

#accept(visitor) ⇒ Object



4561
4562
4563
# File 'lib/syntax_tree/node.rb', line 4561

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

#child_nodesObject Also known as: deconstruct



4565
4566
4567
# File 'lib/syntax_tree/node.rb', line 4565

def child_nodes
  [left, right]
end

#copy(left: nil, operator: nil, right: nil, location: nil) ⇒ Object



4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
# File 'lib/syntax_tree/node.rb', line 4569

def copy(left: nil, operator: nil, right: nil, location: nil)
  node =
    RangeNode.new(
      left: left || self.left,
      operator: operator || self.operator,
      right: right || self.right,
      location: location || self.location
    )

  node.comments.concat(comments.map(&:copy))
  node
end

#deconstruct_keys(_keys) ⇒ Object



4584
4585
4586
4587
4588
4589
4590
4591
4592
# File 'lib/syntax_tree/node.rb', line 4584

def deconstruct_keys(_keys)
  {
    left: left,
    operator: operator,
    right: right,
    location: location,
    comments: comments
  }
end

#format(q) ⇒ Object



4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
# File 'lib/syntax_tree/node.rb', line 4594

def format(q)
  q.format(left) if left

  case q.parent
  when IfNode, UnlessNode
    q.text(" #{operator.value} ")
  else
    q.text(operator.value)
  end

  q.format(right) if right
end