diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml
index 29a891e2ad..30b9ec81e7 100644
--- a/Library/.rubocop.yml
+++ b/Library/.rubocop.yml
@@ -6,6 +6,11 @@ AllCops:
- '**/Casks/**/*'
- '**/vendor/**/*'
+require: ./Homebrew/rubocops.rb
+
+Homebrew/CorrectBottleBlock:
+ Enabled: true
+
Metrics/AbcSize:
Enabled: false
diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb
index e3ba46fe74..0e7c110052 100644
--- a/Library/Homebrew/dev-cmd/audit.rb
+++ b/Library/Homebrew/dev-cmd/audit.rb
@@ -1,4 +1,4 @@
-#: * `audit` [`--strict`] [`--online`] [`--new-formula`] [`--display-cop-names`] [`--display-filename`] []:
+#: * `audit` [`--strict`] [`--fix`] [`--online`] [`--new-formula`] [`--display-cop-names`] [`--display-filename`] []:
#: Check for Homebrew coding style violations. This should be
#: run before submitting a new formula.
#:
@@ -7,6 +7,9 @@
#: If `--strict` is passed, additional checks are run, including RuboCop
#: style checks.
#:
+#: If `--fix` is passed, style violations will be
+#: automatically fixed using RuboCop's `--auto-correct` feature.
+#:
#: If `--online` is passed, additional slower checks that require a network
#: connection are run.
#:
@@ -62,8 +65,9 @@ module Homebrew
end
if strict
+ options = { fix: ARGV.flag?("--fix"), realpath: true }
# Check style in a single batch run up front for performance
- style_results = check_style_json(files, realpath: true)
+ style_results = check_style_json(files, options)
end
ff.each do |f|
diff --git a/Library/Homebrew/rubocops.rb b/Library/Homebrew/rubocops.rb
new file mode 100644
index 0000000000..1a28dd2134
--- /dev/null
+++ b/Library/Homebrew/rubocops.rb
@@ -0,0 +1 @@
+require_relative "./rubocops/bottle_block_cop"
diff --git a/Library/Homebrew/rubocops/bottle_block_cop.rb b/Library/Homebrew/rubocops/bottle_block_cop.rb
new file mode 100644
index 0000000000..55eb551524
--- /dev/null
+++ b/Library/Homebrew/rubocops/bottle_block_cop.rb
@@ -0,0 +1,36 @@
+module RuboCop
+ module Cop
+ module Homebrew
+ 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
+
+ return unless method_name == :bottle
+ check_revision?(body)
+ end
+
+ private
+
+ def autocorrect(node)
+ lambda do |corrector|
+ correction = node.source.sub("revision", "rebuild")
+ corrector.insert_before(node.source_range, correction)
+ corrector.remove(node.source_range)
+ end
+ end
+
+ def check_revision?(body)
+ body.children.each do |method_call_node|
+ _receiver, method_name, _args = *method_call_node
+ next unless method_name == :revision
+ add_offense(method_call_node, :expression)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/docs/brew.1.html b/docs/brew.1.html
index c8f6f2b686..3b2c3d5bb9 100644
--- a/docs/brew.1.html
+++ b/docs/brew.1.html
@@ -453,7 +453,7 @@ the prefix
and repository
are the same directory.
<
DEVELOPER COMMANDS
-audit
[--strict
] [--online
] [--new-formula
] [--display-cop-names
] [--display-filename
] [formulae]Check formulae for Homebrew coding style violations. This should be
+
audit
[--strict
] [--fix
] [--online
] [--new-formula
] [--display-cop-names
] [--display-filename
] [formulae]Check formulae for Homebrew coding style violations. This should be
run before submitting a new formula.
If no formulae are provided, all of them are checked.
@@ -461,6 +461,9 @@ run before submitting a new formula.
If --strict
is passed, additional checks are run, including RuboCop
style checks.
+If --fix
is passed, style violations will be
+automatically fixed using RuboCop's --auto-correct
feature.
+
If --online
is passed, additional slower checks that require a network
connection are run.
diff --git a/manpages/brew.1 b/manpages/brew.1
index dd3c19c3b4..45f3ec4067 100644
--- a/manpages/brew.1
+++ b/manpages/brew.1
@@ -625,7 +625,7 @@ Print the version number of Homebrew to standard output and exit\.
.SH "DEVELOPER COMMANDS"
.
.TP
-\fBaudit\fR [\fB\-\-strict\fR] [\fB\-\-online\fR] [\fB\-\-new\-formula\fR] [\fB\-\-display\-cop\-names\fR] [\fB\-\-display\-filename\fR] [\fIformulae\fR]
+\fBaudit\fR [\fB\-\-strict\fR] [\fB\-\-fix\fR] [\fB\-\-online\fR] [\fB\-\-new\-formula\fR] [\fB\-\-display\-cop\-names\fR] [\fB\-\-display\-filename\fR] [\fIformulae\fR]
Check \fIformulae\fR for Homebrew coding style violations\. This should be run before submitting a new formula\.
.
.IP
@@ -635,6 +635,9 @@ If no \fIformulae\fR are provided, all of them are checked\.
If \fB\-\-strict\fR is passed, additional checks are run, including RuboCop style checks\.
.
.IP
+If \fB\-\-fix\fR is passed, style violations will be automatically fixed using RuboCop\'s \fB\-\-auto\-correct\fR feature\.
+.
+.IP
If \fB\-\-online\fR is passed, additional slower checks that require a network connection are run\.
.
.IP