Spec-Zone.ru › Homebrew

Модуль: 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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • string (String)
  • color (Symbol, nil) (по умолчанию: nil)

Возвращает:

  • (String)


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.

Параметры:

  • string (String)

Возвращает:

  • (String)


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 и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Располагает объекты по столбцам, умещающимся в текущую ширину терминала.

Параметры:

  • objects (Array<String>)
  • gap_size (Integer) (по умолчанию: 2)
  • min_width (Integer) (по умолчанию: 0)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • size_in_bytes (Integer, Float)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • size_in_bytes (Integer, Float)
  • precision (Integer, nil) (по умолчанию: nil)

Возвращает:

  • (Array<([Integer, Float], String)>)


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 и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Форматирует строку как сообщение об ошибке с необязательной меткой.

Параметры:

  • string (String, Exception)
  • label (String, nil) (по умолчанию: nil)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Переносит текст, чтобы он помещался в заданное число столбцов, используя регулярные выражения, которые:

  1. преобразуют абзацы с жёсткими переносами в одну строку
  2. добавляют разрыв строки и отступ к описаниям подкоманд
  3. находят описания параметров, превышающие заданную длину, и переносят их по словам с выступающим отступом, не разрывая слова, выходящие за границу
  4. переносят все оставшиеся строки описания, которым требуется перенос, с тем же отступом
  5. переносят все строки в соответствии с заданной шириной.

Обратите внимание, что параметр (например, --foo) может находиться не в начале строки, поэтому мы всегда переносим строку на одно слово раньше параметра.

Параметры:

  • string (String)
  • width (Integer) (по умолчанию: 172)

Возвращает:

  • (String)

См. также:

  • https://github.com/Homebrew/brew/pull/12672
  • https://macromates.com/blog/2006/wrapping-text-with-regular-expressions/


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.

Параметры:

  • string (String)
  • color (Symbol, nil) (по умолчанию: nil)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • string (Object)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • number (Integer)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • string (String)

Возвращает:

  • (String)


39
40
41
# File 'utils/formatter.rb', line 39

def self.option(string)
  bold(string)
end

.redact_secrets(input, secrets) ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • input (String)
  • secrets (Array<String>)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Форматирует строку как сообщение об успешном выполнении с необязательной меткой.

Параметры:

  • string (String)
  • label (String, nil) (по умолчанию: nil)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Обрезает строку до заданной длины.

Параметры:

  • string (String)
  • max (Integer) (по умолчанию: 30)
  • omission (String) (по умолчанию: "...")

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • string (String, URI::Generic, nil)

Возвращает:

  • (String)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Форматирует строку как предупреждение с необязательной меткой.

Параметры:

  • string (String, Exception)
  • label (String, nil) (по умолчанию: nil)

Возвращает:

  • (String)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API