From d36df370994d1935c185e7b6b56a1836cbc70cd1 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 9 Oct 2020 12:11:23 +0200 Subject: [PATCH] Replace custom stubs with `sorbet-runtime-stub`. --- Library/Homebrew/cask/url.rb | 2 - Library/Homebrew/dev-cmd/tests.rb | 1 + Library/Homebrew/env_config.rb | 4 ++ Library/Homebrew/global.rb | 2 + Library/Homebrew/utils.rb | 1 - Library/Homebrew/utils/sorbet.rb | 13 +++- Library/Homebrew/utils/sorbet/stubs.rb | 85 -------------------------- docs/Manpage.md | 3 + manpages/brew.1 | 4 ++ 9 files changed, 25 insertions(+), 90 deletions(-) delete mode 100644 Library/Homebrew/utils/sorbet/stubs.rb diff --git a/Library/Homebrew/cask/url.rb b/Library/Homebrew/cask/url.rb index f1d6812c4b..723647ecfd 100644 --- a/Library/Homebrew/cask/url.rb +++ b/Library/Homebrew/cask/url.rb @@ -1,8 +1,6 @@ # typed: strict # frozen_string_literal: true -require "utils/sorbet" - # Class corresponding to the `url` stanza. # # @api private diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index db91f4fc8b..7512cabb88 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -58,6 +58,7 @@ module Homebrew ENV["HOMEBREW_NO_COMPAT"] = "1" if args.no_compat? ENV["HOMEBREW_TEST_GENERIC_OS"] = "1" if args.generic? ENV["HOMEBREW_TEST_ONLINE"] = "1" if args.online? + ENV["HOMEBREW_SORBET_RUNTIME"] = "1" ENV["USER"] ||= system_command!("id", args: ["-nu"]).stdout.chomp diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb index 30d56dff17..747906d200 100644 --- a/Library/Homebrew/env_config.rb +++ b/Library/Homebrew/env_config.rb @@ -251,6 +251,10 @@ module Homebrew "of macOS. This is useful in development on new macOS versions.", boolean: true, }, + HOMEBREW_SORBET_RUNTIME: { + description: "Enable runtime typechecking using Sorbet.", + boolean: true, + }, HOMEBREW_SVN: { description: "Use this as the `svn`(1) binary.", default_text: "A Homebrew-built Subversion (if installed), or the system-provided binary.", diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 227e581f8e..ac124aa09c 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -31,6 +31,8 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.irregular "it", "they" end +require "utils/sorbet" + HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ENV["HOMEBREW_BOTTLE_DEFAULT_DOMAIN"] HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ENV["HOMEBREW_BREW_DEFAULT_GIT_REMOTE"] HOMEBREW_CORE_DEFAULT_GIT_REMOTE = ENV["HOMEBREW_CORE_DEFAULT_GIT_REMOTE"] diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 72ef954f7e..e56867e16f 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -12,7 +12,6 @@ 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 index 8c4057abac..8bd0c06b28 100644 --- a/Library/Homebrew/utils/sorbet.rb +++ b/Library/Homebrew/utils/sorbet.rb @@ -1,8 +1,17 @@ # typed: strict # frozen_string_literal: true -if ENV["HOMEBREW_TESTS_COVERAGE"] +if ENV["HOMEBREW_SORBET_RUNTIME"] + require "utils/gems" + Homebrew.install_bundler_gems! require "sorbet-runtime" else - require "utils/sorbet/stubs" + begin + gem "sorbet-runtime" + raise "Loaded `sorbet-runtime` instead of `sorbet-runtime-stub`." + rescue Gem::LoadError + nil + end + + require "sorbet-runtime-stub" end diff --git a/Library/Homebrew/utils/sorbet/stubs.rb b/Library/Homebrew/utils/sorbet/stubs.rb deleted file mode 100644 index edb9fcdd1c..0000000000 --- a/Library/Homebrew/utils/sorbet/stubs.rb +++ /dev/null @@ -1,85 +0,0 @@ -# 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 diff --git a/docs/Manpage.md b/docs/Manpage.md index 7cbce54a99..ad972b3e1e 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -1770,6 +1770,9 @@ For example, you might add something like the following to your ~/.profile, ~/.b * `HOMEBREW_SKIP_OR_LATER_BOTTLES`: If set with `HOMEBREW_DEVELOPER`, do not use bottles from older versions of macOS. This is useful in development on new macOS versions. + * `HOMEBREW_SORBET_RUNTIME`: + Enable runtime typechecking using Sorbet. + * `HOMEBREW_SVN`: Use this as the `svn`(1) binary. diff --git a/manpages/brew.1 b/manpages/brew.1 index 851358882f..f8d8da4472 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -2446,6 +2446,10 @@ If set, use Pry for the \fBbrew irb\fR command\. If set with \fBHOMEBREW_DEVELOPER\fR, do not use bottles from older versions of macOS\. This is useful in development on new macOS versions\. . .TP +\fBHOMEBREW_SORBET_RUNTIME\fR +Enable runtime typechecking using Sorbet\. +. +.TP \fBHOMEBREW_SVN\fR Use this as the \fBsvn\fR(1) binary\. .