From 68596ec720a50f44ae9c30c5806aa7f2d4bcc96f Mon Sep 17 00:00:00 2001 From: Issy Long Date: Fri, 20 Jun 2025 10:11:30 +0200 Subject: [PATCH] Make some of the `bundle` commands Sorbet `typed: true` - The last remaining one is `exec` but that's a bit more involved (https://github.com/Homebrew/brew/pull/20128#discussion_r2156781591). --- Library/Homebrew/bundle/brew_dumper.rb | 11 ++++++++--- Library/Homebrew/bundle/checker.rb | 6 +++--- .../sorbet/rbi/dsl/homebrew/bundle/brew_dumper.rbi | 5 +++++ 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 Library/Homebrew/sorbet/rbi/dsl/homebrew/bundle/brew_dumper.rbi diff --git a/Library/Homebrew/bundle/brew_dumper.rb b/Library/Homebrew/bundle/brew_dumper.rb index 403c92eec6..67c5a6c6a2 100644 --- a/Library/Homebrew/bundle/brew_dumper.rb +++ b/Library/Homebrew/bundle/brew_dumper.rb @@ -1,4 +1,4 @@ -# typed: false # rubocop:todo Sorbet/TrueSigil +# typed: true # frozen_string_literal: true require "json" @@ -189,7 +189,12 @@ module Homebrew class Topo < Hash include TSort + + def each_key(&block) + keys.each(&block) + end alias tsort_each_node each_key + def tsort_each_child(node, &block) fetch(node.downcase).sort.each(&block) end @@ -230,8 +235,8 @@ module Homebrew odie <<~EOS Formulae dependency graph sorting failed (likely due to a circular dependency): - #{cycle_first}: #{topo[cycle_first]} - #{cycle_last}: #{topo[cycle_last]} + #{cycle_first}: #{topo[cycle_first] if topo} + #{cycle_last}: #{topo[cycle_last] if topo} Please run the following commands and try again: brew update brew uninstall --ignore-dependencies --force #{cycle_first} #{cycle_last} diff --git a/Library/Homebrew/bundle/checker.rb b/Library/Homebrew/bundle/checker.rb index 411e0d8c0b..3d8959ffdf 100644 --- a/Library/Homebrew/bundle/checker.rb +++ b/Library/Homebrew/bundle/checker.rb @@ -1,4 +1,4 @@ -# typed: false # rubocop:todo Sorbet/TrueSigil +# typed: true # frozen_string_literal: true module Homebrew @@ -23,7 +23,7 @@ module Homebrew else "needs to be installed or updated." end - "#{self.class::PACKAGE_TYPE_NAME} #{name} #{reason}" + "#{self.class.const_get(:PACKAGE_TYPE_NAME)} #{name} #{reason}" end def full_check(packages, no_upgrade:) @@ -33,7 +33,7 @@ module Homebrew def checkable_entries(all_entries) require "bundle/skipper" - all_entries.select { |e| e.type == self.class::PACKAGE_TYPE } + all_entries.select { |e| e.type == self.class.const_get(:PACKAGE_TYPE) } .reject(&Bundle::Skipper.method(:skip?)) end diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/bundle/brew_dumper.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/bundle/brew_dumper.rbi new file mode 100644 index 0000000000..f747988811 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/bundle/brew_dumper.rbi @@ -0,0 +1,5 @@ +# typed: true + +module Homebrew::Bundle::BrewDumper + include Kernel +end