Class: Caveats Private

Inherits:
Object show all
Extended by:
Forwardable
Defined in:
caveats.rb,
sorbet/rbi/dsl/caveats.rbi

Overview

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

A formula's caveats.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(formula) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:



15
16
17
18
19
# File 'caveats.rb', line 15

def initialize(formula)
  @formula = formula
  @caveats = T.let(nil, T.nilable(String))
  @completions_and_elisp = T.let(nil, T.nilable(T::Array[String]))
end

Instance Attribute Details

#formulaFormula (readonly)

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



12
13
14
# File 'caveats.rb', line 12

def formula
  @formula
end

Instance Method Details

#caveatsString

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'caveats.rb', line 22

def caveats
  @caveats ||= begin
    caveats = []
    build = formula.build
    begin
      formula.build = Tab.for_formula(formula)
      string = formula.caveats.to_s
      caveats << "#{string.chomp}\n" unless string.empty?
    ensure
      formula.build = build
    end
    caveats << keg_only_text
    caveats << service_caveats
    caveats.compact.join("\n")
  end
end

#completions_and_elispArray<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'caveats.rb', line 47

def completions_and_elisp
  @completions_and_elisp ||= begin
    valid_shells = [:bash, :zsh, :fish, :pwsh].freeze
    current_shell = Utils::Shell.preferred || Utils::Shell.parent
    shells = if current_shell.present? &&
                (shell_sym = current_shell.to_sym) &&
                valid_shells.include?(shell_sym)
      [shell_sym]
    else
      valid_shells
    end
    completions_and_elisp = shells.map do |shell|
      function_completion_caveats(shell)
    end
    completions_and_elisp << elisp_caveats
    completions_and_elisp.compact
  end
end

#empty?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)


40
41
42
# File 'caveats.rb', line 40

def empty?
  caveats.blank? && completions_and_elisp.blank?
end

#keg_only_text(skip_reason: false) ⇒ String?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • skip_reason (Boolean) (defaults to: false)

Returns:



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'caveats.rb', line 67

def keg_only_text(skip_reason: false)
  return unless formula.keg_only?

  s = if skip_reason
    ""
  else
    <<~EOS
      #{formula.name} is keg-only, which means it was not symlinked into #{HOMEBREW_PREFIX},
      because #{formula.keg_only_reason.to_s.chomp}.
    EOS
  end.dup

  if formula.bin.directory? || formula.sbin.directory?
    s << <<~EOS

      If you need to have #{formula.name} first in your PATH, run:
    EOS
    s << "  #{Utils::Shell.prepend_path_in_profile(formula.opt_bin.to_s)}\n" if formula.bin.directory?
    s << "  #{Utils::Shell.prepend_path_in_profile(formula.opt_sbin.to_s)}\n" if formula.sbin.directory?
  end

  if formula.lib.directory? || formula.include.directory?
    s << <<~EOS

      For compilers to find #{formula.name} you may need to set:
    EOS

    s << "  #{Utils::Shell.export_value("LDFLAGS", "-L#{formula.opt_lib}")}\n" if formula.lib.directory?

    s << "  #{Utils::Shell.export_value("CPPFLAGS", "-I#{formula.opt_include}")}\n" if formula.include.directory?

    if which("pkg-config", ORIGINAL_PATHS) &&
       ((formula.lib/"pkgconfig").directory? || (formula.share/"pkgconfig").directory?)
      s << <<~EOS

        For pkg-config to find #{formula.name} you may need to set:
      EOS

      if (formula.lib/"pkgconfig").directory?
        s << "  #{Utils::Shell.export_value("PKG_CONFIG_PATH", "#{formula.opt_lib}/pkgconfig")}\n"
      end

      if (formula.share/"pkgconfig").directory?
        s << "  #{Utils::Shell.export_value("PKG_CONFIG_PATH", "#{formula.opt_share}/pkgconfig")}\n"
      end
    end
  end
  s << "\n" unless s.end_with?("\n")
  s
end