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, #pretty_print, #to_json

Constructor Details

#initialize(predicate:, truthy:, falsy:, location:) ⇒ IfOp

Returns a new instance of IfOp.



6442
6443
6444
6445
6446
6447
6448
# File 'lib/syntax_tree/node.rb', line 6442

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



6440
6441
6442
# File 'lib/syntax_tree/node.rb', line 6440

def comments
  @comments
end

#falsyObject (readonly)

untyped

the expression to be executed if the predicate is falsy



6437
6438
6439
# File 'lib/syntax_tree/node.rb', line 6437

def falsy
  @falsy
end

#predicateObject (readonly)

untyped

the expression to be checked



6431
6432
6433
# File 'lib/syntax_tree/node.rb', line 6431

def predicate
  @predicate
end

#truthyObject (readonly)

untyped

the expression to be executed if the predicate is truthy



6434
6435
6436
# File 'lib/syntax_tree/node.rb', line 6434

def truthy
  @truthy
end

Instance Method Details

#===(other) ⇒ Object



6516
6517
6518
6519
# File 'lib/syntax_tree/node.rb', line 6516

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

#accept(visitor) ⇒ Object



6450
6451
6452
# File 'lib/syntax_tree/node.rb', line 6450

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

#child_nodesObject Also known as: deconstruct



6454
6455
6456
# File 'lib/syntax_tree/node.rb', line 6454

def child_nodes
  [predicate, truthy, falsy]
end

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



6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
# File 'lib/syntax_tree/node.rb', line 6458

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



6473
6474
6475
6476
6477
6478
6479
6480
6481
# File 'lib/syntax_tree/node.rb', line 6473

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

#format(q) ⇒ Object



6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
# File 'lib/syntax_tree/node.rb', line 6483

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