class RuboCop::Cop::Style::KeywordParametersOrder


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

def on_kwoptarg(node)

def on_kwoptarg(node)
  kwarg_nodes = right_siblings_of(node).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

def remove_kwargs(kwarg_nodes, corrector)

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

def right_siblings_of(node)

TODO: Use API from `rubocop-ast` when released.
def right_siblings_of(node)
  node.parent.children[node.sibling_index + 1..-1]
end