Class: RuboCop::Cop::Rails::RefuteMethods

Inherits:
RuboCop::Cop show all
Includes:
ConfigurableEnforcedStyle
Defined in:
lib/rubocop/cop/rails/refute_methods.rb

Overview

Use ‘assert_not` methods instead of `refute` methods.

Examples:

EnforcedStyle: assert_not (default)

# bad
refute false
refute_empty [1, 2, 3]
refute_equal true, false

# good
assert_not false
assert_not_empty [1, 2, 3]
assert_not_equal true, false

EnforcedStyle: refute

# bad
assert_not false
assert_not_empty [1, 2, 3]
assert_not_equal true, false

# good
refute false
refute_empty [1, 2, 3]
refute_equal true, false

Constant Summary collapse

MSG =
'Prefer `%<good_method>s` over `%<bad_method>s`.'
CORRECTIONS =
{
  refute:             :assert_not,
  refute_empty:       :assert_not_empty,
  refute_equal:       :assert_not_equal,
  refute_in_delta:    :assert_not_in_delta,
  refute_in_epsilon:  :assert_not_in_epsilon,
  refute_includes:    :assert_not_includes,
  refute_instance_of: :assert_not_instance_of,
  refute_kind_of:     :assert_not_kind_of,
  refute_nil:         :assert_not_nil,
  refute_operator:    :assert_not_operator,
  refute_predicate:   :assert_not_predicate,
  refute_respond_to:  :assert_not_respond_to,
  refute_same:        :assert_not_same,
  refute_match:       :assert_no_match
}.freeze
REFUTE_METHODS =
CORRECTIONS.keys.freeze
ASSERT_NOT_METHODS =
CORRECTIONS.values.freeze

Instance Method Summary collapse

Instance Method Details

#autocorrect(node) ⇒ Object



65
66
67
68
69
70
71
72
# File 'lib/rubocop/cop/rails/refute_methods.rb', line 65

def autocorrect(node)
  bad_method = node.method_name
  good_method = convert_good_method(bad_method)

  lambda do |corrector|
    corrector.replace(node.loc.selector, good_method.to_s)
  end
end

#on_send(node) ⇒ Object



58
59
60
61
62
63
# File 'lib/rubocop/cop/rails/refute_methods.rb', line 58

def on_send(node)
  return unless offensive?(node)

  message = offense_message(node.method_name)
  add_offense(node, location: :selector, message: message)
end