diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index 8a9bc99bb7..077f522129 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -90,14 +90,14 @@ module Cask :deprecated?, :deprecation_date, :deprecation_reason, - :deprecation_replacement_formula, :deprecation_replacement_cask, + :deprecation_replacement_formula, :disable!, :disabled?, :disable_date, :disable_reason, - :disable_replacement_formula, :disable_replacement_cask, + :disable_replacement_formula, :discontinued?, # TODO: remove once discontinued? is removed (4.5.0) :livecheck, :livecheck_defined?, @@ -112,18 +112,39 @@ module Cask include OnSystem::MacOSAndLinux - attr_reader :cask, :token, :deprecation_date, :deprecation_reason, :deprecation_replacement_formula, - :deprecation_replacement_cask, :disable_date, :disable_reason, :disable_replacement_formula, - :disable_replacement_cask, :on_system_block_min_os + attr_reader :cask, :token, :artifacts, :deprecation_date, :deprecation_reason, + :deprecation_replacement_cask, :deprecation_replacement_formula, + :disable_date, :disable_reason, :disable_replacement_cask, + :disable_replacement_formula, :on_system_block_min_os + sig { params(cask: Cask).void } def initialize(cask) - @cask = cask + @artifacts = T.let(ArtifactSet.new, ArtifactSet) + @called_in_on_system_block = T.let(false, T::Boolean) + @cask = T.let(cask, Cask) + @caveats = T.let(DSL::Caveats.new(cask), DSL::Caveats) + @depends_on = T.let(DSL::DependsOn.new, DSL::DependsOn) @depends_on_set_in_block = T.let(false, T::Boolean) @deprecated = T.let(false, T::Boolean) + @deprecation_date = T.let(nil, T.nilable(Date)) + @deprecation_reason = T.let(nil, T.nilable(T.any(String, Symbol))) + @deprecation_replacement_cask = T.let(nil, T.nilable(String)) + @deprecation_replacement_formula = T.let(nil, T.nilable(String)) + @disable_date = T.let(nil, T.nilable(Date)) + @disable_reason = T.let(nil, T.nilable(T.any(String, Symbol))) + @disable_replacement_cask = T.let(nil, T.nilable(String)) + @disable_replacement_formula = T.let(nil, T.nilable(String)) @disabled = T.let(false, T::Boolean) + @language_blocks = T.let({}, T::Hash[T::Array[String], Proc]) + @language_eval = T.let(nil, T.nilable(String)) + @livecheck = T.let(Livecheck.new(cask), Livecheck) @livecheck_defined = T.let(false, T::Boolean) + @name = T.let([], T::Array[String]) @on_system_blocks_exist = T.let(false, T::Boolean) @token = cask.token + @on_system_block_min_os = T.let(nil, T.nilable(MacOSVersion)) + @staged_path = T.let(nil, T.nilable(Pathname)) + @token = T.let(cask.token, String) end sig { returns(T::Boolean) } @@ -153,7 +174,6 @@ module Cask # # @api public def name(*args) - @name ||= [] return @name if args.empty? @name.concat(args.flatten) @@ -210,7 +230,6 @@ module Cask if args.empty? language_eval elsif block - @language_blocks ||= {} @language_blocks[args] = block return unless default @@ -226,11 +245,13 @@ module Cask end def language_eval - return @language_eval if defined?(@language_eval) + return @language_eval unless @language_eval.nil? - return @language_eval = nil if @language_blocks.blank? + return @language_eval = nil if @language_blocks.empty? - raise CaskInvalidError.new(cask, "No default language specified.") if @language_blocks.default.nil? + if (language_blocks_default = @language_blocks.default).nil? + raise CaskInvalidError.new(cask, "No default language specified.") + end locales = cask.config.languages .filter_map do |language| @@ -241,18 +262,15 @@ module Cask locales.each do |locale| key = locale.detect(@language_blocks.keys) + next if key.nil? || (language_block = @language_blocks[key]).nil? - next if key.nil? - - return @language_eval = @language_blocks[key].call + return @language_eval = language_block.call end - @language_eval = @language_blocks.default.call + @language_eval = language_blocks_default.call end def languages - return [] if @language_blocks.nil? - @language_blocks.keys.flatten end @@ -425,7 +443,6 @@ module Cask # # @api public def depends_on(**kwargs) - @depends_on ||= DSL::DependsOn.new @depends_on_set_in_block = true if @called_in_on_system_block return @depends_on if kwargs.empty? @@ -439,7 +456,7 @@ module Cask # @api private def add_implicit_macos_dependency - return if @depends_on.present? && @depends_on.macos.present? + return if (cask_depends_on = @depends_on).present? && cask_depends_on.macos.present? depends_on macos: ">= :#{MacOSVersion::SYMBOLS.key MacOSVersion::SYMBOLS.values.min}" end @@ -452,10 +469,6 @@ module Cask set_unique_stanza(:conflicts_with, kwargs.empty?) { DSL::ConflictsWith.new(**kwargs) } end - def artifacts - @artifacts ||= ArtifactSet.new - end - sig { returns(Pathname) } def caskroom_path cask.caskroom_path @@ -476,7 +489,6 @@ module Cask # # @api public def caveats(*strings, &block) - @caveats ||= DSL::Caveats.new(cask) if block @caveats.eval_caveats(&block) elsif strings.any? @@ -500,7 +512,6 @@ module Cask # # @api public def livecheck(&block) - @livecheck ||= Livecheck.new(cask) return @livecheck unless block if !@cask.allow_reassignment && @livecheck_defined