Модуль: Formatter
- Определён в:
- utils/formatter.rb
Обзор
Этот модуль является частью внутреннего API. Этот модуль можно использовать только во внутренних целях в репозиториях, принадлежащих Homebrew, за исключением cask-пакетов и формул. По возможности сторонним разработчикам следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Вспомогательный модуль для форматирования вывода.
Краткое описание констант свернуть
- COMMAND_DESC_WIDTH =
Эта константа является частью внутреннего API. Эту константу можно использовать только во внутренних целях в репозиториях, принадлежащих Homebrew, за исключением cask-пакетов и формул. По возможности сторонним разработчикам следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
80- OPTION_DESC_WIDTH =
Эта константа является частью внутреннего API. Эту константу можно использовать только во внутренних целях в репозиториях, принадлежащих Homebrew, за исключением cask-пакетов и формул. По возможности сторонним разработчикам следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
45
Краткое описание методов класса свернуть
- .arrow(string, color: nil) ⇒ String закрытый
- .bold(string) ⇒ String закрытый
Синхронизируйте с
boldв Library/Homebrew/utils/formatter.sh. - .columns(objects, gap_size: 2, min_width: 0) ⇒ String внутренний
Размещает объекты в столбцах, ширина которых соответствует текущей ширине терминала.
- .disk_usage_readable(size_in_bytes) ⇒ String закрытый
- .disk_usage_readable_size_unit(size_in_bytes, precision: nil) ⇒ Array<([Integer, Float], String)> закрытый
- .error(string, label: nil) ⇒ String внутренний
Форматирует строку как сообщение об ошибке с необязательной меткой.
- .format_help_text(string, width: 172) ⇒ String закрытый
Переносит текст, чтобы он укладывался в заданное количество столбцов, используя регулярные выражения, которые:
- .headline(string, color: nil) ⇒ String внутренний
Форматирует строку как заголовок.
- .identifier(string) ⇒ String закрытый
- .number_readable(number) ⇒ String закрытый
- .option(string) ⇒ String закрытый
- .redact_secrets(input, secrets) ⇒ String закрытый
- .success(string, label: nil) ⇒ String внутренний
Форматирует строку как сообщение об успешном выполнении с необязательной меткой.
- .truncate(string, max: 30, omission: "...") ⇒ String внутренний
Обрезает строку до заданной длины.
- .url(string) ⇒ String закрытый
- .warning(string, label: nil) ⇒ String внутренний
Форматирует строку как предупреждение с необязательной меткой.
Подробное описание методов класса
.arrow(string, color: nil) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
14 15 16 | # File 'utils/formatter.rb', line 14 def self.arrow(string, color: nil) prefix("==>", string, color) end |
.bold(string) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Синхронизируйте с bold в Library/Homebrew/utils/formatter.sh.
34 35 36 | # File 'utils/formatter.rb', line 34 def self.bold(string) "#{Tty.bold}#{string}#{Tty.reset}" end |
.columns(objects, gap_size: 2, min_width: 0) ⇒ String
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Располагает объекты по столбцам, умещающимся в текущую ширину терминала.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | # File 'utils/formatter.rb', line 136 def self.columns(objects, gap_size: 2, min_width: 0) objects = objects.flatten.map(&:to_s) fallback = proc do return objects.join("\n").concat("\n") end fallback.call if objects.empty? fallback.call if respond_to?(:tty?) ? !T.unsafe(self).tty? : !$stdout.tty? console_width = Tty.width object_lengths = objects.map { |obj| Tty.strip_ansi(obj).length } max_length = [*object_lengths, min_width].max || 0 cols = (console_width + gap_size) / (max_length + gap_size) fallback.call if cols < 2 rows = (objects.count + cols - 1) / cols cols = (objects.count + rows - 1) / rows if min_width.zero? # avoid empty trailing columns col_width = ((console_width + gap_size) / cols) - gap_size gap_string = "".rjust(gap_size) output = +"" rows.times do |row_index| item_indices_for_row = T.cast(row_index.step(objects.size - 1, rows).to_a, T::Array[Integer]) first_n = T.must(item_indices_for_row[0...-1]).map do |index| objects.fetch(index) + "".rjust(col_width - object_lengths.fetch(index)) end # don't add trailing whitespace to last column last = objects.values_at(item_indices_for_row.fetch(-1)) output.concat((first_n + last) .join(gap_string)) .concat("\n") end output.freeze end |
.disk_usage_readable(size_in_bytes) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
198 199 200 201 202 203 204 205 206 | # File 'utils/formatter.rb', line 198 def self.disk_usage_readable(size_in_bytes) size, unit = disk_usage_readable_size_unit(size_in_bytes) # avoid trailing zero after decimal point if ((size * 10).to_i % 10).zero? "#{size.to_i}#{unit}" else "#{format("%<size>.1f", size:)}#{unit}" end end |
.disk_usage_readable_size_unit(size_in_bytes, precision: nil) ⇒ Array<([Integer, Float], String)>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
185 186 187 188 189 190 191 192 193 194 195 | # File 'utils/formatter.rb', line 185 def self.disk_usage_readable_size_unit(size_in_bytes, precision: nil) size = size_in_bytes unit = "B" %w[KBMBGB].each do |next_unit| break if (precision ? size.abs.round(precision) : size.abs) < 1000 size /= 1000.0 unit = next_unit end [size, unit] end |
.error(string, label: nil) ⇒ String
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Форматирует строку как сообщение об ошибке с необязательной меткой.
63 64 65 | # File 'utils/formatter.rb', line 63 def self.error(string, label: nil) label(label, string, :red) end |
.format_help_text(string, width: 172) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Переносит текст, чтобы он помещался в заданное число столбцов, используя регулярные выражения, которые:
- преобразуют абзацы с жёсткими переносами в одну строку
- добавляют разрыв строки и отступ к описаниям подкоманд
- находят описания параметров, превышающие заданную длину, и переносят их по словам с выступающим отступом, не разрывая слова, выходящие за границу
- переносят все оставшиеся строки описания, которым требуется перенос, с тем же отступом
- переносят все строки в соответствии с заданной шириной.
Обратите внимание, что параметр (например, --foo) может находиться не в начале строки, поэтому мы всегда переносим строку на одно слово раньше параметра.
94 95 96 97 98 99 100 101 102 | # File 'utils/formatter.rb', line 94 def self.format_help_text(string, width: 172) desc = OPTION_DESC_WIDTH indent = width - desc string.gsub(/(?<=\S) *\n(?=\S)/, "") .gsub(/([`>)\]]:) /, "\\1\n ") .gsub(/^( +-.+ +(?=\S.{#{desc}}))(.{1,#{desc}})( +|$)(?!-)\n?/, "\\1\\2\n#{"" * indent}") .gsub(/^( {#{indent}}(?=\S.{#{desc}}))(.{1,#{desc}})( +|$)(?!-)\n?/, "\\1\\2\n#{"" * indent}") .gsub(/(.{1,#{width}})( +|$)(?!-)\n?/, "\\1\n") end |
.headline(string, color: nil) ⇒ String
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Форматирует строку как заголовок.
Синхронизируйте с headline в Library/Homebrew/utils/formatter.sh.
23 24 25 | # File 'utils/formatter.rb', line 23 def self.headline(string, color: nil) arrow("#{Tty.bold}#{string}#{Tty.reset}", color:) end |
.identifier(string) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
28 29 30 | # File 'utils/formatter.rb', line 28 def self.identifier(string) "#{Tty.green}#{string}#{Tty.default}" end |
.number_readable(number) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
209 210 211 212 213 | # File 'utils/formatter.rb', line 209 def self.number_readable(number) numstr = number.to_i.to_s (numstr.size - 3).step(1, -3) { |i| numstr.insert(i.to_i, ",") } numstr end |
.option(string) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
39 40 41 | # File 'utils/formatter.rb', line 39 def self.option(string) bold(string) end |
.redact_secrets(input, secrets) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
216 217 218 219 220 | # File 'utils/formatter.rb', line 216 def self.redact_secrets(input, secrets) secrets.compact .reduce(input) { |str, secret| str.gsub secret, "******" } .freeze end |
.success(string, label: nil) ⇒ String
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Форматирует строку как сообщение об успешном выполнении с необязательной меткой.
47 48 49 | # File 'utils/formatter.rb', line 47 def self.success(string, label: nil) label(label, string, :green) end |
.truncate(string, max: 30, omission: "...") ⇒ String
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Обрезает строку до заданной длины.
71 72 73 74 75 76 77 78 | # File 'utils/formatter.rb', line 71 def self.truncate(string, max: 30, omission: "...") return string if string.length <= max length_with_room_for_omission = max - omission.length truncated = string[0, length_with_room_for_omission] "#{truncated}#{omission}" end |
.url(string) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
105 106 107 | # File 'utils/formatter.rb', line 105 def self.url(string) "#{Tty.underline}#{string}#{Tty.no_underline}" end |
.warning(string, label: nil) ⇒ String
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Форматирует строку как предупреждение с необязательной меткой.
55 56 57 | # File 'utils/formatter.rb', line 55 def self.warning(string, label: nil) label(label, string, :yellow) end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Formatter.html