Merge pull request #18430 from Homebrew/files-strict-type
completions formula_pin: `typed: strict`, cxxstdlib: `typed: strong`
This commit is contained in:
		
						commit
						7156fb7d3a
					
				@ -1,4 +1,4 @@
 | 
			
		||||
# typed: true # rubocop:todo Sorbet/StrictSigil
 | 
			
		||||
# typed: strict
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "utils/link"
 | 
			
		||||
@ -16,8 +16,8 @@ module Homebrew
 | 
			
		||||
      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[
 | 
			
		||||
@ -26,7 +26,7 @@ module Homebrew
 | 
			
		||||
      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",
 | 
			
		||||
@ -38,9 +38,9 @@ module Homebrew
 | 
			
		||||
      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",
 | 
			
		||||
@ -52,9 +52,9 @@ module Homebrew
 | 
			
		||||
      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",
 | 
			
		||||
@ -65,7 +65,7 @@ module Homebrew
 | 
			
		||||
      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!
 | 
			
		||||
@ -264,6 +264,7 @@ module Homebrew
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -1,24 +1,28 @@
 | 
			
		||||
# 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?
 | 
			
		||||
@ -26,19 +30,23 @@ class FormulaPin
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user