Sha256: 7b89504af8d28e6183042100d353c39adfc72d809032a421a252c27126829f3d

Contents?: true

Size: 1.05 KB

Versions: 6

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

module RubyNext
  module Language
    module Rewriters
      class NumberedParams < Base
        using RubyNext

        NAME = "numbered-params"
        SYNTAX_PROBE = "proc { _1 }.call(1)"
        MIN_SUPPORTED_VERSION = Gem::Version.new("2.7.0")

        def on_numblock(node)
          context.track! self

          proc_or_lambda, num, body = *node.children

          if proc_or_lambda.type == :lambda
            insert_before(node.loc.begin, "(#{unparse(proc_args(num))})")
          else
            insert_after(node.loc.begin, " |#{unparse(proc_args(num))}|")
          end

          node.updated(
            :block,
            [
              proc_or_lambda,
              proc_args(num),
              body
            ]
          )
        end

        private

        def proc_args(n)
          return s(:args, s(:procarg0, s(:arg, :_1))) if n == 1

          (1..n).map do |numero|
            s(:arg, :"_#{numero}")
          end.then do |args|
            s(:args, *args)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby-next-core-0.10.4 lib/ruby-next/language/rewriters/numbered_params.rb
ruby-next-core-0.10.3 lib/ruby-next/language/rewriters/numbered_params.rb
ruby-next-core-0.10.2 lib/ruby-next/language/rewriters/numbered_params.rb
ruby-next-core-0.10.1 lib/ruby-next/language/rewriters/numbered_params.rb
ruby-next-core-0.10.0 lib/ruby-next/language/rewriters/numbered_params.rb
ruby-next-core-0.9.2 lib/ruby-next/language/rewriters/numbered_params.rb