From 00ba3930d637afdc30f44c90277b9c7baa03f665 Mon Sep 17 00:00:00 2001 From: Caleb Xu Date: Mon, 13 May 2024 08:48:41 -0400 Subject: [PATCH] messages: enable strict typing --- Library/Homebrew/messages.rb | 22 +++++++++++++++++----- Library/Homebrew/test/messages_spec.rb | 20 ++++++++++---------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Library/Homebrew/messages.rb b/Library/Homebrew/messages.rb index f032e17829..cdbf7059e9 100644 --- a/Library/Homebrew/messages.rb +++ b/Library/Homebrew/messages.rb @@ -1,32 +1,43 @@ -# typed: true +# typed: strict # frozen_string_literal: true # A {Messages} object collects messages that may need to be displayed together # at the end of a multi-step `brew` command run. class Messages - attr_reader :caveats, :package_count, :install_times + sig { returns(T::Array[T::Hash[Symbol, Symbol]]) } + attr_reader :caveats + + sig { returns(Integer) } + attr_reader :package_count + + sig { returns(T::Array[T::Hash[String, Float]]) } + attr_reader :install_times sig { void } def initialize - @caveats = [] - @package_count = 0 - @install_times = [] + @caveats = T.let([], T::Array[T::Hash[Symbol, Symbol]]) + @package_count = T.let(0, Integer) + @install_times = T.let([], T::Array[T::Hash[String, Float]]) end + sig { params(package: String, caveats: T.any(String, Caveats)).void } def record_caveats(package, caveats) @caveats.push(package:, caveats:) end + sig { params(package: String, elapsed_time: Float).void } def package_installed(package, elapsed_time) @package_count += 1 @install_times.push(package:, time: elapsed_time) end + sig { params(force_caveats: T::Boolean, display_times: T::Boolean).void } def display_messages(force_caveats: false, display_times: false) display_caveats(force: force_caveats) display_install_times if display_times end + sig { params(force: T::Boolean).void } def display_caveats(force: false) return if @package_count.zero? return if @package_count == 1 && !force @@ -38,6 +49,7 @@ class Messages end end + sig { void } def display_install_times return if install_times.empty? diff --git a/Library/Homebrew/test/messages_spec.rb b/Library/Homebrew/test/messages_spec.rb index ca37a44535..412e5d6764 100644 --- a/Library/Homebrew/test/messages_spec.rb +++ b/Library/Homebrew/test/messages_spec.rb @@ -11,7 +11,7 @@ RSpec.describe Messages do describe "#record_caveats" do it "adds a caveat" do expect do - messages.record_caveats(test_formula, "Zsh completions were installed") + messages.record_caveats(test_formula.name, "Zsh completions were installed") end.to change(messages.caveats, :count).by(1) end end @@ -19,13 +19,13 @@ RSpec.describe Messages do describe "#package_installed" do it "increases the package count" do expect do - messages.package_installed(test_formula, elapsed_time) + messages.package_installed(test_formula.name, elapsed_time) end.to change(messages, :package_count).by(1) end it "adds to install_times" do expect do - messages.package_installed(test_formula, elapsed_time) + messages.package_installed(test_formula.name, elapsed_time) end.to change(messages.install_times, :count).by(1) end end @@ -33,8 +33,8 @@ RSpec.describe Messages do describe "#display_messages" do context "when package_count is less than two" do before do - messages.record_caveats(test_formula, "Zsh completions were installed") - messages.package_installed(test_formula, elapsed_time) + messages.record_caveats(test_formula.name, "Zsh completions were installed") + messages.package_installed(test_formula.name, elapsed_time) end it "doesn't print caveat details" do @@ -44,7 +44,7 @@ RSpec.describe Messages do context "when caveats is empty" do before do - messages.package_installed(test_formula, elapsed_time) + messages.package_installed(test_formula.name, elapsed_time) end it "doesn't print caveat details" do @@ -56,9 +56,9 @@ RSpec.describe Messages do let(:test_formula2) { formula("bar") { url("https://brew.sh/bar-0.1.tgz") } } before do - messages.record_caveats(test_formula, "Zsh completions were installed") - messages.package_installed(test_formula, elapsed_time) - messages.package_installed(test_formula2, elapsed_time) + messages.record_caveats(test_formula.name, "Zsh completions were installed") + messages.package_installed(test_formula.name, elapsed_time) + messages.package_installed(test_formula2.name, elapsed_time) end it "prints caveat details" do @@ -81,7 +81,7 @@ RSpec.describe Messages do context "when `install_times` is present" do before do - messages.package_installed(test_formula, elapsed_time) + messages.package_installed(test_formula.name, elapsed_time) end it "prints installation times" do