diff --git a/Library/Homebrew/ast_constants.rb b/Library/Homebrew/ast_constants.rb index cc778677fa..9093aeab2b 100644 --- a/Library/Homebrew/ast_constants.rb +++ b/Library/Homebrew/ast_constants.rb @@ -1,9 +1,9 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "macos_version" -FORMULA_COMPONENT_PRECEDENCE_LIST = [ +FORMULA_COMPONENT_PRECEDENCE_LIST = T.let([ [{ name: :include, type: :method_call }], [{ name: :desc, type: :method_call }], [{ name: :homepage, type: :method_call }], @@ -49,4 +49,4 @@ FORMULA_COMPONENT_PRECEDENCE_LIST = [ [{ name: :caveats, type: :method_definition }], [{ name: :plist_options, type: :method_call }, { name: :plist, type: :method_definition }], [{ name: :test, type: :block_call }], -].freeze +].freeze, T::Array[[{ name: Symbol, type: Symbol }]]) diff --git a/Library/Homebrew/cask/cache.rb b/Library/Homebrew/cask/cache.rb index 62e7662e7f..d515d9d7a4 100644 --- a/Library/Homebrew/cask/cache.rb +++ b/Library/Homebrew/cask/cache.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Cask @@ -8,7 +8,7 @@ module Cask module Cache sig { returns(Pathname) } def self.path - @path ||= HOMEBREW_CACHE/"Cask" + @path ||= T.let(HOMEBREW_CACHE/"Cask", T.nilable(Pathname)) end end end diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index d6a44f503a..944bb72da2 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "fetch" @@ -59,7 +59,7 @@ module Homebrew formulae_or_casks.each do |formula_or_cask| case formula_or_cask when Formula - formula = T.cast(formula_or_cask, Formula) + formula = formula_or_cask ref = formula.loaded_from_api? ? formula.full_name : formula.path os_arch_combinations.each do |os, arch| diff --git a/Library/Homebrew/cmd/--repository.rb b/Library/Homebrew/cmd/--repository.rb index 0d15e532ec..ead618e8f0 100644 --- a/Library/Homebrew/cmd/--repository.rb +++ b/Library/Homebrew/cmd/--repository.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cli/parser" @@ -19,6 +19,7 @@ module Homebrew end end + sig { void } def __repository args = __repository_args.parse diff --git a/Library/Homebrew/cmd/analytics.rb b/Library/Homebrew/cmd/analytics.rb index 7703cc2c5d..f5ac8ef8a0 100644 --- a/Library/Homebrew/cmd/analytics.rb +++ b/Library/Homebrew/cmd/analytics.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cli/parser" @@ -24,6 +24,7 @@ module Homebrew end end + sig { void } def analytics args = analytics_args.parse diff --git a/Library/Homebrew/cmd/autoremove.rb b/Library/Homebrew/cmd/autoremove.rb index 94dea99605..6f2f724bc1 100644 --- a/Library/Homebrew/cmd/autoremove.rb +++ b/Library/Homebrew/cmd/autoremove.rb @@ -1,13 +1,12 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cleanup" require "cli/parser" module Homebrew - module_function - - def autoremove_args + sig { returns(CLI::Parser) } + def self.autoremove_args Homebrew::CLI::Parser.new do description <<~EOS Uninstall formulae that were only installed as a dependency of another formula and are now no longer needed. @@ -19,7 +18,8 @@ module Homebrew end end - def autoremove + sig { void } + def self.autoremove args = autoremove_args.parse Cleanup.autoremove(dry_run: args.dry_run?) diff --git a/Library/Homebrew/cmd/cleanup.rb b/Library/Homebrew/cmd/cleanup.rb index ebc80f8607..225696d51d 100644 --- a/Library/Homebrew/cmd/cleanup.rb +++ b/Library/Homebrew/cmd/cleanup.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cleanup" @@ -33,6 +33,7 @@ module Homebrew end end + sig { void } def cleanup args = cleanup_args.parse diff --git a/Library/Homebrew/cmd/commands.rb b/Library/Homebrew/cmd/commands.rb index 5f87e44284..f28546ade6 100644 --- a/Library/Homebrew/cmd/commands.rb +++ b/Library/Homebrew/cmd/commands.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cli/parser" @@ -22,6 +22,7 @@ module Homebrew end end + sig { void } def commands args = commands_args.parse diff --git a/Library/Homebrew/cmd/completions.rb b/Library/Homebrew/cmd/completions.rb index c9655658e0..ac7a8e2a5f 100644 --- a/Library/Homebrew/cmd/completions.rb +++ b/Library/Homebrew/cmd/completions.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cli/parser" @@ -25,6 +25,7 @@ module Homebrew end end + sig { void } def completions args = completions_args.parse diff --git a/Library/Homebrew/cmd/config.rb b/Library/Homebrew/cmd/config.rb index b71022140c..d75bc5ce54 100644 --- a/Library/Homebrew/cmd/config.rb +++ b/Library/Homebrew/cmd/config.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "system_config" @@ -19,6 +19,7 @@ module Homebrew end end + sig { void } def config config_args.parse diff --git a/Library/Homebrew/cmd/docs.rb b/Library/Homebrew/cmd/docs.rb index f3d7d713d1..b8107aea66 100644 --- a/Library/Homebrew/cmd/docs.rb +++ b/Library/Homebrew/cmd/docs.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "cli/parser" diff --git a/Library/Homebrew/cmd/help.rb b/Library/Homebrew/cmd/help.rb index bcad2600c1..2d286ad465 100644 --- a/Library/Homebrew/cmd/help.rb +++ b/Library/Homebrew/cmd/help.rb @@ -1,9 +1,10 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "help" module Homebrew + sig { returns(T.noreturn) } def help Help.help end diff --git a/Library/Homebrew/default_prefix.rb b/Library/Homebrew/default_prefix.rb index 6aaf1351a5..91c9f878d6 100644 --- a/Library/Homebrew/default_prefix.rb +++ b/Library/Homebrew/default_prefix.rb @@ -1,7 +1,7 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Homebrew - DEFAULT_PREFIX = ENV.fetch("HOMEBREW_DEFAULT_PREFIX").freeze - DEFAULT_REPOSITORY = ENV.fetch("HOMEBREW_DEFAULT_REPOSITORY").freeze + DEFAULT_PREFIX = T.let(ENV.fetch("HOMEBREW_DEFAULT_PREFIX").freeze, String) + DEFAULT_REPOSITORY = T.let(ENV.fetch("HOMEBREW_DEFAULT_REPOSITORY").freeze, String) end diff --git a/Library/Homebrew/extend/cachable.rb b/Library/Homebrew/extend/cachable.rb index c90e9ca474..b124c638e6 100644 --- a/Library/Homebrew/extend/cachable.rb +++ b/Library/Homebrew/extend/cachable.rb @@ -1,11 +1,13 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Cachable + sig { returns(T::Hash[T.untyped, T.untyped]) } def cache - @cache ||= {} + @cache ||= T.let({}, T.nilable(T::Hash[T.untyped, T.untyped])) end + sig { void } def clear_cache cache.clear end diff --git a/Library/Homebrew/extend/os/cleanup.rb b/Library/Homebrew/extend/os/cleanup.rb index 983b23a2ea..2018cbb911 100644 --- a/Library/Homebrew/extend/os/cleanup.rb +++ b/Library/Homebrew/extend/os/cleanup.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true if OS.mac? diff --git a/Library/Homebrew/extend/os/linux/dev-cmd/update-test.rb b/Library/Homebrew/extend/os/linux/dev-cmd/update-test.rb index 4072a84b44..792e3458a1 100644 --- a/Library/Homebrew/extend/os/linux/dev-cmd/update-test.rb +++ b/Library/Homebrew/extend/os/linux/dev-cmd/update-test.rb @@ -1,10 +1,11 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Homebrew class << self alias generic_git_tags git_tags + sig { returns(String) } def git_tags tags = generic_git_tags tags = Utils.popen_read("git tag --list | sort -rV") if tags.blank? diff --git a/Library/Homebrew/extend/os/parser.rb b/Library/Homebrew/extend/os/parser.rb index 97225de0c8..eb84af9d0a 100644 --- a/Library/Homebrew/extend/os/parser.rb +++ b/Library/Homebrew/extend/os/parser.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "extend/os/linux/parser" if OS.linux? diff --git a/Library/Homebrew/extend/predicable.rb b/Library/Homebrew/extend/predicable.rb index 6aa79ad949..7eb7c9edbf 100644 --- a/Library/Homebrew/extend/predicable.rb +++ b/Library/Homebrew/extend/predicable.rb @@ -1,7 +1,8 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Predicable + sig { params(attrs: Symbol).void } def attr_predicate(*attrs) attrs.each do |attr| define_method attr do diff --git a/Library/Homebrew/formula_free_port.rb b/Library/Homebrew/formula_free_port.rb index 91e94da609..8659c74c5c 100644 --- a/Library/Homebrew/formula_free_port.rb +++ b/Library/Homebrew/formula_free_port.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "socket" @@ -10,6 +10,7 @@ module Homebrew module FreePort # Returns a free port. # @api public + sig { returns(Integer) } def free_port server = TCPServer.new 0 _, port, = server.addr diff --git a/Library/Homebrew/livecheck/constants.rb b/Library/Homebrew/livecheck/constants.rb index f203ab67b5..09645c4229 100644 --- a/Library/Homebrew/livecheck/constants.rb +++ b/Library/Homebrew/livecheck/constants.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Homebrew diff --git a/Library/Homebrew/source_location.rb b/Library/Homebrew/source_location.rb index 6b7bc7e5f6..9b4b4b7789 100644 --- a/Library/Homebrew/source_location.rb +++ b/Library/Homebrew/source_location.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Homebrew diff --git a/Library/Homebrew/tap_constants.rb b/Library/Homebrew/tap_constants.rb index b5195f3949..f7d4e7c90f 100644 --- a/Library/Homebrew/tap_constants.rb +++ b/Library/Homebrew/tap_constants.rb @@ -1,17 +1,20 @@ -# typed: true +# typed: strict # frozen_string_literal: true # Match taps' formulae, e.g. `someuser/sometap/someformula` -HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}.freeze +HOMEBREW_TAP_FORMULA_REGEX = T.let(%r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}.freeze, Regexp) # Match taps' casks, e.g. `someuser/sometap/somecask` -HOMEBREW_TAP_CASK_REGEX = %r{^([\w-]+)/([\w-]+)/([a-z0-9\-_]+)$}.freeze +HOMEBREW_TAP_CASK_REGEX = T.let(%r{^([\w-]+)/([\w-]+)/([a-z0-9\-_]+)$}.freeze, Regexp) # Match main cask taps' casks, e.g. `homebrew/cask/somecask` or `somecask` -HOMEBREW_MAIN_TAP_CASK_REGEX = %r{^([Hh]omebrew/(?:homebrew-)?cask/)?[a-z0-9\-_]+$}.freeze +HOMEBREW_MAIN_TAP_CASK_REGEX = T.let(%r{^([Hh]omebrew/(?:homebrew-)?cask/)?[a-z0-9\-_]+$}.freeze, Regexp) # Match taps' directory paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap` -HOMEBREW_TAP_DIR_REGEX = %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/(?[\w-]+)/(?[\w-]+)}.freeze +HOMEBREW_TAP_DIR_REGEX = T.let( + %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/(?[\w-]+)/(?[\w-]+)}.freeze, Regexp +) # Match taps' formula paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula` -HOMEBREW_TAP_PATH_REGEX = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + %r{(?:/.*)?$}.source).freeze +HOMEBREW_TAP_PATH_REGEX = T.let(Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + %r{(?:/.*)?$}.source).freeze, Regexp) # Match official taps' casks, e.g. `homebrew/cask/somecask or homebrew/cask-versions/somecask` HOMEBREW_CASK_TAP_CASK_REGEX = - %r{^(?:([Cc]askroom)/(cask|versions)|([Hh]omebrew)/(?:homebrew-)?(cask|cask-[\w-]+))/([\w+-.]+)$}.freeze -HOMEBREW_OFFICIAL_REPO_PREFIXES_REGEX = /^(home|linux)brew-/.freeze + T.let(%r{^(?:([Cc]askroom)/(cask|versions)|([Hh]omebrew)/(?:homebrew-)?(cask|cask-[\w-]+))/([\w+-.]+)$}.freeze, + Regexp) +HOMEBREW_OFFICIAL_REPO_PREFIXES_REGEX = T.let(/^(home|linux)brew-/.freeze, Regexp) diff --git a/Library/Homebrew/test/support/lib/default_prefix.rb b/Library/Homebrew/test/support/lib/default_prefix.rb index e912bd4831..9da2beeb83 100644 --- a/Library/Homebrew/test/support/lib/default_prefix.rb +++ b/Library/Homebrew/test/support/lib/default_prefix.rb @@ -1,8 +1,8 @@ -# typed: true +# typed: strict # frozen_string_literal: true module Homebrew # For testing's sake always assume the default prefix - DEFAULT_PREFIX = HOMEBREW_PREFIX.to_s.freeze - DEFAULT_REPOSITORY = HOMEBREW_REPOSITORY.to_s.freeze + DEFAULT_PREFIX = T.let(HOMEBREW_PREFIX.to_s.freeze, String) + DEFAULT_REPOSITORY = T.let(HOMEBREW_REPOSITORY.to_s.freeze, String) end diff --git a/Library/Homebrew/test/utils/repology_spec.rb b/Library/Homebrew/test/utils/repology_spec.rb index 0903f3a76a..97c22e8864 100644 --- a/Library/Homebrew/test/utils/repology_spec.rb +++ b/Library/Homebrew/test/utils/repology_spec.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "utils/repology" diff --git a/Library/Homebrew/utils/rubocop.rb b/Library/Homebrew/utils/rubocop.rb index fe98ae580d..4e760a601e 100755 --- a/Library/Homebrew/utils/rubocop.rb +++ b/Library/Homebrew/utils/rubocop.rb @@ -1,5 +1,5 @@ #!/usr/bin/env ruby -# typed: true +# typed: strict # frozen_string_literal: true require_relative "../standalone"