Skip to content

Commit 61d4238

Browse files
authored
Merge pull request #20860 from hyuraku/tab-install-status-type-safety
refactor: update type signatures to always return boolean for install…
2 parents b987b83 + eb6ee32 commit 61d4238

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

Library/Homebrew/tab.rb

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ class AbstractTab
1919
# Check whether the formula or cask was installed as a dependency.
2020
#
2121
# @api internal
22-
sig { returns(T.nilable(T::Boolean)) } # TODO: change this to always return a boolean
22+
sig { returns(T::Boolean) }
2323
attr_accessor :installed_as_dependency
2424

2525
# Check whether the formula or cask was installed on request.
2626
#
2727
# @api internal
28-
sig { returns(T.nilable(T::Boolean)) } # TODO: change this to always return a boolean
28+
sig { returns(T::Boolean) }
2929
attr_accessor :installed_on_request
3030

3131
sig { returns(T.nilable(String)) }
@@ -41,8 +41,10 @@ class AbstractTab
4141
# TODO: Update attributes to only accept symbol keys (kwargs style).
4242
sig { params(attributes: T.any(T::Hash[String, T.untyped], T::Hash[Symbol, T.untyped])).void }
4343
def initialize(attributes = {})
44-
@installed_as_dependency = T.let(nil, T.nilable(T::Boolean))
45-
@installed_on_request = T.let(nil, T.nilable(T::Boolean))
44+
@installed_as_dependency = T.let(false, T::Boolean)
45+
@installed_on_request = T.let(false, T::Boolean)
46+
@installed_as_dependency_present = T.let(false, T::Boolean)
47+
@installed_on_request_present = T.let(false, T::Boolean)
4648
@homebrew_version = T.let(nil, T.nilable(String))
4749
@tabfile = T.let(nil, T.nilable(Pathname))
4850
@loaded_from_api = T.let(nil, T.nilable(T::Boolean))
@@ -54,6 +56,12 @@ def initialize(attributes = {})
5456

5557
attributes.each do |key, value|
5658
case key.to_sym
59+
when :installed_as_dependency
60+
@installed_as_dependency = value
61+
@installed_as_dependency_present = true
62+
when :installed_on_request
63+
@installed_on_request = value
64+
@installed_on_request_present = true
5765
when :changed_files
5866
@changed_files = value&.map { |f| Pathname(f) }
5967
else
@@ -548,4 +556,10 @@ def to_s
548556
end
549557
s.join(" ")
550558
end
559+
560+
sig { returns(T::Boolean) }
561+
def installed_on_request_present? = @installed_on_request_present
562+
563+
sig { returns(T::Boolean) }
564+
def installed_as_dependency_present? = @installed_as_dependency_present
551565
end

Library/Homebrew/test/utils/autoremove_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,21 +96,21 @@
9696
end
9797

9898
specify "installed on request" do
99-
allow(tab_from_keg).to receive(:installed_on_request).and_return(true)
99+
allow(tab_from_keg).to receive_messages(installed_on_request: true, installed_on_request_present?: true)
100100

101101
expect(described_class.send(:unused_formulae_with_no_formula_dependents, formulae))
102102
.to eq([])
103103
end
104104

105105
specify "not installed on request" do
106-
allow(tab_from_keg).to receive(:installed_on_request).and_return(false)
106+
allow(tab_from_keg).to receive_messages(installed_on_request: false, installed_on_request_present?: true)
107107

108108
expect(described_class.send(:unused_formulae_with_no_formula_dependents, formulae))
109109
.to match_array(formulae)
110110
end
111111

112112
specify "installed on request is null" do
113-
allow(tab_from_keg).to receive(:installed_on_request).and_return(nil)
113+
allow(tab_from_keg).to receive_messages(installed_on_request: false, installed_on_request_present?: false)
114114

115115
expect(described_class.send(:unused_formulae_with_no_formula_dependents, formulae))
116116
.to eq([])

Library/Homebrew/utils/autoremove.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ def bottled_formulae_with_no_formula_dependents(formulae)
6868
sig { params(formulae: T::Array[Formula]).returns(T::Array[Formula]) }
6969
def unused_formulae_with_no_formula_dependents(formulae)
7070
unused_formulae = bottled_formulae_with_no_formula_dependents(formulae).select do |f|
71-
f.any_installed_keg&.tab&.installed_on_request == false
71+
tab = f.any_installed_keg&.tab
72+
next unless tab
73+
next unless tab.installed_on_request_present?
74+
75+
tab.installed_on_request == false
7276
end
7377

7478
unless unused_formulae.empty?

0 commit comments

Comments
 (0)