Add custom cop to refactor revision to rebuild in bottle block
This commit is contained in:
parent
10b8d27d11
commit
483c40fb03
@ -6,6 +6,12 @@ AllCops:
|
||||
- '**/Casks/**/*'
|
||||
- '**/vendor/**/*'
|
||||
|
||||
require:
|
||||
- ./Homebrew/rubocops/bottle_block_cop.rb
|
||||
|
||||
CustomCops/CorrectBottleBlock:
|
||||
Enabled: true
|
||||
|
||||
Metrics/AbcSize:
|
||||
Enabled: false
|
||||
|
||||
|
||||
54
Library/Homebrew/rubocops/bottle_block_cop.rb
Normal file
54
Library/Homebrew/rubocops/bottle_block_cop.rb
Normal file
@ -0,0 +1,54 @@
|
||||
module RuboCop
|
||||
module Cop
|
||||
module CustomCops
|
||||
class CorrectBottleBlock < Cop
|
||||
MSG = 'Use rebuild instead of revision in bottle block'.freeze
|
||||
|
||||
def on_block(node)
|
||||
return if block_length(node).zero?
|
||||
method, _args, _body = *node
|
||||
|
||||
keyword, method_name = *method
|
||||
|
||||
if method_name.equal?(:bottle) and has_revision?(_body)
|
||||
add_offense(node, :expression)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def autocorrect(node)
|
||||
->(corrector) do
|
||||
# Check for revision
|
||||
method, _args, _body = *node
|
||||
if has_revision?(_body)
|
||||
replace_revision(corrector, node)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def has_revision?(body)
|
||||
body.children.each do |method_call_node|
|
||||
_receiver, _method_name, *args = *method_call_node
|
||||
if _method_name == :revision
|
||||
return true
|
||||
end
|
||||
end
|
||||
false
|
||||
end
|
||||
|
||||
def replace_revision(corrector, node)
|
||||
new_source = String.new
|
||||
node.source.each_line do |line|
|
||||
if line =~ /\A\s*revision/
|
||||
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
|
||||
Loading…
x
Reference in New Issue
Block a user