class RuboCop::Cop::AliasMethodOrderVerifier

This verifies a method is defined before its alias

Constants

ALIAS_BEFORE_METHOD_WARNING_FMT

Disable cop for freezing on Ruby 2.2 rubocop:disable Style/RedundantFreeze

Public Class Methods

verify!(current_node, previous_node) click to toggle source

rubocop:disable Style/GuardClause

# File lib/rubocop/cop/alias_method_order_verifier.rb, line 22
def verify!(current_node, previous_node)
  if moving_after_alias?(current_node, previous_node)
    ignore_node(current_node)
    raise_warning!(current_node.method_name, previous_node.method_name)
  end
  if moving_after_alias?(previous_node, current_node)
    ignore_node(previous_node)
    raise_warning!(previous_node.method_name, current_node.method_name)
  end
end

Private Class Methods

find_aliases(current_node, siblings) click to toggle source

rubocop:enable Style/GuardClause

# File lib/rubocop/cop/alias_method_order_verifier.rb, line 36
def find_aliases(current_node, siblings)
  siblings.select do |sibling|
    (alias?(sibling) || alias_method?(sibling)) ==
      current_node.method_name
  end
end
moving_after_alias?(current_node, previous_node) click to toggle source

We don't want a method to be defined after its alias

# File lib/rubocop/cop/alias_method_order_verifier.rb, line 44
def moving_after_alias?(current_node, previous_node)
  siblings = current_node.parent.children
  current_node_aliases = find_aliases(current_node, siblings)
  filter = current_node_aliases.delete_if do |cna|
    cna.sibling_index > current_node.sibling_index
  end
  return false if filter.empty?

  current_node_aliases.any? do |cna|
    previous_node.sibling_index > cna.sibling_index
  end
end
raise_warning!(first_method_name, second_method_name) click to toggle source
# File lib/rubocop/cop/alias_method_order_verifier.rb, line 57
def raise_warning!(first_method_name, second_method_name)
  raise Warning, format(
    ALIAS_BEFORE_METHOD_WARNING_FMT,
    first_method_name: first_method_name,
    second_method_name: second_method_name
  )
end