brew/Library/Homebrew/rubocops/bottle_block_cop.rb

53 lines
1.4 KiB
Ruby
Raw Normal View History

module RuboCop
module Cop
2017-01-18 15:55:32 +05:30
module CustomCops
class CorrectBottleBlock < Cop
2017-01-18 15:55:32 +05:30
MSG = "Use rebuild instead of revision in bottle block".freeze
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:55:32 +05:30
return unless method_name.equal?(:bottle) && revision?(body)
add_offense(node, :expression)
end
private
def autocorrect(node)
2017-01-18 15:55:32 +05:30
lambda do |corrector|
# Check for revision
2017-01-18 15:55:32 +05:30
_method, _args, body = *node
if revision?(body)
replace_revision(corrector, node)
end
end
end
2017-01-18 15:55:32 +05:30
def revision?(body)
body.children.each do |method_call_node|
2017-01-18 15:55:32 +05:30
_receiver, method_name, _args = *method_call_node
if method_name == :revision
return true
end
end
false
end
def replace_revision(corrector, node)
2017-01-18 15:55:32 +05:30
new_source = ""
node.source.each_line do |line|
if line =~ /\A\s*revision/
2017-01-18 15:55:32 +05:30
line = line.sub("revision", "rebuild")
end
new_source << line
end
corrector.insert_before(node.source_range, new_source)
corrector.remove(node.source_range)
end
end
end
end
end