Enable strict typing in Formula

This commit is contained in:
Douglas Eichelberger 2025-02-16 22:20:37 -08:00 committed by Douglas Eichelberger
parent 62dc3876ab
commit a81239ec2d
No known key found for this signature in database
GPG Key ID: F90193CBD547EB81
15 changed files with 323 additions and 160 deletions

View File

@ -19,8 +19,8 @@ class Caveats
sig { returns(String) }
def caveats
caveats = []
build = formula.build
begin
build = formula.build
formula.build = Tab.for_formula(formula)
string = formula.caveats.to_s
caveats << "#{string.chomp}\n" unless string.empty?

View File

@ -209,16 +209,18 @@ module Homebrew
formulae.map(&:to_hash)
end
when :v2
formulae, casks = if all
[
Formula.all(eval_all: args.eval_all?).sort,
Cask::Cask.all(eval_all: args.eval_all?).sort_by(&:full_name),
]
elsif args.installed?
[Formula.installed.sort, Cask::Caskroom.casks.sort_by(&:full_name)]
else
args.named.to_formulae_to_casks
end
formulae, casks = T.let(
if all
[
Formula.all(eval_all: args.eval_all?).sort,
Cask::Cask.all(eval_all: args.eval_all?).sort_by(&:full_name),
]
elsif args.installed?
[Formula.installed.sort, Cask::Caskroom.casks.sort_by(&:full_name)]
else
T.cast(args.named.to_formulae_to_casks, [T::Array[Formula], T::Array[Cask::Cask]])
end, [T::Array[Formula], T::Array[Cask::Cask]]
)
if args.variations?
{

View File

@ -123,7 +123,8 @@ module Homebrew
raise UsageError, "Cannot use #{flags.join(", ")} with formula arguments." unless args.no_named?
formulae = if args.t?
Formula.installed.sort_by { |formula| test("M", formula.rack) }.reverse!
# See https://ruby-doc.org/3.2/Kernel.html#method-i-test
Formula.installed.sort_by { |formula| T.cast(test("M", formula.rack.to_s), Time) }.reverse!
elsif args.full_name?
Formula.installed.sort { |a, b| tap_and_name_comparison.call(a.full_name, b.full_name) }
else

View File

@ -33,7 +33,7 @@ module Homebrew
end
ff.each do |f|
missing = f.missing_dependencies(hide: args.hide)
missing = f.missing_dependencies(hide: args.hide || [])
next if missing.empty?
Homebrew.failed = true

View File

@ -161,7 +161,7 @@ module Homebrew
end
next unless formula.any_version_installed?
keg = formula.installed_kegs.last
keg = formula.installed_kegs.fetch(-1)
tab = keg.tab
# force a `brew upgrade` from the linuxbrew-core version to the homebrew-core version (even if lower)
tab.source["versions"]["version_scheme"] = -1

View File

@ -106,9 +106,9 @@ module Homebrew
# We can only get here if `used_formulae_missing` is false, thus there are no UnavailableFormula.
used_formulae = T.cast(used_formulae, T::Array[Formula])
if show_formulae_and_casks || args.formula?
deps += used_formulae.map(&:runtime_installed_formula_dependents)
.reduce(&:&)
.select(&:any_version_installed?)
deps += T.must(used_formulae.map(&:runtime_installed_formula_dependents)
.reduce(&:&))
.select(&:any_version_installed?)
end
if show_formulae_and_casks || args.cask?
deps += select_used_dependents(

View File

@ -115,7 +115,7 @@ module Homebrew
end
end
formulae_and_casks = formulae_and_casks&.sort_by do |formula_or_cask|
formulae_and_casks = formulae_and_casks.sort_by do |formula_or_cask|
formula_or_cask.respond_to?(:token) ? formula_or_cask.token : formula_or_cask.name
end

View File

@ -63,7 +63,7 @@ module Homebrew
end
end
sig { params(list: T::Array[String], string: String).returns(String) }
sig { params(list: T::Array[T.any(Formula, Pathname, String)], string: String).returns(String) }
def inject_file_list(list, string)
list.reduce(string.dup) { |acc, elem| acc << " #{elem}\n" }
.freeze

View File

@ -24,7 +24,7 @@ module Homebrew
end
next unless recursive_runtime_dependencies.map(&:name).include? "gcc"
keg = formula.installed_kegs.last
keg = formula.installed_kegs.fetch(-1)
tab = keg.tab
# Force reinstallation upon `brew upgrade` to fix the bottle RPATH.
tab.source["versions"]["version_scheme"] = -1

View File

@ -48,9 +48,9 @@ module OS
built_global_dep_tree!
end
sig { params(name: String).returns(T.nilable(Formula)) }
sig { params(name: String).returns(T.nilable(::Formula)) }
def formula_for(name)
@formula_for ||= T.let({}, T.nilable(T::Hash[String, Formula]))
@formula_for ||= T.let({}, T.nilable(T::Hash[String, ::Formula]))
@formula_for[name] ||= ::Formula[name]
rescue FormulaUnavailableError
nil

File diff suppressed because it is too large Load Diff

View File

@ -307,7 +307,7 @@ module FormulaCellarChecks
return unless formula.service?
return unless formula.service.command?
"Service command does not exist" unless File.exist?(formula.service.command.first)
"Service command does not exist" unless File.exist?(T.must(formula.service.command).first)
end
sig { params(formula: Formula).returns(T.nilable(String)) }

View File

@ -1230,7 +1230,7 @@ on_request: installed_on_request?, options:)
return keg_formula_path if formula.loaded_from_api?
return keg_formula_path if formula.local_bottle_path.present?
tap_formula_path = formula.specified_path
tap_formula_path = T.must(formula.specified_path)
return keg_formula_path unless tap_formula_path.exist?
begin

View File

@ -16,7 +16,7 @@ module Language
next false unless f.any_version_installed?
unless version.zero?
major = f.any_installed_version.major
major = T.must(f.any_installed_version).major
next false if major < version
next false if major > version && !can_be_newer
end

View File

@ -340,7 +340,10 @@ module Language
version = rp.match %r{^#{HOMEBREW_CELLAR}/python@(.*?)/}o
version = "@#{version.captures.first}" unless version.nil?
new_target = rp.sub %r{#{HOMEBREW_CELLAR}/python#{version}/[^/]+}, Formula["python#{version}"].opt_prefix
new_target = rp.sub(
%r{#{HOMEBREW_CELLAR}/python#{version}/[^/]+},
Formula["python#{version}"].opt_prefix.to_s,
)
f.unlink
f.make_symlink new_target
end
@ -351,7 +354,10 @@ module Language
version = prefix_path.match %r{^#{HOMEBREW_CELLAR}/python@(.*?)/}o
version = "@#{version.captures.first}" unless version.nil?
prefix_path.sub! %r{^#{HOMEBREW_CELLAR}/python#{version}/[^/]+}, Formula["python#{version}"].opt_prefix
prefix_path.sub!(
%r{^#{HOMEBREW_CELLAR}/python#{version}/[^/]+},
Formula["python#{version}"].opt_prefix.to_s,
)
prefix_file.atomic_write prefix_path
end
@ -362,7 +368,7 @@ module Language
cfg = cfg_file.read
framework = "Frameworks/Python.framework/Versions"
cfg.match(%r{= *(#{HOMEBREW_CELLAR}/(python@[\d.]+)/[^/]+(?:/#{framework}/[\d.]+)?/bin)}) do |match|
cfg.sub! match[1].to_s, Formula[match[2]].opt_bin
cfg.sub! match[1].to_s, Formula[T.must(match[2])].opt_bin.to_s
cfg_file.atomic_write cfg
end
end