Enable types in Formula files
This commit is contained in:
parent
c271a9ae75
commit
7720485f40
@ -1,6 +0,0 @@
|
||||
# typed: strict
|
||||
|
||||
class Object
|
||||
sig { returns(T::Boolean) }
|
||||
def present?; end
|
||||
end
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: false
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "cache_store"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: false
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "deprecate_disable"
|
||||
@ -391,7 +391,7 @@ module Homebrew
|
||||
"canonical name (#{conflicting_formula.name}) instead of #{conflict.name}"
|
||||
end
|
||||
|
||||
reverse_conflict_found = false
|
||||
reverse_conflict_found = T.let(false, T::Boolean)
|
||||
conflicting_formula.conflicts.each do |reverse_conflict|
|
||||
reverse_conflict_formula = Formulary.factory(reverse_conflict.name)
|
||||
if tap.formula_renames.key?(reverse_conflict.name) || tap.aliases.include?(reverse_conflict.name)
|
||||
@ -732,14 +732,14 @@ module Homebrew
|
||||
current_revision = formula.revision
|
||||
current_url = formula.stable.url
|
||||
|
||||
previous_version = nil
|
||||
previous_version_scheme = nil
|
||||
previous_revision = nil
|
||||
previous_version = T.let(nil, T.nilable(Version))
|
||||
previous_version_scheme = T.let(nil, T.nilable(Integer))
|
||||
previous_revision = T.let(nil, T.nilable(Integer))
|
||||
|
||||
newest_committed_version = nil
|
||||
newest_committed_checksum = nil
|
||||
newest_committed_revision = nil
|
||||
newest_committed_url = nil
|
||||
newest_committed_version = T.let(nil, T.nilable(Version))
|
||||
newest_committed_checksum = T.let(nil, T.nilable(String))
|
||||
newest_committed_revision = T.let(nil, T.nilable(Integer))
|
||||
newest_committed_url = T.let(nil, T.nilable(String))
|
||||
|
||||
fv.rev_list("origin/HEAD") do |rev|
|
||||
begin
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: false
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "utils/shell"
|
||||
@ -7,6 +7,17 @@ require "utils/shell"
|
||||
#
|
||||
# @api private
|
||||
module FormulaCellarChecks
|
||||
extend T::Sig
|
||||
extend T::Helpers
|
||||
|
||||
abstract!
|
||||
|
||||
sig { abstract.returns(Formula) }
|
||||
def formula; end
|
||||
|
||||
sig { abstract.params(output: T.nilable(String)).void }
|
||||
def problem_if_output(output); end
|
||||
|
||||
def check_env_path(bin)
|
||||
# warn the user if stuff was installed outside of their PATH
|
||||
return unless bin.directory?
|
||||
@ -407,7 +418,7 @@ module FormulaCellarChecks
|
||||
end
|
||||
end
|
||||
|
||||
has_cpuid_instruction = false
|
||||
has_cpuid_instruction = T.let(false, T::Boolean)
|
||||
Utils.popen_read(objdump, "--disassemble", file) do |io|
|
||||
until io.eof?
|
||||
instruction = io.readline.split("\t")[@instruction_column_index[objdump]]&.strip
|
||||
|
||||
5
Library/Homebrew/formula_cellar_checks.rbi
Normal file
5
Library/Homebrew/formula_cellar_checks.rbi
Normal file
@ -0,0 +1,5 @@
|
||||
# typed: strict
|
||||
|
||||
module FormulaCellarChecks
|
||||
include Kernel
|
||||
end
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: false
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "formula"
|
||||
@ -653,7 +653,7 @@ on_request: installed_on_request?, options: options)
|
||||
inherited_options
|
||||
end
|
||||
|
||||
sig { params(deps: T::Array[[Formula, Options]]).void }
|
||||
sig { params(deps: T::Array[[Dependency, Options]]).void }
|
||||
def install_dependencies(deps)
|
||||
if deps.empty? && only_deps?
|
||||
puts "All dependencies for #{formula.full_name} are satisfied."
|
||||
@ -745,7 +745,7 @@ on_request: installed_on_request?, options: options)
|
||||
fi.finish
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
ignore_interrupts do
|
||||
tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory?
|
||||
tmp_keg.rename(installed_keg.to_s) if tmp_keg && !installed_keg.directory?
|
||||
linked_keg.link(verbose: verbose?) if keg_was_linked
|
||||
end
|
||||
raise unless e.is_a? FormulaInstallationAlreadyAttemptedError
|
||||
@ -1266,7 +1266,7 @@ on_request: installed_on_request?, options: options)
|
||||
keg.relocate_build_prefix(keg, prefix, HOMEBREW_PREFIX)
|
||||
end
|
||||
|
||||
sig { params(output: T.nilable(String)).void }
|
||||
sig { override.params(output: T.nilable(String)).void }
|
||||
def problem_if_output(output)
|
||||
return unless output
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: false
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "digest/md5"
|
||||
@ -56,7 +56,7 @@ module Formulary
|
||||
namespace = Utils.deconstantize(klass.name)
|
||||
next if Utils.deconstantize(namespace) != name
|
||||
|
||||
remove_const(Utils.demodulize(namespace))
|
||||
remove_const(Utils.demodulize(namespace).to_sym)
|
||||
end
|
||||
end
|
||||
|
||||
@ -67,6 +67,7 @@ module Formulary
|
||||
module PathnameWriteMkpath
|
||||
refine Pathname do
|
||||
def write(content, offset = nil, **open_args)
|
||||
T.bind(self, Pathname)
|
||||
raise "Will not overwrite #{self}" if exist? && !offset && !open_args[:mode]&.match?(/^a\+?$/)
|
||||
|
||||
dirname.mkpath
|
||||
@ -132,7 +133,7 @@ module Formulary
|
||||
namespace = "FormulaNamespaceAPI#{Digest::MD5.hexdigest(name)}"
|
||||
|
||||
mod = Module.new
|
||||
remove_const(namespace) if const_defined?(namespace)
|
||||
remove_const(namespace.to_sym) if const_defined?(namespace)
|
||||
const_set(namespace, mod)
|
||||
|
||||
mod.const_set(:BUILD_FLAGS, flags)
|
||||
@ -268,6 +269,7 @@ module Formulary
|
||||
service_hash = Homebrew::Service.deserialize(service_hash)
|
||||
run_params = service_hash.delete(:run)
|
||||
service do
|
||||
T.bind(self, Homebrew::Service)
|
||||
if run_params.is_a?(Hash)
|
||||
run(**run_params)
|
||||
else
|
||||
@ -306,7 +308,7 @@ module Formulary
|
||||
end
|
||||
end
|
||||
|
||||
klass.loaded_from_api = true
|
||||
T.cast(klass, T.class_of(Formula)).loaded_from_api = true
|
||||
mod.const_set(class_s, klass)
|
||||
|
||||
cache[:api] ||= {}
|
||||
@ -351,7 +353,7 @@ module Formulary
|
||||
|
||||
def self.class_s(name)
|
||||
class_name = name.capitalize
|
||||
class_name.gsub!(/[-_.\s]([a-zA-Z0-9])/) { Regexp.last_match(1).upcase }
|
||||
class_name.gsub!(/[-_.\s]([a-zA-Z0-9])/) { T.must(Regexp.last_match(1)).upcase }
|
||||
class_name.tr!("+", "x")
|
||||
class_name.sub!(/(.)@(\d)/, "\\1AT\\2")
|
||||
class_name
|
||||
@ -489,17 +491,17 @@ module Formulary
|
||||
def initialize(url, from: nil)
|
||||
@url = url
|
||||
@from = from
|
||||
uri = URI(url)
|
||||
formula = File.basename(uri.path, ".rb")
|
||||
super formula, HOMEBREW_CACHE_FORMULA/File.basename(uri.path)
|
||||
uri_path = T.must(URI(url).path)
|
||||
formula = File.basename(uri_path, ".rb")
|
||||
super formula, HOMEBREW_CACHE_FORMULA/File.basename(uri_path)
|
||||
end
|
||||
|
||||
def load_file(flags:, ignore_errors:)
|
||||
if @from != :formula_installer
|
||||
if %r{githubusercontent.com/[\w-]+/[\w-]+/[a-f0-9]{40}(?:/Formula)?/(?<formula_name>[\w+-.@]+).rb} =~ url
|
||||
if (md = %r{githubusercontent.com/[\w-]+/[\w-]+/[a-f0-9]{40}(?:/Formula)?/(?<name>[\w+-.@]+).rb}.match(url))
|
||||
raise UnsupportedInstallationMethod,
|
||||
"Installation of #{formula_name} from a GitHub commit URL is unsupported! " \
|
||||
"`brew extract #{formula_name}` to a stable tap on GitHub instead."
|
||||
"Installation of #{md[:name]} from a GitHub commit URL is unsupported! " \
|
||||
"`brew extract #{md[:name]}` to a stable tap on GitHub instead."
|
||||
elsif url.match?(%r{^(https?|ftp)://})
|
||||
raise UnsupportedInstallationMethod,
|
||||
"Non-checksummed download of #{name} formula file from an arbitrary URL is unsupported! " \
|
||||
@ -512,8 +514,8 @@ module Formulary
|
||||
curl_download url, to: path
|
||||
super
|
||||
rescue MethodDeprecatedError => e
|
||||
if %r{github.com/(?<user>[\w-]+)/(?<repo>[\w-]+)/} =~ url
|
||||
e.issues_url = "https://github.com/#{user}/#{repo}/issues/new"
|
||||
if (match_data = %r{github.com/(?<user>[\w-]+)/(?<repo>[\w-]+)/}.match(url))
|
||||
e.issues_url = "https://github.com/#{match_data[:user]}/#{match_data[:repo]}/issues/new"
|
||||
end
|
||||
raise
|
||||
end
|
||||
|
||||
5
Library/Homebrew/formulary.rbi
Normal file
5
Library/Homebrew/formulary.rbi
Normal file
@ -0,0 +1,5 @@
|
||||
# typed: strict
|
||||
|
||||
module Formulary
|
||||
include Kernel
|
||||
end
|
||||
@ -28,6 +28,7 @@ class Resource
|
||||
# formula name before initialization of the formula.
|
||||
attr_accessor :name
|
||||
|
||||
sig { params(name: T.nilable(String), block: T.nilable(T.proc.bind(Resource).void)).void }
|
||||
def initialize(name = nil, &block)
|
||||
# Ensure this is synced with `initialize_dup` and `freeze` (excluding simple objects like integers and booleans)
|
||||
@name = name
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user