Class: RuboCop::Cop::Style::KeywordParametersOrder

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
RangeHelp
Defined in:
lib/rubocop/cop/style/keyword_parameters_order.rb

Overview

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.

Examples:

# bad
def some_method(first: false, second:, third: 10)
  # body omitted
end

# good
def some_method(second:, first: false, third: 10)
  # body omitted
end

# bad
do_something do |first: false, second:, third: 10|
  # body omitted
end

# good
do_something do |second:, first: false, third: 10|
  # body omitted
end

Constant Summary collapse

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

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods inherited from Base

#add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Instance Method Details

#on_kwoptarg(node) ⇒ Object


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rubocop/cop/style/keyword_parameters_order.rb', line 40

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(', ')}, ")

      arguments = node.each_ancestor(:def, :defs, :block).first.arguments
      append_newline_to_last_kwoptarg(arguments, corrector) unless parentheses?(arguments)

      remove_kwargs(kwarg_nodes, corrector)
    end
  end
end