diff --git a/Library/Homebrew/livecheck/strategy.rb b/Library/Homebrew/livecheck/strategy.rb index f00a455a64e6fd..b952a44f0ce31a 100644 --- a/Library/Homebrew/livecheck/strategy.rb +++ b/Library/Homebrew/livecheck/strategy.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Homebrew @@ -97,9 +97,9 @@ module Strategy # @return [Hash] sig { returns(T::Hash[Symbol, T.untyped]) } def strategies - return @strategies if defined? @strategies + @strategies ||= T.let({ uninitialized: true }, T.nilable(T::Hash[Symbol, T.untyped])) + return @strategies unless @strategies[:uninitialized] - @strategies = {} Strategy.constants.sort.each do |const_symbol| constant = Strategy.const_get(const_symbol) next unless constant.is_a?(Class) @@ -107,6 +107,7 @@ def strategies key = Utils.underscore(const_symbol).to_sym @strategies[key] = constant end + @strategies.delete(:uninitialized) @strategies end private_class_method :strategies diff --git a/Library/Homebrew/rubocops/livecheck.rb b/Library/Homebrew/rubocops/livecheck.rb index 7a974fdcf8fa7d..69c5b083d31624 100644 --- a/Library/Homebrew/rubocops/livecheck.rb +++ b/Library/Homebrew/rubocops/livecheck.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "rubocops/extend/formula_cop" @@ -11,6 +11,14 @@ module FormulaAudit class LivecheckSkip < FormulaCop extend AutoCorrector + sig { + override.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) livecheck_node = find_block(body_node, :livecheck) return if livecheck_node.blank? @@ -39,6 +47,14 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) # This cop ensures that a `url` is specified in the `livecheck` block. class LivecheckUrlProvided < FormulaCop + sig { + override.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) livecheck_node = find_block(body_node, :livecheck) return unless livecheck_node @@ -62,6 +78,14 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) class LivecheckUrlSymbol < FormulaCop extend AutoCorrector + sig { + override.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) livecheck_node = find_block(body_node, :livecheck) return if livecheck_node.blank? @@ -117,6 +141,14 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) class LivecheckRegexParentheses < FormulaCop extend AutoCorrector + sig { + override.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) livecheck_node = find_block(body_node, :livecheck) return if livecheck_node.blank? @@ -144,6 +176,14 @@ class LivecheckRegexExtension < FormulaCop TAR_PATTERN = /\\?\.t(ar|(g|l|x)z$|[bz2]{2,4}$)(\\?\.((g|l|x)z)|[bz2]{2,4}|Z)?$/i + sig { + override.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) livecheck_node = find_block(body_node, :livecheck) return if livecheck_node.blank? @@ -171,6 +211,14 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) # This cop ensures that a `regex` is provided when `strategy :page_match` is specified # in the `livecheck` block. class LivecheckRegexIfPageMatch < FormulaCop + sig { + override.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) livecheck_node = find_block(body_node, :livecheck) return if livecheck_node.blank? @@ -199,6 +247,14 @@ class LivecheckRegexCaseInsensitive < FormulaCop MSG = "Regexes should be case-insensitive unless sensitivity is explicitly required for proper matching." + sig { + override.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) return if tap_style_exception? :regex_case_sensitive_allowlist