class RuboCop::Cop::Performance::SortReverse

This cop identifies places where `sort { |a, b| b <=> a }` can be replaced by a faster `sort.reverse`.

@example

# bad
array.sort { |a, b| b <=> a }

# good
array.sort.reverse

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/performance/sort_reverse.rb, line 22
def on_block(node)
  sort_with_block?(node) do |send, var_a, var_b, body|
    replaceable_body?(body, var_b, var_a) do
      range = sort_range(send, node)

      add_offense(range, message: message(var_a, var_b)) do |corrector|
        replacement = 'sort.reverse'

        corrector.replace(range, replacement)
      end
    end
  end
end

Private Instance Methods

message(var_a, var_b) click to toggle source
# File lib/rubocop/cop/performance/sort_reverse.rb, line 38
def message(var_a, var_b)
  bad_method = "sort { |#{var_a}, #{var_b}| #{var_b} <=> #{var_a} }"
  format(MSG, bad_method: bad_method)
end