class RuboCop::Cop::Style::KeywordParametersOrder
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 # bad do_something do |first: false, second:, third: 10| # body omitted end # good do_something do |second:, first: false, third: 10| # body omitted end
Constants
- MSG
Public Instance Methods
on_kwoptarg(node)
click to toggle source
# 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
Private Instance Methods
append_newline_to_last_kwoptarg(arguments, corrector)
click to toggle source
# File lib/rubocop/cop/style/keyword_parameters_order.rb, line 58 def append_newline_to_last_kwoptarg(arguments, corrector) last_argument = arguments.last return if last_argument.kwrestarg_type? || last_argument.blockarg_type? last_kwoptarg = arguments.reverse.find(&:kwoptarg_type?) corrector.insert_after(last_kwoptarg, "\n") unless arguments.parent.block_type? end
remove_kwargs(kwarg_nodes, corrector)
click to toggle source
# File lib/rubocop/cop/style/keyword_parameters_order.rb, line 66 def remove_kwargs(kwarg_nodes, corrector) kwarg_nodes.each do |kwarg| with_space = range_with_surrounding_space(kwarg.source_range) corrector.remove(range_with_surrounding_comma(with_space, :left)) end end