Refactor FormulaCop as a mixin

This commit is contained in:
Douglas Eichelberger 2023-02-20 10:22:39 -08:00
parent 7e48ed50f7
commit d9db5e8825
28 changed files with 164 additions and 107 deletions

View File

@ -47,11 +47,6 @@ Cask/StanzaOrder:
Description: "Ensure that cask stanzas are sorted correctly. More info at https://docs.brew.sh/Cask-Cookbook#stanza-order" Description: "Ensure that cask stanzas are sorted correctly. More info at https://docs.brew.sh/Cask-Cookbook#stanza-order"
Enabled: true Enabled: true
# This was intended to be an abstract Cop class for Homebrew formulae, but rubocop doesn't know that.
# TODO: refactor this as a module for formulae Cop classes to include instead
FormulaCop:
Enabled: false
# enable all formulae audits # enable all formulae audits
FormulaAudit: FormulaAudit:
Enabled: true Enabled: true

View File

@ -13,29 +13,30 @@ Warnings.ignore :parser_syntax do
end end
require_relative "io_read" require_relative "io_read"
require_relative "move_to_extend_os"
require_relative "shell_commands" require_relative "shell_commands"
require_relative "platform"
require_relative "formula_desc" # formula audit cops
require_relative "components_order" require_relative "bottle"
require_relative "components_redundancy"
require_relative "dependency_order"
require_relative "homepage"
require_relative "text"
require_relative "caveats" require_relative "caveats"
require_relative "checksum" require_relative "checksum"
require_relative "patches" require_relative "class"
require_relative "components_order"
require_relative "components_redundancy"
require_relative "conflicts" require_relative "conflicts"
require_relative "options" require_relative "dependency_order"
require_relative "urls" require_relative "deprecate_disable"
require_relative "desc"
require_relative "files"
require_relative "homepage"
require_relative "keg_only"
require_relative "lines" require_relative "lines"
require_relative "livecheck" require_relative "livecheck"
require_relative "class" require_relative "options"
require_relative "patches"
require_relative "text"
require_relative "urls"
require_relative "uses_from_macos" require_relative "uses_from_macos"
require_relative "files"
require_relative "keg_only"
require_relative "version" require_relative "version"
require_relative "deprecate_disable"
require_relative "bottle"
require_relative "rubocop-cask" require_relative "rubocop-cask"

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,8 @@ module RuboCop
# This cop audits the `bottle` block in formulae. # This cop audits the `bottle` block in formulae.
# #
# @api private # @api private
class BottleFormat < FormulaCop class BottleFormat < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -56,7 +57,8 @@ module RuboCop
# This cop audits the indentation of the bottle tags in the `bottle` block in formulae. # This cop audits the indentation of the bottle tags in the `bottle` block in formulae.
# #
# @api private # @api private
class BottleTagIndentation < FormulaCop class BottleTagIndentation < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -92,7 +94,8 @@ module RuboCop
# This cop audits the indentation of the sha256 digests in the`bottle` block in formulae. # This cop audits the indentation of the sha256 digests in the`bottle` block in formulae.
# #
# @api private # @api private
class BottleDigestIndentation < FormulaCop class BottleDigestIndentation < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -128,7 +131,8 @@ module RuboCop
# This cop audits the order of the `bottle` block in formulae. # This cop audits the order of the `bottle` block in formulae.
# #
# @api private # @api private
class BottleOrder < FormulaCop class BottleOrder < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -24,7 +24,9 @@ module RuboCop
# end # end
# #
# @api private # @api private
class Caveats < FormulaCop class Caveats < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node) def audit_formula(_node, _class_node, _parent_class_node, _body_node)
caveats_strings.each do |n| caveats_strings.each do |n|
if regex_match_group(n, /\bsetuid\b/i) if regex_match_group(n, /\bsetuid\b/i)

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,9 @@ module RuboCop
# This cop makes sure that deprecated checksums are not used. # This cop makes sure that deprecated checksums are not used.
# #
# @api private # @api private
class Checksum < FormulaCop class Checksum < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -45,7 +47,8 @@ module RuboCop
# This cop makes sure that checksum strings are lowercase. # This cop makes sure that checksum strings are lowercase.
# #
# @api private # @api private
class ChecksumCase < FormulaCop class ChecksumCase < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,8 @@ module RuboCop
# This cop makes sure that {Formula} is used as superclass. # This cop makes sure that {Formula} is used as superclass.
# #
# @api private # @api private
class ClassName < FormulaCop class ClassName < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
DEPRECATED_CLASSES = %w[ DEPRECATED_CLASSES = %w[
@ -31,7 +32,8 @@ module RuboCop
# This cop makes sure that a `test` block contains a proper test. # This cop makes sure that a `test` block contains a proper test.
# #
# @api private # @api private
class Test < FormulaCop class Test < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -74,7 +76,8 @@ module RuboCop
# This cop makes sure that a `test` block exists. # This cop makes sure that a `test` block exists.
# #
# @api private # @api private
class TestPresent < FormulaCop class TestPresent < Base
include FormulaCop
def audit_formula(_node, class_node, _parent_class_node, body_node) def audit_formula(_node, class_node, _parent_class_node, body_node)
return if find_block(body_node, :test) return if find_block(body_node, :test)

View File

@ -2,7 +2,7 @@
# frozen_string_literal: true # frozen_string_literal: true
require "ast_constants" require "ast_constants"
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -11,7 +11,8 @@ module RuboCop
# #
# - `component_precedence_list` has component hierarchy in a nested list # - `component_precedence_list` has component hierarchy in a nested list
# where each sub array contains components' details which are at same precedence level # where each sub array contains components' details which are at same precedence level
class ComponentsOrder < FormulaCop class ComponentsOrder < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -14,7 +14,9 @@ module RuboCop
# - `stable do` should not be present without a `head` spec # - `stable do` should not be present without a `head` spec
# #
# @api private # @api private
class ComponentsRedundancy < FormulaCop class ComponentsRedundancy < Base
include FormulaCop
HEAD_MSG = "`head` and `head do` should not be simultaneously present" HEAD_MSG = "`head` and `head do` should not be simultaneously present"
BOTTLE_MSG = "`bottle :modifier` and `bottle do` should not be simultaneously present" BOTTLE_MSG = "`bottle :modifier` and `bottle do` should not be simultaneously present"
STABLE_MSG = "`stable do` should not be present without a `head` spec" STABLE_MSG = "`stable do` should not be present without a `head` spec"

View File

@ -1,13 +1,14 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
module FormulaAudit module FormulaAudit
# This cop audits versioned formulae for `conflicts_with`. # This cop audits versioned formulae for `conflicts_with`.
class Conflicts < FormulaCop class Conflicts < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
MSG = "Versioned formulae should not use `conflicts_with`. " \ MSG = "Versioned formulae should not use `conflicts_with`. " \

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -10,7 +10,8 @@ module RuboCop
# #
# precedence order: # precedence order:
# build-time > test > normal > recommended > optional # build-time > test > normal > recommended > optional
class DependencyOrder < FormulaCop class DependencyOrder < Base
include FormulaCop
extend T::Sig extend T::Sig
extend AutoCorrector extend AutoCorrector

View File

@ -1,13 +1,14 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
module FormulaAudit module FormulaAudit
# This cop audits `deprecate!` and `disable!` dates. # This cop audits `deprecate!` and `disable!` dates.
class DeprecateDisableDate < FormulaCop class DeprecateDisableDate < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -34,7 +35,8 @@ module RuboCop
end end
# This cop audits `deprecate!` and `disable!` reasons. # This cop audits `deprecate!` and `disable!` reasons.
class DeprecateDisableReason < FormulaCop class DeprecateDisableReason < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
PUNCTUATION_MARKS = %w[. ! ?].freeze PUNCTUATION_MARKS = %w[. ! ?].freeze

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
require "rubocops/shared/desc_helper" require "rubocops/shared/desc_helper"
module RuboCop module RuboCop
@ -9,7 +9,8 @@ module RuboCop
module FormulaAudit module FormulaAudit
# This cop audits `desc` in formulae. # This cop audits `desc` in formulae.
# See the {DescHelper} module for details of the checks. # See the {DescHelper} module for details of the checks.
class Desc < FormulaCop class Desc < Base
include FormulaCop
include DescHelper include DescHelper
extend AutoCorrector extend AutoCorrector

View File

@ -5,10 +5,11 @@ require "rubocops/shared/helper_functions"
module RuboCop module RuboCop
module Cop module Cop
# Superclass for all formula cops. # Mixin for all formula cops.
# #
# @api private # @api private
class FormulaCop < Base module FormulaCop
extend RuboCop::AST::NodePattern::Macros
include RangeHelp include RangeHelp
include HelperFunctions include HelperFunctions
@ -67,11 +68,7 @@ module RuboCop
# Returns true if given dependency name and dependency type exist in given dependency method call node. # Returns true if given dependency name and dependency type exist in given dependency method call node.
# TODO: Add case where key of hash is an array # TODO: Add case where key of hash is an array
def depends_on_name_type?(node, name = nil, type = :required) def depends_on_name_type?(node, name = nil, type = :required)
name_match = if name name_match = !name # Match only by type when name is nil
false
else
true # Match only by type when name is nil
end
case type case type
when :required when :required

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,9 @@ module RuboCop
# This cop makes sure that a formula's file permissions are correct. # This cop makes sure that a formula's file permissions are correct.
# #
# @api private # @api private
class Files < FormulaCop class Files < Base
include FormulaCop
def audit_formula(node, _class_node, _parent_class_node, _body_node) def audit_formula(node, _class_node, _parent_class_node, _body_node)
return unless file_path return unless file_path

View File

@ -1,13 +1,14 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
module FormulaAudit module FormulaAudit
# This cop audits the `homepage` URL in formulae. # This cop audits the `homepage` URL in formulae.
class Homepage < FormulaCop class Homepage < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, class_node, _parent_class_node, body_node) def audit_formula(_node, class_node, _parent_class_node, body_node)

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,8 @@ module RuboCop
# This cop makes sure that a `keg_only` reason has the correct format. # This cop makes sure that a `keg_only` reason has the correct format.
# #
# @api private # @api private
class KegOnly < FormulaCop class KegOnly < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)

