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.



3461
3462
3463
3464
3465
3466
3467
# File 'lib/syntax_tree/node.rb', line 3461

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



3453
3454
3455
# File 'lib/syntax_tree/node.rb', line 3453

def arguments
  @arguments
end

#blockObject (readonly)

nil | BlockNode

the optional block being passed to the method



3456
3457
3458
# File 'lib/syntax_tree/node.rb', line 3456

def block
  @block
end

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



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

def comments
  @comments
end

#messageObject (readonly)

Const | Ident

the message being sent to the implicit receiver



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

def message
  @message
end

Instance Method Details

#===(other) ⇒ Object



3511
3512
3513
3514
# File 'lib/syntax_tree/node.rb', line 3511

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

#accept(visitor) ⇒ Object



3469
3470
3471
# File 'lib/syntax_tree/node.rb', line 3469

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

#arityObject



3516
3517
3518
# File 'lib/syntax_tree/node.rb', line 3516

def arity
  arguments.arity
end

#child_nodesObject Also known as: deconstruct



3473
3474
3475
# File 'lib/syntax_tree/node.rb', line 3473

def child_nodes
  [message, arguments, block]
end

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



3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
# File 'lib/syntax_tree/node.rb', line 3477

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



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

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

#format(q) ⇒ Object



3502
3503
3504
3505
3506
3507
3508
3509
# File 'lib/syntax_tree/node.rb', line 3502

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

  q.format(block) if block
end