2017-01-18 15:54:47 +05:30
|
|
|
module RuboCop
|
|
|
|
module Cop
|
2017-01-18 15:55:32 +05:30
|
|
|
module CustomCops
|
2017-01-18 15:54:47 +05:30
|
|
|
class CorrectBottleBlock < Cop
|
2017-01-18 15:55:32 +05:30
|
|
|
MSG = "Use rebuild instead of revision in bottle block".freeze
|
2017-01-18 15:54:47 +05:30
|
|
|
|
|
|
|
def on_block(node)
|
|
|
|
return if block_length(node).zero?
|
2017-01-18 15:55:32 +05:30
|
|
|
method, _args, body = *node
|
|
|
|
_keyword, method_name = *method
|
2017-01-18 15:54:47 +05:30
|
|
|
|
2017-01-18 22:37:11 +05:30
|
|
|
return unless method_name == :bottle
|
|
|
|
check_revision?(body)
|
2017-01-18 15:54:47 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def autocorrect(node)
|
2017-01-18 15:55:32 +05:30
|
|
|
lambda do |corrector|
|
2017-01-18 22:37:11 +05:30
|
|
|
correction = node.source.sub("revision", "rebuild")
|
|
|
|
corrector.insert_before(node.source_range, correction)
|
|
|
|
corrector.remove(node.source_range)
|
2017-01-18 15:54:47 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-01-18 22:37:11 +05:30
|
|
|
def check_revision?(body)
|
2017-01-18 15:54:47 +05:30
|
|
|
body.children.each do |method_call_node|
|
2017-01-18 15:55:32 +05:30
|
|
|
_receiver, method_name, _args = *method_call_node
|
2017-01-18 22:37:11 +05:30
|
|
|
next unless method_name == :revision
|
|
|
|
add_offense(method_call_node, :expression)
|
2017-01-18 15:54:47 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|