Formula, BuildError: Update type signatures

We're seeing type errors when building formulae that use something
like `xcodebuild ..., "-arch", Hardware::CPU.arch`, since `CPU.arch`
is a symbol. We've been addressing these issues by calling `#to_s` on
the value but there was some talk about simply expanding the type
signatures to accommodate anything that will be cast to a `String`.

There's maybe still an argument to be made for doing string conversion
in formulae but expanding the type signatures will resolve a number of
existing type errors if we simply want to rely on implicit type
casting.

Past that, this also updates the type signature for `BuildError` to
align with the `#system` signature changes, as we receive a type error
otherwise.
This commit is contained in:
Sam Ford 2023-09-13 13:23:35 -04:00
parent c953076609
commit 578c935bcf
No known key found for this signature in database
GPG Key ID: 7AF5CBEE1DD6F76D
3 changed files with 5 additions and 5 deletions

View File

@ -479,7 +479,7 @@ class BuildError < RuntimeError
params(
formula: T.nilable(Formula),
cmd: T.any(String, Pathname),
args: T::Array[T.any(String, Pathname, Integer)],
args: T::Array[T.any(String, Integer, Pathname, Symbol)],
env: T::Hash[String, T.untyped],
).void
}

View File

@ -2629,7 +2629,7 @@ class Formula
#
# # If there is a "make install" available, please use it!
# system "make", "install"</pre>
sig { params(cmd: T.any(String, Pathname), args: T.any(String, Pathname, Integer)).void }
sig { params(cmd: T.any(String, Pathname), args: T.any(String, Integer, Pathname, Symbol)).void }
def system(cmd, *args)
verbose_using_dots = Homebrew::EnvConfig.verbose_using_dots?
@ -2794,7 +2794,7 @@ class Formula
end
# Runs `xcodebuild` without Homebrew's compiler environment variables set.
sig { params(args: T.any(String, Pathname)).void }
sig { params(args: T.any(String, Integer, Pathname, Symbol)).void }
def xcodebuild(*args)
removed = ENV.remove_cc_etc

View File

@ -141,11 +141,11 @@ describe "Exception" do
end
describe BuildError do
subject { described_class.new(formula, "badprg", %w[arg1 arg2], {}) }
subject { described_class.new(formula, "badprg", ["arg1", 2, Pathname.new("arg3"), :arg4], {}) }
let(:formula) { instance_double(Formula, name: "foo") }
its(:to_s) { is_expected.to eq("Failed executing: badprg arg1 arg2") }
its(:to_s) { is_expected.to eq("Failed executing: badprg arg1 2 arg3 arg4") }
end
describe OperationInProgressError do