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"
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
FormulaAudit:
Enabled: true

View File

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

View File

@ -1,7 +1,7 @@
# typed: true
# frozen_string_literal: true
require "rubocops/extend/formula"
require "rubocops/extend/formula_cop"
module RuboCop
module Cop
@ -9,7 +9,8 @@ module RuboCop
# This cop audits the `bottle` block in formulae.
#
# @api private
class BottleFormat < FormulaCop
class BottleFormat < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class BottleTagIndentation < FormulaCop
class BottleTagIndentation < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class BottleDigestIndentation < FormulaCop
class BottleDigestIndentation < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class BottleOrder < FormulaCop
class BottleOrder < Base
include FormulaCop
extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,10 +5,11 @@ require "rubocops/shared/helper_functions"
module RuboCop
module Cop
# Superclass for all formula cops.
# Mixin for all formula cops.
#
# @api private
class FormulaCop < Base
module FormulaCop
extend RuboCop::AST::NodePattern::Macros
include RangeHelp
include HelperFunctions
@ -67,11 +68,7 @@ module RuboCop
# 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
def depends_on_name_type?(node, name = nil, type = :required)
name_match = if name
false
else
true # Match only by type when name is nil
end
name_match = !name # Match only by type when name is nil
case type
when :required

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@
# frozen_string_literal: true
require "macos_versions"
require "rubocops/extend/formula"
require "rubocops/extend/formula_cop"
require "rubocops/shared/on_system_conditionals_helper"
module RuboCop
@ -11,7 +11,8 @@ module RuboCop
# This cop checks for various miscellaneous Homebrew coding styles.
#
# @api private
class Lines < FormulaCop
class Lines < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node)
[:automake, :ant, :autoconf, :emacs, :expat, :libtool, :mysql, :perl,
: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.
#
# @api private
class ClassInheritance < FormulaCop
class ClassInheritance < Base
include FormulaCop
def audit_formula(_node, class_node, parent_class_node, _body_node)
begin_pos = start_column(parent_class_node)
end_pos = end_column(class_node)
@ -48,7 +50,8 @@ module RuboCop
# This cop makes sure that template comments are removed.
#
# @api private
class Comments < FormulaCop
class Comments < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node)
audit_comments do |comment|
[
@ -89,7 +92,8 @@ module RuboCop
# This cop makes sure that idiomatic `assert_*` statements are used.
#
# @api private
class AssertStatements < FormulaCop
class AssertStatements < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil?
@ -116,7 +120,8 @@ module RuboCop
# This cop makes sure that `option`s are used idiomatically.
#
# @api private
class OptionDeclarations < FormulaCop
class OptionDeclarations < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil?
@ -201,7 +206,8 @@ module RuboCop
# This cop makes sure that formulae depend on `open-mpi` instead of `mpich`.
#
# @api private
class MpiCheck < FormulaCop
class MpiCheck < Base
include FormulaCop
extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -223,7 +229,8 @@ module RuboCop
# or run-time.
#
# @api private
class PyoxidizerCheck < FormulaCop
class PyoxidizerCheck < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil?
@ -250,7 +257,8 @@ module RuboCop
# This cop makes sure that the safe versions of `popen_*` calls are used.
#
# @api private
class SafePopenCommands < FormulaCop
class SafePopenCommands < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class ShellVariables < FormulaCop
class ShellVariables < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class LicenseArrays < FormulaCop
class LicenseArrays < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class Licenses < FormulaCop
class Licenses < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil?
@ -357,7 +368,8 @@ module RuboCop
# This cop makes sure that Python versions are consistent.
#
# @api private
class PythonVersions < FormulaCop
class PythonVersions < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class OnSystemConditionals < FormulaCop
class OnSystemConditionals < Base
include FormulaCop
include OnSystemConditionalsHelper
extend AutoCorrector
@ -436,7 +449,8 @@ module RuboCop
# This cop makes sure that the `generate_completions_from_executable` DSL is used.
#
# @api private
class GenerateCompletionsDSL < FormulaCop
class GenerateCompletionsDSL < Base
include FormulaCop
extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -519,7 +533,8 @@ module RuboCop
# a single, combined call for all shells.
#
# @api private
class SingleGenerateCompletionsDSLCall < FormulaCop
class SingleGenerateCompletionsDSLCall < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class Miscellaneous < FormulaCop
class Miscellaneous < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if body_node.nil?
@ -852,7 +868,8 @@ module RuboCop
# This cop makes sure that no build-time checks are performed.
#
# @api private
class MakeCheck < FormulaCop
class MakeCheck < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
return if formula_tap != "homebrew-core"
@ -876,7 +893,8 @@ module RuboCop
end
# 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)
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

View File

@ -1,7 +1,7 @@
# typed: true
# frozen_string_literal: true
require "rubocops/extend/formula"
require "rubocops/extend/formula_cop"
module RuboCop
module Cop
@ -10,7 +10,8 @@ module RuboCop
# skipped formulae.
#
# @api private
class LivecheckSkip < FormulaCop
class LivecheckSkip < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class LivecheckUrlProvided < FormulaCop
class LivecheckUrlProvided < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
livecheck_node = find_block(body_node, :livecheck)
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.
#
# @api private
class LivecheckUrlSymbol < FormulaCop
class LivecheckUrlSymbol < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class LivecheckRegexParentheses < FormulaCop
class LivecheckRegexParentheses < Base
include FormulaCop
extend AutoCorrector
def audit_formula(_node, _class_node, _parent_class_node, body_node)
@ -150,7 +154,8 @@ module RuboCop
# `\.tgz`, `\.tar.gz` and variants.
#
# @api private
class LivecheckRegexExtension < FormulaCop
class LivecheckRegexExtension < Base
include FormulaCop
extend AutoCorrector
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.
#
# @api private
class LivecheckRegexIfPageMatch < FormulaCop
class LivecheckRegexIfPageMatch < Base
include FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
livecheck_node = find_block(body_node, :livecheck)
return if livecheck_node.blank?
@ -209,7 +215,8 @@ module RuboCop
# unless sensitivity is explicitly required for proper matching.
#
# @api private
class LivecheckRegexCaseInsensitive < FormulaCop
class LivecheckRegexCaseInsensitive < Base
include FormulaCop
extend AutoCorrector
MSG = "Regexes should be case-insensitive unless sensitivity is explicitly required for proper matching."

View File

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

View File

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

View File

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

View File

@ -1,13 +1,15 @@
# typed: true
# frozen_string_literal: true
require "rubocops/extend/formula"
require "rubocops/extend/formula_cop"
module RuboCop
module Cop
module FormulaAudit
# 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[
apr
bc
@ -73,7 +75,9 @@ module RuboCop
end
# 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
# macOS (or very similarly, e.g. OpenSSL where system provides LibreSSL).
# TODO: consider making some of these keg-only.

View File

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

View File

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

View File

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

View File

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