Skip to content

Commit

Permalink
Formula, BuildError: Update type signatures
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
samford committed Sep 13, 2023
1 parent c953076 commit e34a053
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Library/Homebrew/exceptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/formula.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2629,7 +2629,7 @@ def undeclared_runtime_dependencies
#
# # 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?

Expand Down Expand Up @@ -2794,7 +2794,7 @@ def mkdir(name, &block)
end

# Runs `xcodebuild` without Homebrew's compiler environment variables set.
sig { params(args: T.any(String, Pathname)).void }
sig { params(args: T.any(String, Pathname, Symbol)).void }
def xcodebuild(*args)
removed = ENV.remove_cc_etc

Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/test/exceptions_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,11 @@ class Baz < Formula; end
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
Expand Down

0 comments on commit e34a053

Please sign in to comment.