class RubyNext::Language::Rewriters::ArgsForward

Constants

BLOCK
MIN_SUPPORTED_VERSION
NAME
REST
SYNTAX_PROBE

Public Instance Methods

on_forward_arg(node) click to toggle source
Calls superclass method
# File lib/ruby-next/language/rewriters/args_forward.rb, line 14
def on_forward_arg(node)
  context.track! self

  node = super(node)

  replace(node.loc.expression, "*#{REST}, &#{BLOCK}")

  node.updated(
    :args,
    [
      s(:restarg, REST),
      s(:blockarg, BLOCK)
    ]
  )
end
on_send(node) click to toggle source
Calls superclass method
# File lib/ruby-next/language/rewriters/args_forward.rb, line 30
def on_send(node)
  fargs = extract_fargs(node)
  return super(node) unless fargs

  process_fargs(node, fargs)
end
on_super(node) click to toggle source
Calls superclass method
# File lib/ruby-next/language/rewriters/args_forward.rb, line 37
def on_super(node)
  fargs = extract_fargs(node)
  return super(node) unless fargs

  process_fargs(node, fargs)
end

Private Instance Methods

extract_fargs(node) click to toggle source
# File lib/ruby-next/language/rewriters/args_forward.rb, line 46
def extract_fargs(node)
  node.children.find { |child| child.is_a?(::Parser::AST::Node) && child.type == :forwarded_args }
end
forwarded_args() click to toggle source
# File lib/ruby-next/language/rewriters/args_forward.rb, line 64
def forwarded_args
  [
    s(:splat, s(:lvar, REST)),
    s(:block_pass, s(:lvar, BLOCK))
  ]
end
process_fargs(node, fargs) click to toggle source
# File lib/ruby-next/language/rewriters/args_forward.rb, line 50
def process_fargs(node, fargs)
  replace(fargs.loc.expression, "*#{REST}, &#{BLOCK}")

  process(
    node.updated(
      nil,
      [
        *node.children.take(node.children.index(fargs)),
        *forwarded_args
      ]
    )
  )
end