Enable typing in cmd/

This commit is contained in:
Douglas Eichelberger 2023-03-06 09:49:53 -08:00
parent df1e1d6f07
commit d56e2884aa
20 changed files with 81 additions and 88 deletions

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "fetch"
@ -10,10 +10,8 @@ module Homebrew
extend Fetch
module_function
sig { returns(CLI::Parser) }
def __cache_args
def self.__cache_args
Homebrew::CLI::Parser.new do
description <<~EOS
Display Homebrew's download cache. See also `HOMEBREW_CACHE`.
@ -41,7 +39,7 @@ module Homebrew
end
sig { void }
def __cache
def self.__cache
args = __cache_args.parse
if args.no_named?
@ -61,9 +59,9 @@ module Homebrew
end
sig { params(formula: Formula, args: CLI::Args).void }
def print_formula_cache(formula, args:)
def self.print_formula_cache(formula, args:)
if fetch_bottle?(formula, args: args)
puts formula.bottle_for_tag(args.bottle_tag&.to_sym).cached_download
puts formula.bottle_for_tag(args.bottle_tag&.to_sym)&.cached_download
elsif args.HEAD?
puts formula.head.cached_download
else
@ -72,7 +70,7 @@ module Homebrew
end
sig { params(cask: Cask::Cask).void }
def print_cask_cache(cask)
def self.print_cask_cache(cask)
puts Cask::Download.new(cask).downloader.cached_location
end
end

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "cli/parser"
@ -105,7 +105,8 @@ module Homebrew
arguments.concat UNBREWED_EXCLUDE_PATHS.flat_map { |d| %W[! -path #{d}] }
arguments.push ")"
cd HOMEBREW_PREFIX
# This is a false positive type error: https://github.com/sorbet/sorbet/issues/6812
T.unsafe(self).cd HOMEBREW_PREFIX
safe_system "find", *arguments
end
end

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "cli/parser"
@ -32,7 +32,7 @@ module Homebrew
return
end
prepend_separator = false
prepend_separator = T.let(false, T::Boolean)
{
"Built-in commands" => Commands.internal_commands,

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "formula"
@ -12,10 +12,8 @@ module Homebrew
extend DependenciesHelpers
module_function
sig { returns(CLI::Parser) }
def deps_args
def self.deps_args
Homebrew::CLI::Parser.new do
description <<~EOS
Show dependencies for <formula>. Additional options specific to <formula>
@ -78,7 +76,7 @@ module Homebrew
end
end
def deps
def self.deps
args = deps_args.parse
all = args.eval_all?
@ -164,16 +162,16 @@ module Homebrew
puts all_deps
end
def sorted_dependents(formulae_or_casks)
def self.sorted_dependents(formulae_or_casks)
dependents(formulae_or_casks).sort_by(&:name)
end
def condense_requirements(deps, args:)
def self.condense_requirements(deps, args:)
deps.select! { |dep| dep.is_a?(Dependency) } unless args.include_requirements?
deps.select! { |dep| dep.is_a?(Requirement) || dep.installed? } if args.installed?
end
def dep_display_name(dep, args:)
def self.dep_display_name(dep, args:)
str = if dep.is_a? Requirement
if args.include_requirements?
":#{dep.display_s}"
@ -198,7 +196,7 @@ module Homebrew
str
end
def deps_for_dependent(d, args:, recursive: false)
def self.deps_for_dependent(d, args:, recursive: false)
includes, ignores = args_includes_ignores(args)
deps = d.runtime_dependencies if @use_runtime_dependencies
@ -214,11 +212,11 @@ module Homebrew
deps + reqs.to_a
end
def deps_for_dependents(dependents, args:, recursive: false, &block)
def self.deps_for_dependents(dependents, args:, recursive: false, &block)
dependents.map { |d| deps_for_dependent(d, recursive: recursive, args: args) }.reduce(&block)
end
def puts_deps(dependents, args:, recursive: false)
def self.puts_deps(dependents, args:, recursive: false)
dependents.each do |dependent|
deps = deps_for_dependent(dependent, recursive: recursive, args: args)
condense_requirements(deps, args: args)
@ -228,7 +226,7 @@ module Homebrew
end
end
def dot_code(dependents, recursive:, args:)
def self.dot_code(dependents, recursive:, args:)
dep_graph = {}
dependents.each do |d|
graph_deps(d, dep_graph: dep_graph, recursive: recursive, args: args)
@ -251,7 +249,7 @@ module Homebrew
"digraph {\n#{dot_code}\n}"
end
def graph_deps(f, dep_graph:, recursive:, args:)
def self.graph_deps(f, dep_graph:, recursive:, args:)
return if dep_graph.key?(f)
dependables = dependables(f, args: args)
@ -268,7 +266,7 @@ module Homebrew
end
end
def puts_deps_tree(dependents, args:, recursive: false)
def self.puts_deps_tree(dependents, args:, recursive: false)
dependents.each do |d|
puts d.full_name
recursive_deps_tree(d, dep_stack: [], prefix: "", recursive: recursive, args: args)
@ -276,7 +274,7 @@ module Homebrew
end
end
def dependables(f, args:)
def self.dependables(f, args:)
includes, ignores = args_includes_ignores(args)
deps = @use_runtime_dependencies ? f.runtime_dependencies : f.deps
deps = reject_ignores(deps, ignores, includes)
@ -285,7 +283,7 @@ module Homebrew
reqs + deps
end
def recursive_deps_tree(f, dep_stack:, prefix:, recursive:, args:)
def self.recursive_deps_tree(f, dep_stack:, prefix:, recursive:, args:)
dependables = dependables(f, args: args)
max = dependables.length - 1
dep_stack.push f.name

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "descriptions"

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "diagnostic"
@ -8,10 +8,8 @@ require "cask/caskroom"
module Homebrew
extend T::Sig
module_function
sig { returns(CLI::Parser) }
def doctor_args
def self.doctor_args
Homebrew::CLI::Parser.new do
description <<~EOS
Check your system for potential problems. Will exit with a non-zero status
@ -30,7 +28,7 @@ module Homebrew
end
end
def doctor
def self.doctor
args = doctor_args.parse
inject_dump_stats!(Diagnostic::Checks, /^check_*/) if args.audit_debug?
@ -53,7 +51,7 @@ module Homebrew
methods = args.named
end
first_warning = true
first_warning = T.let(true, T::Boolean)
methods.each do |method|
$stderr.puts Formatter.headline("Checking #{method}", color: :magenta) if args.debug?
unless checks.respond_to?(method)

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "formula"
@ -11,12 +11,10 @@ module Homebrew
extend Fetch
module_function
FETCH_MAX_TRIES = 5
sig { returns(CLI::Parser) }
def fetch_args
def self.fetch_args
Homebrew::CLI::Parser.new do
description <<~EOS
Download a bottle (if available) or source packages for <formula>e
@ -65,7 +63,7 @@ module Homebrew
end
end
def fetch
def self.fetch
args = fetch_args.parse
bucket = if args.deps?
@ -132,7 +130,7 @@ module Homebrew
end
end
def fetch_resource(r, args:)
def self.fetch_resource(r, args:)
puts "Resource: #{r.name}"
fetch_fetchable r, args: args
rescue ChecksumMismatchError => e
@ -140,28 +138,28 @@ module Homebrew
opoo "Resource #{r.name} reports different sha256: #{e.expected}"
end
def fetch_formula(f, args:)
def self.fetch_formula(f, args:)
fetch_fetchable f, args: args
rescue ChecksumMismatchError => e
retry if retry_fetch?(f, args: args)
opoo "Formula reports different sha256: #{e.expected}"
end
def fetch_cask(cask_download, args:)
def self.fetch_cask(cask_download, args:)
fetch_fetchable cask_download, args: args
rescue ChecksumMismatchError => e
retry if retry_fetch?(cask_download, args: args)
opoo "Cask reports different sha256: #{e.expected}"
end
def fetch_patch(p, args:)
def self.fetch_patch(p, args:)
fetch_fetchable p, args: args
rescue ChecksumMismatchError => e
opoo "Patch reports different sha256: #{e.expected}"
Homebrew.failed = true
end
def retry_fetch?(f, args:)
def self.retry_fetch?(f, args:)
@fetch_tries ||= Hash.new { |h, k| h[k] = 1 }
if args.retry? && (@fetch_tries[f] < FETCH_MAX_TRIES)
wait = 2 ** @fetch_tries[f]
@ -180,7 +178,7 @@ module Homebrew
end
end
def fetch_fetchable(f, args:)
def self.fetch_fetchable(f, args:)
f.clear_cache if args.force?
already_fetched = f.cached_download.exist?

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "missing_formula"
@ -191,7 +191,7 @@ module Homebrew
version_hash[version]
end
sig { params(all: T::Boolean, args: CLI::Args).void }
sig { params(all: T::Boolean, args: T.untyped).void }
def print_json(all, args:)
raise FormulaOrCaskUnspecifiedError if !(all || args.installed?) && args.no_named?

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "cask/config"
@ -279,7 +279,11 @@ module Homebrew
Homebrew.failed = true
# formula name or cask token
name = e.try(:name) || e.token
name = case e
when FormulaOrCaskUnavailableError then e.name
when Cask::CaskUnavailableError then e.token
else T.absurd(e)
end
if name == "updog"
ofail "What's updog?"

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "metafiles"

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "cli/parser"
@ -54,7 +54,8 @@ module Homebrew
end
def git_log(cd_dir, path = nil, tap = nil, args:)
cd cd_dir
# This is a false positive type error: https://github.com/sorbet/sorbet/issues/6812
T.unsafe(self).cd cd_dir
repo = Utils.popen_read("git", "rev-parse", "--show-toplevel").chomp
if tap
name = tap.to_s

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "formula"

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "formula"
@ -11,10 +11,8 @@ require "api"
module Homebrew
extend T::Sig
module_function
sig { returns(CLI::Parser) }
def outdated_args
def self.outdated_args
Homebrew::CLI::Parser.new do
description <<~EOS
List installed casks and formulae that have an updated version available. By default, version
@ -52,7 +50,7 @@ module Homebrew
end
end
def outdated
def self.outdated
args = outdated_args.parse
case json_version(args.json)
@ -90,7 +88,7 @@ module Homebrew
Homebrew.failed = args.named.present? && outdated.present?
end
def print_outdated(formulae_or_casks, args:)
def self.print_outdated(formulae_or_casks, args:)
formulae_or_casks.each do |formula_or_cask|
if formula_or_cask.is_a?(Formula)
f = formula_or_cask
@ -128,7 +126,7 @@ module Homebrew
end
end
def json_info(formulae_or_casks, args:)
def self.json_info(formulae_or_casks, args:)
formulae_or_casks.map do |formula_or_cask|
if formula_or_cask.is_a?(Formula)
f = formula_or_cask
@ -153,11 +151,11 @@ module Homebrew
end
end
def verbose?
def self.verbose?
($stdout.tty? || super) && !quiet?
end
def json_version(version)
def self.json_version(version)
version_hash = {
nil => nil,
true => :default,
@ -170,11 +168,11 @@ module Homebrew
version_hash[version]
end
def outdated_formulae(args:)
def self.outdated_formulae(args:)
select_outdated((args.named.to_resolved_formulae.presence || Formula.installed), args: args).sort
end
def outdated_casks(args:)
def self.outdated_casks(args:)
if args.named.present?
select_outdated(args.named.to_casks, args: args)
else
@ -182,7 +180,7 @@ module Homebrew
end
end
def outdated_formulae_casks(args:)
def self.outdated_formulae_casks(args:)
formulae, casks = args.named.to_resolved_formulae_to_casks
if formulae.blank? && casks.blank?
@ -193,7 +191,7 @@ module Homebrew
[select_outdated(formulae, args: args).sort, select_outdated(casks, args: args)]
end
def select_outdated(formulae_or_casks, args:)
def self.select_outdated(formulae_or_casks, args:)
formulae_or_casks.select do |formula_or_cask|
if formula_or_cask.is_a?(Formula)
formula_or_cask.outdated?(fetch_head: args.fetch_HEAD?)

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "formula_installer"

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "formula"

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "cli/parser"
@ -64,6 +64,7 @@ module Homebrew
info += ", #{Tap::TAP_DIRECTORY.dup.abv}" if Tap::TAP_DIRECTORY.directory?
puts info
else
info = ""
taps.each_with_index do |tap, i|
puts unless i.zero?
info = "#{tap}: "

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
require "cli/parser"
@ -121,7 +121,7 @@ module Homebrew
Homebrew.messages.display_messages(display_times: args.display_times?)
end
sig { params(formulae: T::Array[Formula], args: CLI::Args).returns(T::Boolean) }
sig { params(formulae: T::Array[Formula], args: T.untyped).returns(T::Boolean) }
def upgrade_outdated_formulae(formulae, args:)
return false if args.cask?
@ -226,7 +226,7 @@ module Homebrew
true
end
sig { params(casks: T::Array[Cask::Cask], args: CLI::Args).returns(T::Boolean) }
sig { params(casks: T::Array[Cask::Cask], args: T.untyped).returns(T::Boolean) }
def upgrade_outdated_casks(casks, args:)
return false if args.formula?

View File

@ -1,4 +1,4 @@
# typed: false
# typed: true
# frozen_string_literal: true
# `brew uses foo bar` returns formulae that use both foo and bar
@ -15,10 +15,8 @@ module Homebrew
extend DependenciesHelpers
module_function
sig { returns(CLI::Parser) }
def uses_args
def self.uses_args
Homebrew::CLI::Parser.new do
description <<~EOS
Show formulae and casks that specify <formula> as a dependency; that is, show dependents
@ -55,7 +53,7 @@ module Homebrew
end
end
def uses
def self.uses
args = uses_args.parse
Formulary.enable_factory_cache!
@ -88,7 +86,7 @@ module Homebrew
odie "Missing formulae should not have dependents!" if used_formulae_missing
end
def intersection_of_dependents(use_runtime_dependents, used_formulae, args:)
def self.intersection_of_dependents(use_runtime_dependents, used_formulae, args:)
recursive = args.recursive?
show_formulae_and_casks = !args.formula? && !args.cask?
includes, ignores = args_includes_ignores(args)
@ -132,7 +130,7 @@ module Homebrew
end
end
def select_used_dependents(dependents, used_formulae, recursive, includes, ignores)
def self.select_used_dependents(dependents, used_formulae, recursive, includes, ignores)
dependents.select do |d|
deps = if recursive
recursive_includes(Dependency, d, includes, ignores)

View File

@ -172,7 +172,7 @@ module Homebrew
EOS
end
check_new_version(formula, tap_remote_repo, url: old_url, tag: new_tag, args: args) if new_version.blank?
resource_path, forced_version = fetch_resource(formula, new_version, old_url, tag: new_tag)
resource_path, forced_version = fetch_resource_and_forced_version(formula, new_version, old_url, tag: new_tag)
new_revision = Utils.popen_read("git", "-C", resource_path.to_s, "rev-parse", "-q", "--verify", "HEAD")
new_revision = new_revision.strip
elsif new_revision.blank?
@ -199,7 +199,7 @@ module Homebrew
EOS
end
check_new_version(formula, tap_remote_repo, url: new_url, args: args) if new_version.blank?
resource_path, forced_version = fetch_resource(formula, new_version, new_url)
resource_path, forced_version = fetch_resource_and_forced_version(formula, new_version, new_url)
Utils::Tar.validate_file(resource_path)
new_hash = resource_path.sha256
end
@ -388,7 +388,7 @@ module Homebrew
end
end
def fetch_resource(formula, new_version, url, **specs)
def fetch_resource_and_forced_version(formula, new_version, url, **specs)
resource = Resource.new
resource.url(url, specs)
resource.owner = Resource.new(formula.name)

View File

@ -26,9 +26,7 @@ module Homebrew
extend Context
extend T::Sig
module_function
def _system(cmd, *args, **options)
def self._system(cmd, *args, **options)
pid = fork do
yield if block_given?
args.map!(&:to_s)
@ -43,7 +41,7 @@ module Homebrew
$CHILD_STATUS.success?
end
def system(cmd, *args, **options)
def self.system(cmd, *args, **options)
if verbose?
puts "#{cmd} #{args * " "}".gsub(RUBY_PATH, "ruby")
.gsub($LOAD_PATH.join(File::PATH_SEPARATOR).to_s, "$LOAD_PATH")
@ -53,7 +51,7 @@ module Homebrew
# rubocop:disable Style/GlobalVars
sig { params(the_module: Module, pattern: Regexp).void }
def inject_dump_stats!(the_module, pattern)
def self.inject_dump_stats!(the_module, pattern)
@injected_dump_stat_modules ||= {}
@injected_dump_stat_modules[the_module] ||= []
injected_methods = @injected_dump_stat_modules[the_module]