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.



4550
4551
4552
4553
4554
4555
4556
# File 'lib/syntax_tree/node.rb', line 4550

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



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

def comments
  @comments
end

#leftObject (readonly)

nil | Node

the left side of the expression



4539
4540
4541
# File 'lib/syntax_tree/node.rb', line 4539

def left
  @left
end

#operatorObject (readonly)

Op

the operator used for this range



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

def operator
  @operator
end

#rightObject (readonly)

nil | Node

the right side of the expression



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

def right
  @right
end

Instance Method Details

#===(other) ⇒ Object



4604
4605
4606
4607
# File 'lib/syntax_tree/node.rb', line 4604

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

#accept(visitor) ⇒ Object



4558
4559
4560
# File 'lib/syntax_tree/node.rb', line 4558

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

#child_nodesObject Also known as: deconstruct



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

def child_nodes
  [left, right]
end

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



4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
# File 'lib/syntax_tree/node.rb', line 4566

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



4581
4582
4583
4584
4585
4586
4587
4588
4589
# File 'lib/syntax_tree/node.rb', line 4581

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

#format(q) ⇒ Object



4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
# File 'lib/syntax_tree/node.rb', line 4591

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