mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Enable strict typing in Formula
This commit is contained in:
parent
62dc3876ab
commit
a81239ec2d
@ -19,8 +19,8 @@ class Caveats
|
|||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def caveats
|
def caveats
|
||||||
caveats = []
|
caveats = []
|
||||||
begin
|
|
||||||
build = formula.build
|
build = formula.build
|
||||||
|
begin
|
||||||
formula.build = Tab.for_formula(formula)
|
formula.build = Tab.for_formula(formula)
|
||||||
string = formula.caveats.to_s
|
string = formula.caveats.to_s
|
||||||
caveats << "#{string.chomp}\n" unless string.empty?
|
caveats << "#{string.chomp}\n" unless string.empty?
|
||||||
|
@ -209,7 +209,8 @@ module Homebrew
|
|||||||
formulae.map(&:to_hash)
|
formulae.map(&:to_hash)
|
||||||
end
|
end
|
||||||
when :v2
|
when :v2
|
||||||
formulae, casks = if all
|
formulae, casks = T.let(
|
||||||
|
if all
|
||||||
[
|
[
|
||||||
Formula.all(eval_all: args.eval_all?).sort,
|
Formula.all(eval_all: args.eval_all?).sort,
|
||||||
Cask::Cask.all(eval_all: args.eval_all?).sort_by(&:full_name),
|
Cask::Cask.all(eval_all: args.eval_all?).sort_by(&:full_name),
|
||||||
@ -217,8 +218,9 @@ module Homebrew
|
|||||||
elsif args.installed?
|
elsif args.installed?
|
||||||
[Formula.installed.sort, Cask::Caskroom.casks.sort_by(&:full_name)]
|
[Formula.installed.sort, Cask::Caskroom.casks.sort_by(&:full_name)]
|
||||||
else
|
else
|
||||||
args.named.to_formulae_to_casks
|
T.cast(args.named.to_formulae_to_casks, [T::Array[Formula], T::Array[Cask::Cask]])
|
||||||
end
|
end, [T::Array[Formula], T::Array[Cask::Cask]]
|
||||||
|
)
|
||||||
|
|
||||||
if args.variations?
|
if args.variations?
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,8 @@ module Homebrew
|
|||||||
raise UsageError, "Cannot use #{flags.join(", ")} with formula arguments." unless args.no_named?
|
raise UsageError, "Cannot use #{flags.join(", ")} with formula arguments." unless args.no_named?
|
||||||
|
|
||||||
formulae = if args.t?
|
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?
|
elsif args.full_name?
|
||||||
Formula.installed.sort { |a, b| tap_and_name_comparison.call(a.full_name, b.full_name) }
|
Formula.installed.sort { |a, b| tap_and_name_comparison.call(a.full_name, b.full_name) }
|
||||||
else
|
else
|
||||||
|
@ -33,7 +33,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
ff.each do |f|
|
ff.each do |f|
|
||||||
missing = f.missing_dependencies(hide: args.hide)
|
missing = f.missing_dependencies(hide: args.hide || [])
|
||||||
next if missing.empty?
|
next if missing.empty?
|
||||||
|
|
||||||
Homebrew.failed = true
|
Homebrew.failed = true
|
||||||
|
@ -161,7 +161,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
next unless formula.any_version_installed?
|
next unless formula.any_version_installed?
|
||||||
|
|
||||||
keg = formula.installed_kegs.last
|
keg = formula.installed_kegs.fetch(-1)
|
||||||
tab = keg.tab
|
tab = keg.tab
|
||||||
# force a `brew upgrade` from the linuxbrew-core version to the homebrew-core version (even if lower)
|
# force a `brew upgrade` from the linuxbrew-core version to the homebrew-core version (even if lower)
|
||||||
tab.source["versions"]["version_scheme"] = -1
|
tab.source["versions"]["version_scheme"] = -1
|
||||||
|
@ -106,8 +106,8 @@ module Homebrew
|
|||||||
# We can only get here if `used_formulae_missing` is false, thus there are no UnavailableFormula.
|
# 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])
|
used_formulae = T.cast(used_formulae, T::Array[Formula])
|
||||||
if show_formulae_and_casks || args.formula?
|
if show_formulae_and_casks || args.formula?
|
||||||
deps += used_formulae.map(&:runtime_installed_formula_dependents)
|
deps += T.must(used_formulae.map(&:runtime_installed_formula_dependents)
|
||||||
.reduce(&:&)
|
.reduce(&:&))
|
||||||
.select(&:any_version_installed?)
|
.select(&:any_version_installed?)
|
||||||
end
|
end
|
||||||
if show_formulae_and_casks || args.cask?
|
if show_formulae_and_casks || args.cask?
|
||||||
|
@ -115,7 +115,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
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
|
formula_or_cask.respond_to?(:token) ? formula_or_cask.token : formula_or_cask.name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
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)
|
def inject_file_list(list, string)
|
||||||
list.reduce(string.dup) { |acc, elem| acc << " #{elem}\n" }
|
list.reduce(string.dup) { |acc, elem| acc << " #{elem}\n" }
|
||||||
.freeze
|
.freeze
|
||||||
|
@ -24,7 +24,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
next unless recursive_runtime_dependencies.map(&:name).include? "gcc"
|
next unless recursive_runtime_dependencies.map(&:name).include? "gcc"
|
||||||
|
|
||||||
keg = formula.installed_kegs.last
|
keg = formula.installed_kegs.fetch(-1)
|
||||||
tab = keg.tab
|
tab = keg.tab
|
||||||
# Force reinstallation upon `brew upgrade` to fix the bottle RPATH.
|
# Force reinstallation upon `brew upgrade` to fix the bottle RPATH.
|
||||||
tab.source["versions"]["version_scheme"] = -1
|
tab.source["versions"]["version_scheme"] = -1
|
||||||
|
@ -48,9 +48,9 @@ module OS
|
|||||||
built_global_dep_tree!
|
built_global_dep_tree!
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { params(name: String).returns(T.nilable(Formula)) }
|
sig { params(name: String).returns(T.nilable(::Formula)) }
|
||||||
def formula_for(name)
|
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]
|
@formula_for[name] ||= ::Formula[name]
|
||||||
rescue FormulaUnavailableError
|
rescue FormulaUnavailableError
|
||||||
nil
|
nil
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -307,7 +307,7 @@ module FormulaCellarChecks
|
|||||||
return unless formula.service?
|
return unless formula.service?
|
||||||
return unless formula.service.command?
|
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
|
end
|
||||||
|
|
||||||
sig { params(formula: Formula).returns(T.nilable(String)) }
|
sig { params(formula: Formula).returns(T.nilable(String)) }
|
||||||
|
@ -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.loaded_from_api?
|
||||||
return keg_formula_path if formula.local_bottle_path.present?
|
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?
|
return keg_formula_path unless tap_formula_path.exist?
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
@ -16,7 +16,7 @@ module Language
|
|||||||
next false unless f.any_version_installed?
|
next false unless f.any_version_installed?
|
||||||
|
|
||||||
unless version.zero?
|
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
|
||||||
next false if major > version && !can_be_newer
|
next false if major > version && !can_be_newer
|
||||||
end
|
end
|
||||||
|
@ -340,7 +340,10 @@ module Language
|
|||||||
version = rp.match %r{^#{HOMEBREW_CELLAR}/python@(.*?)/}o
|
version = rp.match %r{^#{HOMEBREW_CELLAR}/python@(.*?)/}o
|
||||||
version = "@#{version.captures.first}" unless version.nil?
|
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.unlink
|
||||||
f.make_symlink new_target
|
f.make_symlink new_target
|
||||||
end
|
end
|
||||||
@ -351,7 +354,10 @@ module Language
|
|||||||
version = prefix_path.match %r{^#{HOMEBREW_CELLAR}/python@(.*?)/}o
|
version = prefix_path.match %r{^#{HOMEBREW_CELLAR}/python@(.*?)/}o
|
||||||
version = "@#{version.captures.first}" unless version.nil?
|
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
|
prefix_file.atomic_write prefix_path
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -362,7 +368,7 @@ module Language
|
|||||||
cfg = cfg_file.read
|
cfg = cfg_file.read
|
||||||
framework = "Frameworks/Python.framework/Versions"
|
framework = "Frameworks/Python.framework/Versions"
|
||||||
cfg.match(%r{= *(#{HOMEBREW_CELLAR}/(python@[\d.]+)/[^/]+(?:/#{framework}/[\d.]+)?/bin)}) do |match|
|
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
|
cfg_file.atomic_write cfg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user