Class: SyntaxTree::Command

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

Overview

Command represents a method call with arguments and no parentheses. Note that Command nodes only happen when there is no explicit receiver for this method.

method argument

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(message:, arguments:, block:, location:) ⇒ Command

Returns a new instance of Command.



3452
3453
3454
3455
3456
3457
3458
# File 'lib/syntax_tree/node.rb', line 3452

def initialize(message:, arguments:, block:, location:)
  @message = message
  @arguments = arguments
  @block = block
  @location = location
  @comments = []
end

Instance Attribute Details

#argumentsObject (readonly)

Args

the arguments being sent with the message



3444
3445
3446
# File 'lib/syntax_tree/node.rb', line 3444

def arguments
  @arguments
end

#blockObject (readonly)

nil | BlockNode

the optional block being passed to the method



3447
3448
3449
# File 'lib/syntax_tree/node.rb', line 3447

def block
  @block
end

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



3450
3451
3452
# File 'lib/syntax_tree/node.rb', line 3450

def comments
  @comments
end

#messageObject (readonly)

Const | Ident

the message being sent to the implicit receiver



3441
3442
3443
# File 'lib/syntax_tree/node.rb', line 3441

def message
  @message
end

Instance Method Details

#===(other) ⇒ Object



3502
3503
3504
3505
# File 'lib/syntax_tree/node.rb', line 3502

def ===(other)
  other.is_a?(Command) && message === other.message &&
    arguments === other.arguments && block === other.block
end

#accept(visitor) ⇒ Object



3460
3461
3462
# File 'lib/syntax_tree/node.rb', line 3460

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

#arityObject



3507
3508
3509
# File 'lib/syntax_tree/node.rb', line 3507

def arity
  arguments.arity
end

#child_nodesObject Also known as: deconstruct



3464
3465
3466
# File 'lib/syntax_tree/node.rb', line 3464

def child_nodes
  [message, arguments, block]
end

#copy(message: nil, arguments: nil, block: nil, location: nil) ⇒ Object



3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
# File 'lib/syntax_tree/node.rb', line 3468

def copy(message: nil, arguments: nil, block: nil, location: nil)
  node =
    Command.new(
      message: message || self.message,
      arguments: arguments || self.arguments,
      block: block || self.block,
      location: location || self.location
    )

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

#deconstruct_keys(_keys) ⇒ Object



3483
3484
3485
3486
3487
3488
3489
3490
3491
# File 'lib/syntax_tree/node.rb', line 3483

def deconstruct_keys(_keys)
  {
    message: message,
    arguments: arguments,
    block: block,
    location: location,
    comments: comments
  }
end

#format(q) ⇒ Object



3493
3494
3495
3496
3497
3498
3499
3500
# File 'lib/syntax_tree/node.rb', line 3493

def format(q)
  q.group do
    q.format(message)
    align(q, self) { q.format(arguments) }
  end

  q.format(block) if block
end