Sha256: 454f161e69f873e96ae67f7771a87a44975380041e2a02bba8c709c9561d3e9d

Contents?: true

Size: 1.14 KB

Versions: 7

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

module RubyNext
  module Language
    module Rewriters
      class ArgsForward < Base
        SYNTAX_PROBE = "obj = Object.new; def obj.foo(...) super(...); end"
        MIN_SUPPORTED_VERSION = Gem::Version.new("2.7.0")

        REST = :__rest__
        BLOCK = :__block__

        def on_forward_args(node)
          context.track! self

          node.updated(
            :args,
            [
              s(:restarg, REST),
              s(:blockarg, BLOCK)
            ]
          )
        end

        def on_send(node)
          return unless node.children[2]&.type == :forwarded_args

          node.updated(
            nil,
            [
              *node.children[0..1],
              *forwarded_args
            ]
          )
        end

        def on_super(node)
          return unless node.children[0]&.type == :forwarded_args

          node.updated(
            nil,
            forwarded_args
          )
        end

        private

        def forwarded_args
          [
            s(:splat, s(:lvar, REST)),
            s(:block_pass, s(:lvar, BLOCK))
          ]
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
ruby-next-core-0.4.0 lib/ruby-next/language/rewriters/args_forward.rb
ruby-next-0.3.0 lib/ruby-next/language/rewriters/args_forward.rb
ruby-next-core-0.3.0 lib/ruby-next/language/rewriters/args_forward.rb
ruby-next-0.2.0 lib/ruby-next/language/rewriters/args_forward.rb
ruby-next-core-0.2.0 lib/ruby-next/language/rewriters/args_forward.rb
ruby-next-0.1.1 lib/ruby-next/language/rewriters/args_forward.rb
ruby-next-0.1.0 lib/ruby-next/language/rewriters/args_forward.rb