diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index e56867e16f..72ef954f7e 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -12,6 +12,7 @@ require "utils/link" require "utils/livecheck_formula" require "utils/popen" require "utils/repology" +require "utils/sorbet" require "utils/svn" require "utils/tty" require "tap_constants" diff --git a/Library/Homebrew/utils/sorbet.rb b/Library/Homebrew/utils/sorbet.rb new file mode 100644 index 0000000000..8c4057abac --- /dev/null +++ b/Library/Homebrew/utils/sorbet.rb @@ -0,0 +1,8 @@ +# typed: strict +# frozen_string_literal: true + +if ENV["HOMEBREW_TESTS_COVERAGE"] + require "sorbet-runtime" +else + require "utils/sorbet/stubs" +end diff --git a/Library/Homebrew/utils/sorbet/stubs.rb b/Library/Homebrew/utils/sorbet/stubs.rb new file mode 100644 index 0000000000..edb9fcdd1c --- /dev/null +++ b/Library/Homebrew/utils/sorbet/stubs.rb @@ -0,0 +1,85 @@ +# typed: false +# frozen_string_literal: true + +# Stubs for `sorbet-runtime`, all taken from `sorbet/t` except for `T::Sig.sig`. +# +# @private +module T + # rubocop:disable Style/Documentation + module Sig + module WithoutRuntime + def self.sig(arg = nil, &blk); end + end + + module_function + + def sig(arg = nil, &blk); end + end + + def self.any(type_a, type_b, *types); end + + def self.nilable(type); end + + def self.untyped; end + + def self.noreturn; end + + def self.all(type_a, type_b, *types); end + + def self.enum(values); end + + def self.proc; end + + def self.self_type; end + + def self.class_of(klass); end + + def self.type_alias(type = nil, &blk); end + + def self.type_parameter(name); end + + def self.cast(value, _type, checked: true) + value + end + + def self.let(value, _type, checked: true) + value + end + + def self.assert_type!(value, _type, checked: true) + value + end + + def self.unsafe(value) + value + end + + def self.must(arg, _msg = nil) + arg + end + + def self.reveal_type(value) + value + end + + module Array + def self.[](type); end + end + + module Hash + def self.[](keys, values); end + end + + module Enumerable + def self.[](type); end + end + + module Range + def self.[](type); end + end + + module Set + def self.[](type); end + end + # rubocop:enable Style/Documentation +end