Merge pull request #14732 from dduugg/formula-cop-mixin

Refactor FormulaCop as an abstract class
This commit is contained in:
Mike McQuaid 2023-02-21 23:05:58 +00:00 committed by GitHub
commit 7ac31f7d65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 56 additions and 52 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

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

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

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

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

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

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

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

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

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

View File

@ -5,13 +5,18 @@ require "rubocops/shared/helper_functions"
module RuboCop module RuboCop
module Cop module Cop
# Superclass for all formula cops. # Abstract base class for all formula cops.
# #
# @api private # @api private
class FormulaCop < Base class FormulaCop < Base
extend T::Sig
extend T::Helpers
include RangeHelp include RangeHelp
include HelperFunctions include HelperFunctions
abstract!
exclude_from_registry
attr_accessor :file_path attr_accessor :file_path
@registry = Cop.registry @registry = Cop.registry
@ -28,9 +33,16 @@ module RuboCop
audit_formula(node, class_node, parent_class_node, @body) audit_formula(node, class_node, parent_class_node, @body)
end end
def audit_formula(node, class_node, parent_class_node, body_node) sig {
raise NotImplementedError, "Subclasses must implement this method." abstract
end .params(
node: RuboCop::AST::ClassNode,
class_node: RuboCop::AST::ConstNode,
parent_class_node: RuboCop::AST::ConstNode,
body_node: RuboCop::AST::Node,
).void
}
def audit_formula(node, class_node, parent_class_node, body_node); end
# Yields to block when there is a match. # Yields to block when there is a match.
# #
@ -67,11 +79,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

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

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

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

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

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

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

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

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

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

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

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 }