Sha256: 97dab3c2199f80af5b38011ba393730d8132a020a7efc3288ff8bcd9989fc2b8

Contents?: true

Size: 1.57 KB

Versions: 12

Compression:

Stored size: 1.57 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Style
      # This cop enforces that optional keyword parameters are placed at the
      # end of the parameters list.
      #
      # This improves readability, because when looking through the source,
      # it is expected to find required parameters at the beginning of parameters list
      # and optional parameters at the end.
      #
      # @example
      #   # bad
      #   def some_method(first: false, second:, third: 10)
      #     # body omitted
      #   end
      #
      #   # good
      #   def some_method(second:, first: false, third: 10)
      #     # body omitted
      #   end
      #
      class KeywordParametersOrder < Base
        include RangeHelp
        extend AutoCorrector

        MSG = 'Place optional keyword parameters at the end of the parameters list.'

        def on_kwoptarg(node)
          kwarg_nodes = node.right_siblings.select(&:kwarg_type?)
          return if kwarg_nodes.empty?

          add_offense(node) do |corrector|
            if node.parent.find(&:kwoptarg_type?) == node
              corrector.insert_before(node, "#{kwarg_nodes.map(&:source).join(', ')}, ")
              remove_kwargs(kwarg_nodes, corrector)
            end
          end
        end

        private

        def remove_kwargs(kwarg_nodes, corrector)
          kwarg_nodes.each do |kwarg|
            with_space = range_with_surrounding_space(range: kwarg.source_range)
            corrector.remove(range_with_surrounding_comma(with_space, :left))
          end
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
plaid-14.13.0 vendor/bundle/ruby/3.0.0/gems/rubocop-0.91.1/lib/rubocop/cop/style/keyword_parameters_order.rb
plaid-14.12.1 vendor/bundle/ruby/3.0.0/gems/rubocop-0.91.1/lib/rubocop/cop/style/keyword_parameters_order.rb
plaid-14.12.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/style/keyword_parameters_order.rb
plaid-14.11.1 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/style/keyword_parameters_order.rb
plaid-14.10.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/style/keyword_parameters_order.rb
plaid-14.7.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/style/keyword_parameters_order.rb
rubocop-1.1.0 lib/rubocop/cop/style/keyword_parameters_order.rb
rubocop-1.0.0 lib/rubocop/cop/style/keyword_parameters_order.rb
rubocop-0.93.1 lib/rubocop/cop/style/keyword_parameters_order.rb
rubocop-0.93.0 lib/rubocop/cop/style/keyword_parameters_order.rb
rubocop-0.92.0 lib/rubocop/cop/style/keyword_parameters_order.rb
rubocop-0.91.1 lib/rubocop/cop/style/keyword_parameters_order.rb