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