Skip to content

Commit

Permalink
Merge pull request #18430 from Homebrew/files-strict-type
Browse files Browse the repository at this point in the history
completions formula_pin: `typed: strict`, cxxstdlib: `typed: strong`
  • Loading branch information
MikeMcQuaid authored Sep 27, 2024
2 parents 431c884 + dca3e70 commit 7156fb7
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 14 deletions.
19 changes: 10 additions & 9 deletions Library/Homebrew/completions.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# typed: true # rubocop:todo Sorbet/StrictSigil
# typed: strict
# frozen_string_literal: true

require "utils/link"
Expand All @@ -16,8 +16,8 @@ module Completions
keyword_init: true,
)

COMPLETIONS_DIR = (HOMEBREW_REPOSITORY/"completions").freeze
TEMPLATE_DIR = (HOMEBREW_LIBRARY_PATH/"completions").freeze
COMPLETIONS_DIR = T.let((HOMEBREW_REPOSITORY/"completions").freeze, Pathname)
TEMPLATE_DIR = T.let((HOMEBREW_LIBRARY_PATH/"completions").freeze, Pathname)

SHELLS = %w[bash fish zsh].freeze
COMPLETIONS_EXCLUSION_LIST = %w[
Expand All @@ -26,7 +26,7 @@ module Completions
update-report
].freeze

BASH_NAMED_ARGS_COMPLETION_FUNCTION_MAPPING = {
BASH_NAMED_ARGS_COMPLETION_FUNCTION_MAPPING = T.let({
formula: "__brew_complete_formulae",
installed_formula: "__brew_complete_installed_formulae",
outdated_formula: "__brew_complete_outdated_formulae",
Expand All @@ -38,9 +38,9 @@ module Completions
command: "__brew_complete_commands",
diagnostic_check: '__brewcomp "${__HOMEBREW_DOCTOR_CHECKS=$(brew doctor --list-checks)}"',
file: "__brew_complete_files",
}.freeze
}.freeze, T::Hash[Symbol, String])

ZSH_NAMED_ARGS_COMPLETION_FUNCTION_MAPPING = {
ZSH_NAMED_ARGS_COMPLETION_FUNCTION_MAPPING = T.let({
formula: "__brew_formulae",
installed_formula: "__brew_installed_formulae",
outdated_formula: "__brew_outdated_formulae",
Expand All @@ -52,9 +52,9 @@ module Completions
command: "__brew_commands",
diagnostic_check: "__brew_diagnostic_checks",
file: "__brew_formulae_or_ruby_files",
}.freeze
}.freeze, T::Hash[Symbol, String])

FISH_NAMED_ARGS_COMPLETION_FUNCTION_MAPPING = {
FISH_NAMED_ARGS_COMPLETION_FUNCTION_MAPPING = T.let({
formula: "__fish_brew_suggest_formulae_all",
installed_formula: "__fish_brew_suggest_formulae_installed",
outdated_formula: "__fish_brew_suggest_formulae_outdated",
Expand All @@ -65,7 +65,7 @@ module Completions
installed_tap: "__fish_brew_suggest_taps_installed",
command: "__fish_brew_suggest_commands",
diagnostic_check: "__fish_brew_suggest_diagnostic_checks",
}.freeze
}.freeze, T::Hash[Symbol, String])

sig { void }
def self.link!
Expand Down Expand Up @@ -264,6 +264,7 @@ def self.generate_zsh_subcommand_completion(command)
COMPLETION
end

sig { params(command: String, option: String).returns(String) }
def self.generate_zsh_option_exclusions(command, option)
conflicts = Commands.option_conflicts(command, option.gsub(/^--/, ""))
return "" unless conflicts.presence
Expand Down
13 changes: 10 additions & 3 deletions Library/Homebrew/cxxstdlib.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
# typed: true # rubocop:todo Sorbet/StrictSigil
# typed: strong
# frozen_string_literal: true

require "compilers"

# Combination of C++ standard library and compiler.
class CxxStdlib
sig { params(type: T.nilable(Symbol), compiler: T.any(Symbol, String)).returns(CxxStdlib) }
def self.create(type, compiler)
raise ArgumentError, "Invalid C++ stdlib type: #{type}" if type && [:libstdcxx, :libcxx].exclude?(type)

CxxStdlib.new(type, compiler)
end

attr_reader :type, :compiler
sig { returns(T.nilable(Symbol)) }
attr_reader :type

sig { returns(Symbol) }
attr_reader :compiler

sig { params(type: T.nilable(Symbol), compiler: T.any(Symbol, String)).void }
def initialize(type, compiler)
@type = type
@compiler = compiler.to_sym
@compiler = T.let(compiler.to_sym, Symbol)
end

sig { returns(String) }
def type_string
type.to_s.gsub(/cxx$/, "c++")
end
Expand Down
12 changes: 10 additions & 2 deletions Library/Homebrew/formula_pin.rb
Original file line number Diff line number Diff line change
@@ -1,44 +1,52 @@
# typed: true # rubocop:todo Sorbet/StrictSigil
# typed: strict
# frozen_string_literal: true

require "keg"

# Helper functions for pinning a formula.
class FormulaPin
sig { params(formula: Formula).void }
def initialize(formula)
@formula = formula
end

sig { returns(Pathname) }
def path
HOMEBREW_PINNED_KEGS/@formula.name
end

sig { params(version: PkgVersion).void }
def pin_at(version)
HOMEBREW_PINNED_KEGS.mkpath
version_path = @formula.rack/version
version_path = @formula.rack/version.to_s
path.make_relative_symlink(version_path) if !pinned? && version_path.exist?
end

sig { void }
def pin
latest_keg = @formula.installed_kegs.max_by(&:scheme_and_version)
return if latest_keg.nil?

pin_at(latest_keg.version)
end

sig { void }
def unpin
path.unlink if pinned?
HOMEBREW_PINNED_KEGS.rmdir_if_possible
end

sig { returns(T::Boolean) }
def pinned?
path.symlink?
end

sig { returns(T::Boolean) }
def pinnable?
!@formula.installed_prefixes.empty?
end

sig { returns(T.nilable(PkgVersion)) }
def pinned_version
Keg.new(path.resolved_path).version if pinned?
end
Expand Down

0 comments on commit 7156fb7

Please sign in to comment.