Class: SyntaxTree::IfOp

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

Overview

IfOp represents a ternary clause.

predicate ? truthy : falsy

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(predicate:, truthy:, falsy:, location:) ⇒ IfOp

Returns a new instance of IfOp.



6557
6558
6559
6560
6561
6562
6563
# File 'lib/syntax_tree/node.rb', line 6557

def initialize(predicate:, truthy:, falsy:, location:)
  @predicate = predicate
  @truthy = truthy
  @falsy = falsy
  @location = location
  @comments = []
end

Instance Attribute Details

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



6555
6556
6557
# File 'lib/syntax_tree/node.rb', line 6555

def comments
  @comments
end

#falsyObject (readonly)

Node

the expression to be executed if the predicate is falsy



6552
6553
6554
# File 'lib/syntax_tree/node.rb', line 6552

def falsy
  @falsy
end

#predicateObject (readonly)

Node

the expression to be checked



6546
6547
6548
# File 'lib/syntax_tree/node.rb', line 6546

def predicate
  @predicate
end

#truthyObject (readonly)

Node

the expression to be executed if the predicate is truthy



6549
6550
6551
# File 'lib/syntax_tree/node.rb', line 6549

def truthy
  @truthy
end

Instance Method Details

#===(other) ⇒ Object



6631
6632
6633
6634
# File 'lib/syntax_tree/node.rb', line 6631

def ===(other)
  other.is_a?(IfOp) && predicate === other.predicate &&
    truthy === other.truthy && falsy === other.falsy
end

#accept(visitor) ⇒ Object



6565
6566
6567
# File 'lib/syntax_tree/node.rb', line 6565

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

#child_nodesObject Also known as: deconstruct



6569
6570
6571
# File 'lib/syntax_tree/node.rb', line 6569

def child_nodes
  [predicate, truthy, falsy]
end

#copy(predicate: nil, truthy: nil, falsy: nil, location: nil) ⇒ Object



6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
# File 'lib/syntax_tree/node.rb', line 6573

def copy(predicate: nil, truthy: nil, falsy: nil, location: nil)
  node =
    IfOp.new(
      predicate: predicate || self.predicate,
      truthy: truthy || self.truthy,
      falsy: falsy || self.falsy,
      location: location || self.location
    )

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

#deconstruct_keys(_keys) ⇒ Object



6588
6589
6590
6591
6592
6593
6594
6595
6596
# File 'lib/syntax_tree/node.rb', line 6588

def deconstruct_keys(_keys)
  {
    predicate: predicate,
    truthy: truthy,
    falsy: falsy,
    location: location,
    comments: comments
  }
end

#format(q) ⇒ Object



6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
# File 'lib/syntax_tree/node.rb', line 6598

def format(q)
  force_flat = [
    AliasNode,
    Assign,
    Break,
    Command,
    CommandCall,
    Heredoc,
    IfNode,
    IfOp,
    Lambda,
    MAssign,
    Next,
    OpAssign,
    RescueMod,
    ReturnNode,
    Super,
    Undef,
    UnlessNode,
    VoidStmt,
    YieldNode,
    ZSuper
  ]

  if q.parent.is_a?(Paren) || force_flat.include?(truthy.class) ||
       force_flat.include?(falsy.class)
    q.group { format_flat(q) }
    return
  end

  q.group { q.if_break { format_break(q) }.if_flat { format_flat(q) } }
end