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.



6533
6534
6535
6536
6537
6538
6539
# File 'lib/syntax_tree/node.rb', line 6533

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



6531
6532
6533
# File 'lib/syntax_tree/node.rb', line 6531

def comments
  @comments
end

#falsyObject (readonly)

Node

the expression to be executed if the predicate is falsy



6528
6529
6530
# File 'lib/syntax_tree/node.rb', line 6528

def falsy
  @falsy
end

#predicateObject (readonly)

Node

the expression to be checked



6522
6523
6524
# File 'lib/syntax_tree/node.rb', line 6522

def predicate
  @predicate
end

#truthyObject (readonly)

Node

the expression to be executed if the predicate is truthy



6525
6526
6527
# File 'lib/syntax_tree/node.rb', line 6525

def truthy
  @truthy
end

Instance Method Details

#===(other) ⇒ Object



6607
6608
6609
6610
# File 'lib/syntax_tree/node.rb', line 6607

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

#accept(visitor) ⇒ Object



6541
6542
6543
# File 'lib/syntax_tree/node.rb', line 6541

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

#child_nodesObject Also known as: deconstruct



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

def child_nodes
  [predicate, truthy, falsy]
end

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



6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
# File 'lib/syntax_tree/node.rb', line 6549

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



6564
6565
6566
6567
6568
6569
6570
6571
6572
# File 'lib/syntax_tree/node.rb', line 6564

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

#format(q) ⇒ Object



6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
# File 'lib/syntax_tree/node.rb', line 6574

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