View File

@ -2,7 +2,7 @@
# frozen_string_literal: true # frozen_string_literal: true
require "macos_versions" require "macos_versions"
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
require "rubocops/shared/on_system_conditionals_helper" require "rubocops/shared/on_system_conditionals_helper"
module RuboCop module RuboCop
@ -11,7 +11,8 @@ module RuboCop
# This cop checks for various miscellaneous Homebrew coding styles. # This cop checks for various miscellaneous Homebrew coding styles.
# #
# @api private # @api private
class Lines < FormulaCop class Lines < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node) def audit_formula(_node, _class_node, _parent_class_node, _body_node)
[:automake, :ant, :autoconf, :emacs, :expat, :libtool, :mysql, :perl, [:automake, :ant, :autoconf, :emacs, :expat, :libtool, :mysql, :perl,
:postgresql, :python, :python3, :rbenv, :ruby].each do |dependency| :postgresql, :python, :python3, :rbenv, :ruby].each do |dependency|
@ -34,7 +35,8 @@ module RuboCop
# This cop makes sure that a space is used for class inheritance. # This cop makes sure that a space is used for class inheritance.
# #
# @api private # @api private
class ClassInheritance < FormulaCop class ClassInheritance < Base
include FormulaCop
def audit_formula(_node, class_node, parent_class_node, _body_node) def audit_formula(_node, class_node, parent_class_node, _body_node)
begin_pos = start_column(parent_class_node) begin_pos = start_column(parent_class_node)
end_pos = end_column(class_node) end_pos = end_column(class_node)
@ -48,7 +50,8 @@ module RuboCop
# This cop makes sure that template comments are removed. # This cop makes sure that template comments are removed.
# #
# @api private # @api private
class Comments < FormulaCop class Comments < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node) def audit_formula(_node, _class_node, _parent_class_node, _body_node)
audit_comments do |comment| audit_comments do |comment|
[ [
@ -89,7 +92,8 @@ module RuboCop
# This cop makes sure that idiomatic `assert_*` statements are used. # This cop makes sure that idiomatic `assert_*` statements are used.
# #
# @api private # @api private
class AssertStatements < FormulaCop class AssertStatements < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -116,7 +120,8 @@ module RuboCop
# This cop makes sure that `option`s are used idiomatically. # This cop makes sure that `option`s are used idiomatically.
# #
# @api private # @api private
class OptionDeclarations < FormulaCop class OptionDeclarations < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -201,7 +206,8 @@ module RuboCop
# This cop makes sure that formulae depend on `open-mpi` instead of `mpich`. # This cop makes sure that formulae depend on `open-mpi` instead of `mpich`.
# #
# @api private # @api private
class MpiCheck < FormulaCop class MpiCheck < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -223,7 +229,8 @@ module RuboCop
# or run-time. # or run-time.
# #
# @api private # @api private
class PyoxidizerCheck < FormulaCop class PyoxidizerCheck < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -250,7 +257,8 @@ module RuboCop
# This cop makes sure that the safe versions of `popen_*` calls are used. # This cop makes sure that the safe versions of `popen_*` calls are used.
# #
# @api private # @api private
class SafePopenCommands < FormulaCop class SafePopenCommands < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -281,7 +289,8 @@ module RuboCop
# This cop makes sure that environment variables are passed correctly to `popen_*` calls. # This cop makes sure that environment variables are passed correctly to `popen_*` calls.
# #
# @api private # @api private
class ShellVariables < FormulaCop class ShellVariables < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -313,7 +322,8 @@ module RuboCop
# This cop makes sure that `license` has the correct format. # This cop makes sure that `license` has the correct format.
# #
# @api private # @api private
class LicenseArrays < FormulaCop class LicenseArrays < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -334,7 +344,8 @@ module RuboCop
# This cop makes sure that nested `license` declarations are split onto multiple lines. # This cop makes sure that nested `license` declarations are split onto multiple lines.
# #
# @api private # @api private
class Licenses < FormulaCop class Licenses < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -357,7 +368,8 @@ module RuboCop
# This cop makes sure that Python versions are consistent. # This cop makes sure that Python versions are consistent.
# #
# @api private # @api private
class PythonVersions < FormulaCop class PythonVersions < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -395,7 +407,8 @@ module RuboCop
# This cop makes sure that OS conditionals are consistent. # This cop makes sure that OS conditionals are consistent.
# #
# @api private # @api private
class OnSystemConditionals < FormulaCop class OnSystemConditionals < Base
include FormulaCop
include OnSystemConditionalsHelper include OnSystemConditionalsHelper
extend AutoCorrector extend AutoCorrector
@ -436,7 +449,8 @@ module RuboCop
# This cop makes sure that the `generate_completions_from_executable` DSL is used. # This cop makes sure that the `generate_completions_from_executable` DSL is used.
# #
# @api private # @api private
class GenerateCompletionsDSL < FormulaCop class GenerateCompletionsDSL < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -519,7 +533,8 @@ module RuboCop
# a single, combined call for all shells. # a single, combined call for all shells.
# #
# @api private # @api private
class SingleGenerateCompletionsDSLCall < FormulaCop class SingleGenerateCompletionsDSLCall < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -581,7 +596,8 @@ module RuboCop
# This cop checks for other miscellaneous style violations. # This cop checks for other miscellaneous style violations.
# #
# @api private # @api private
class Miscellaneous < FormulaCop class Miscellaneous < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -852,7 +868,8 @@ module RuboCop
# This cop makes sure that no build-time checks are performed. # This cop makes sure that no build-time checks are performed.
# #
# @api private # @api private
class MakeCheck < FormulaCop class MakeCheck < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if formula_tap != "homebrew-core" return if formula_tap != "homebrew-core"
@ -876,7 +893,8 @@ module RuboCop
end end
# This cop ensures that new formulae depending on removed Requirements are not used # This cop ensures that new formulae depending on removed Requirements are not used
class Requirements < FormulaCop class Requirements < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node) def audit_formula(_node, _class_node, _parent_class_node, _body_node)
problem "Formulae should depend on a versioned `openjdk` instead of :java" if depends_on? :java problem "Formulae should depend on a versioned `openjdk` instead of :java" if depends_on? :java
problem "Formulae should depend on specific X libraries instead of :x11" if depends_on? :x11 problem "Formulae should depend on specific X libraries instead of :x11" if depends_on? :x11

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -10,7 +10,8 @@ module RuboCop
# skipped formulae. # skipped formulae.
# #
# @api private # @api private
class LivecheckSkip < FormulaCop class LivecheckSkip < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -42,7 +43,8 @@ module RuboCop
# This cop ensures that a `url` is specified in the `livecheck` block. # This cop ensures that a `url` is specified in the `livecheck` block.
# #
# @api private # @api private
class LivecheckUrlProvided < FormulaCop class LivecheckUrlProvided < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
livecheck_node = find_block(body_node, :livecheck) livecheck_node = find_block(body_node, :livecheck)
return if livecheck_node.blank? return if livecheck_node.blank?
@ -66,7 +68,8 @@ module RuboCop
# is used when the livecheck `url` is identical to one of these formula URLs. # is used when the livecheck `url` is identical to one of these formula URLs.
# #
# @api private # @api private
class LivecheckUrlSymbol < FormulaCop class LivecheckUrlSymbol < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -123,7 +126,8 @@ module RuboCop
# This cop ensures that the `regex` call in the `livecheck` block uses parentheses. # This cop ensures that the `regex` call in the `livecheck` block uses parentheses.
# #
# @api private # @api private
class LivecheckRegexParentheses < FormulaCop class LivecheckRegexParentheses < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -150,7 +154,8 @@ module RuboCop
# `\.tgz`, `\.tar.gz` and variants. # `\.tgz`, `\.tar.gz` and variants.
# #
# @api private # @api private
class LivecheckRegexExtension < FormulaCop class LivecheckRegexExtension < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
TAR_PATTERN = /\\?\.t(ar|(g|l|x)z$|[bz2]{2,4}$)(\\?\.((g|l|x)z)|[bz2]{2,4}|Z)?$/i.freeze TAR_PATTERN = /\\?\.t(ar|(g|l|x)z$|[bz2]{2,4}$)(\\?\.((g|l|x)z)|[bz2]{2,4}|Z)?$/i.freeze
@ -183,7 +188,8 @@ module RuboCop
# in the `livecheck` block. # in the `livecheck` block.
# #
# @api private # @api private
class LivecheckRegexIfPageMatch < FormulaCop class LivecheckRegexIfPageMatch < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
livecheck_node = find_block(body_node, :livecheck) livecheck_node = find_block(body_node, :livecheck)
return if livecheck_node.blank? return if livecheck_node.blank?
@ -209,7 +215,8 @@ module RuboCop
# unless sensitivity is explicitly required for proper matching. # unless sensitivity is explicitly required for proper matching.
# #
# @api private # @api private
class LivecheckRegexCaseInsensitive < FormulaCop class LivecheckRegexCaseInsensitive < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
MSG = "Regexes should be case-insensitive unless sensitivity is explicitly required for proper matching." MSG = "Regexes should be case-insensitive unless sensitivity is explicitly required for proper matching."

View File

@ -1,13 +1,14 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
module FormulaAudit module FormulaAudit
# This cop audits `option`s in formulae. # This cop audits `option`s in formulae.
class Options < FormulaCop class Options < Base
include FormulaCop
DEPRECATION_MSG = "macOS has been 64-bit only since 10.6 so 32-bit options are deprecated." DEPRECATION_MSG = "macOS has been 64-bit only since 10.6 so 32-bit options are deprecated."
UNI_DEPRECATION_MSG = "macOS has been 64-bit only since 10.6 so universal options are deprecated." UNI_DEPRECATION_MSG = "macOS has been 64-bit only since 10.6 so universal options are deprecated."

View File

@ -1,14 +1,15 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
module FormulaAudit module FormulaAudit
# This cop audits `patch`es in formulae. # This cop audits `patch`es in formulae.
# TODO: Many of these could be auto-corrected. # TODO: Many of these could be auto-corrected.
class Patches < FormulaCop class Patches < Base
include FormulaCop
extend T::Sig extend T::Sig
extend AutoCorrector extend AutoCorrector

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,8 @@ module RuboCop
# This cop checks for various problems in a formula's source code. # This cop checks for various problems in a formula's source code.
# #
# @api private # @api private
class Text < FormulaCop class Text < Base
include FormulaCop
extend AutoCorrector extend AutoCorrector
def audit_formula(node, _class_node, _parent_class_node, body_node) def audit_formula(node, _class_node, _parent_class_node, body_node)
@ -106,7 +107,8 @@ module RuboCop
# This cop contains stricter checks for various problems in a formula's source code. # This cop contains stricter checks for various problems in a formula's source code.
# #
# @api private # @api private
class Text < FormulaCop class Text < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,9 @@ module RuboCop
# This cop audits `url`s and `mirror`s in formulae. # This cop audits `url`s and `mirror`s in formulae.
# #
# @api private # @api private
class Urls < FormulaCop class Urls < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
@ -260,7 +262,8 @@ module RuboCop
# This cop makes sure that the correct format for PyPI URLs is used. # This cop makes sure that the correct format for PyPI URLs is used.
# #
# @api private # @api private
class PyPiUrls < FormulaCop class PyPiUrls < Base
include FormulaCop
extend T::Sig extend T::Sig
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -294,7 +297,8 @@ module RuboCop
# This cop makes sure that git URLs have a `revision`. # This cop makes sure that git URLs have a `revision`.
# #
# @api private # @api private
class GitUrls < FormulaCop class GitUrls < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
return unless formula_tap == "homebrew-core" return unless formula_tap == "homebrew-core"
@ -318,7 +322,8 @@ module RuboCop
# This cop makes sure that git URLs have a `tag`. # This cop makes sure that git URLs have a `tag`.
# #
# @api private # @api private
class GitUrls < FormulaCop class GitUrls < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil? return if body_node.nil?
return unless formula_tap == "homebrew-core" return unless formula_tap == "homebrew-core"

View File

@ -1,13 +1,15 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
module FormulaAudit module FormulaAudit
# This cop audits formulae that are keg-only because they are provided by macos. # This cop audits formulae that are keg-only because they are provided by macos.
class ProvidedByMacos < FormulaCop class ProvidedByMacos < Base
include FormulaCop
PROVIDED_BY_MACOS_FORMULAE = %w[ PROVIDED_BY_MACOS_FORMULAE = %w[
apr apr
bc bc
@ -73,7 +75,9 @@ module RuboCop
end end
# This cop audits `uses_from_macos` dependencies in formulae. # This cop audits `uses_from_macos` dependencies in formulae.
class UsesFromMacos < FormulaCop class UsesFromMacos < Base
include FormulaCop
# These formulae aren't `keg_only :provided_by_macos` but are provided by # These formulae aren't `keg_only :provided_by_macos` but are provided by
# macOS (or very similarly, e.g. OpenSSL where system provides LibreSSL). # macOS (or very similarly, e.g. OpenSSL where system provides LibreSSL).
# TODO: consider making some of these keg-only. # TODO: consider making some of these keg-only.

View File

@ -1,7 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/extend/formula" require "rubocops/extend/formula_cop"
module RuboCop module RuboCop
module Cop module Cop
@ -9,7 +9,9 @@ module RuboCop
# This cop makes sure that a `version` is in the correct format. # This cop makes sure that a `version` is in the correct format.
# #
# @api private # @api private
class Version < FormulaCop class Version < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node) def audit_formula(_node, _class_node, _parent_class_node, body_node)
version_node = find_node_method_by_name(body_node, :version) version_node = find_node_method_by_name(body_node, :version)
return unless version_node return unless version_node

View File

@ -6963,7 +6963,7 @@ class RuboCop::Cop::FormulaAuditStrict::Text
def share_path_starts_with(param0, param1); end def share_path_starts_with(param0, param1); end
end end
class RuboCop::Cop::FormulaCop module RuboCop::Cop::FormulaCop
def dependency_name_hash_match?(param0, param1); end def dependency_name_hash_match?(param0, param1); end
def dependency_type_hash_match?(param0, param1); end def dependency_type_hash_match?(param0, param1); end

View File

@ -1,7 +1,7 @@
# typed: false # typed: false
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/formula_desc" require "rubocops/desc"
describe RuboCop::Cop::FormulaAudit::Desc do describe RuboCop::Cop::FormulaAudit::Desc do
subject(:cop) { described_class.new } subject(:cop) { described_class.new }

View File

@ -1,7 +1,7 @@
# typed: false # typed: false
# frozen_string_literal: true # frozen_string_literal: true
require "rubocops/platform" require "rubocops/move_to_extend_os"
describe RuboCop::Cop::Homebrew::MoveToExtendOS do describe RuboCop::Cop::Homebrew::MoveToExtendOS do
subject(:cop) { described_class.new } subject(:cop) { described_class.new }