lib/rubocop/cop/rails/blank.rb in rubocop-rails-2.8.1 vs lib/rubocop/cop/rails/blank.rb in rubocop-rails-2.9.0
- old
+ new
@@ -51,15 +51,18 @@
#
# # good
# def blank?
# !present?
# end
- class Blank < Cop
+ class Blank < Base
+ extend AutoCorrector
+
MSG_NIL_OR_EMPTY = 'Use `%<prefer>s` instead of `%<current>s`.'
MSG_NOT_PRESENT = 'Use `%<prefer>s` instead of `%<current>s`.'
MSG_UNLESS_PRESENT = 'Use `if %<prefer>s` instead of ' \
'`%<current>s`.'
+ RESTRICT_ON_SEND = %i[!].freeze
# `(send nil $_)` is not actually a valid match for an offense. Nodes
# that have a single method call on the left hand side
# (`bar || foo.empty?`) will blow up when checking
# `(send (:nil) :== $_)`.
@@ -91,27 +94,27 @@
not_present?(node) do |receiver|
# accepts !present? if its in the body of a `blank?` method
next if defining_blank?(node.parent)
- add_offense(node,
- message: format(MSG_NOT_PRESENT,
- prefer: replacement(receiver),
- current: node.source))
+ message = format(MSG_NOT_PRESENT, prefer: replacement(receiver), current: node.source)
+ add_offense(node, message: message) do |corrector|
+ autocorrect(corrector, node)
+ end
end
end
def on_or(node)
return unless cop_config['NilOrEmpty']
nil_or_empty?(node) do |var1, var2|
return unless var1 == var2
- add_offense(node,
- message: format(MSG_NIL_OR_EMPTY,
- prefer: replacement(var1),
- current: node.source))
+ message = format(MSG_NIL_OR_EMPTY, prefer: replacement(var1), current: node.source)
+ add_offense(node, message: message) do |corrector|
+ autocorrect(corrector, node)
+ end
end
end
def on_if(node)
return unless cop_config['UnlessPresent']
@@ -119,34 +122,31 @@
return if node.else? && config.for_cop('Style/UnlessElse')['Enabled']
unless_present?(node) do |method_call, receiver|
range = unless_condition(node, method_call)
- add_offense(node,
- location: range,
- message: format(MSG_UNLESS_PRESENT,
- prefer: replacement(receiver),
- current: range.source))
+ message = format(MSG_UNLESS_PRESENT, prefer: replacement(receiver), current: range.source)
+ add_offense(range, message: message) do |corrector|
+ autocorrect(corrector, node)
+ end
end
end
- def autocorrect(node)
- lambda do |corrector|
- method_call, variable1 = unless_present?(node)
+ private
- if method_call
- corrector.replace(node.loc.keyword, 'if')
- range = method_call.loc.expression
- else
- variable1, _variable2 = nil_or_empty?(node) || not_present?(node)
- range = node.loc.expression
- end
+ def autocorrect(corrector, node)
+ method_call, variable1 = unless_present?(node)
- corrector.replace(range, replacement(variable1))
+ if method_call
+ corrector.replace(node.loc.keyword, 'if')
+ range = method_call.loc.expression
+ else
+ variable1, _variable2 = nil_or_empty?(node) || not_present?(node)
+ range = node.loc.expression
end
- end
- private
+ corrector.replace(range, replacement(variable1))
+ end
def unless_condition(node, method_call)
if node.modifier_form?
node.loc.keyword.join(node.loc.expression.end)
else