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.



6447
6448
6449
6450
6451
6452
6453
# File 'lib/syntax_tree/node.rb', line 6447

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



6445
6446
6447
# File 'lib/syntax_tree/node.rb', line 6445

def comments
  @comments
end

#falsyObject (readonly)

untyped

the expression to be executed if the predicate is falsy



6442
6443
6444
# File 'lib/syntax_tree/node.rb', line 6442

def falsy
  @falsy
end

#predicateObject (readonly)

untyped

the expression to be checked



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

def predicate
  @predicate
end

#truthyObject (readonly)

untyped

the expression to be executed if the predicate is truthy



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

def truthy
  @truthy
end

Instance Method Details

#===(other) ⇒ Object



6504
6505
6506
6507
# File 'lib/syntax_tree/node.rb', line 6504

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

#accept(visitor) ⇒ Object



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

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

#child_nodesObject Also known as: deconstruct



6459
6460
6461
# File 'lib/syntax_tree/node.rb', line 6459

def child_nodes
  [predicate, truthy, falsy]
end

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



6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
# File 'lib/syntax_tree/node.rb', line 6463

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



6478
6479
6480
6481
6482
6483
6484
6485
6486
# File 'lib/syntax_tree/node.rb', line 6478

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

#format(q) ⇒ Object



6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
# File 'lib/syntax_tree/node.rb', line 6488

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