Spec-Zone.ru › Homebrew

Класс: RuboCop::Cop::FormulaAudit::BottleOrder Закрытый

Наследуется от:
RuboCop::Cop::FormulaCop
  • Object
  • Base
  • RuboCop::Cop::FormulaCop
  • RuboCop::Cop::FormulaAudit::BottleOrder
показать все
Расширен модулем:
AutoCorrector
Определен в:
rubocops/bottle.rb

Обзор

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

Эта проверка анализирует порядок блока bottle в формулах.

Краткое описание атрибутов экземпляра

Атрибуты, унаследованные от RuboCop::Cop::FormulaCop

#file_path

Краткое описание методов экземпляра свернуть

  • #audit_formula(formula_nodes) ⇒ void закрытый
  • #sha256_bottle_tag(node) ⇒ String, Symbol закрытый
  • #sha256_order(nodes) ⇒ Array<String, Symbol> закрытый

Методы, унаследованные от RuboCop::Cop::FormulaCop

#audit_comments, #audit_urls, #caveats_strings, #dependency_name_hash_match?, #dependency_type_hash_match?, #depends_on?, #depends_on_name_type?, #formula_tap, #get_checksum_node, #on_class, #required_dependency?, #required_dependency_name?, #style_exceptions_dir, #tap_style_exception?, #versioned_formula?

Методы, включенные из HelperFunctions

#block_method_called_in_block?, #check_precedence, #class_name, #component_precedes?, #end_column, #expression_negated?, #find_all_blocks, #find_block, #find_blocks, #find_const, #find_every_func_call_by_name, #find_every_method_call_by_name, #find_instance_call, #find_instance_method_call, #find_method_calls_by_name, #find_method_def, #find_method_with_args, #find_node_method_by_name, #find_strings, #format_component, #line_number, #line_start_column, #method_called?, #method_called_ever?, #method_name, #node_equals?, #offending_node, #parameters, #parameters_passed?, #problem, #regex_match_group, #source_buffer, #start_column, #string_content

Подробное описание методов экземпляра

#audit_formula(formula_nodes) ⇒ void

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

Этот метод возвращает неопределенное значение.

Параметры:

  • formula_nodes (FormulaNodes)


130
131
132
133
134
135
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
178
179
180
181
182
183
184
# File 'rubocops/bottle.rb', line 130

def audit_formula(formula_nodes)
  bottle_node = find_block(formula_nodes.body_node, :bottle)
  return if bottle_node.nil?
  return if bottle_node.child_nodes.blank?

  non_sha256_nodes = []
  sha256_nodes = []

  bottle_block_method_calls = if bottle_node.child_nodes.last.begin_type?
    bottle_node.child_nodes.last.child_nodes
  else
    [bottle_node.child_nodes.last]
  end

  bottle_block_method_calls.each do |node|
    if node.method_name == :sha256
      sha256_nodes << node
    else
      non_sha256_nodes << node
    end
  end

  arm64_macos_nodes = []
  intel_macos_nodes = []
  arm64_linux_nodes = []
  intel_linux_nodes = []

  sha256_nodes.each do |node|
    version = sha256_bottle_tag node
    if version == :arm64_linux
      arm64_linux_nodes << node
    elsif version.to_s.start_with?("arm64")
      arm64_macos_nodes << node
    elsif version.to_s.end_with?("_linux")
      intel_linux_nodes << node
    else
      intel_macos_nodes << node
    end
  end

  sorted_nodes = arm64_macos_nodes + intel_macos_nodes + arm64_linux_nodes + intel_linux_nodes
  return if sha256_order(sha256_nodes) == sha256_order(sorted_nodes)

  offending_node(bottle_node)
  problem "ARM bottles should be listed before Intel bottles" do |corrector|
    lines = ["bottle do"]
    lines += non_sha256_nodes.map { |node| "#{node.source}" }
    lines += arm64_macos_nodes.map { |node| "#{node.source}" }
    lines += intel_macos_nodes.map { |node| "#{node.source}" }
    lines += arm64_linux_nodes.map { |node| "#{node.source}" }
    lines += intel_linux_nodes.map { |node| "#{node.source}" }
    lines << "  end"
    corrector.replace(bottle_node.source_range, lines.join("\n"))
  end
end

#sha256_bottle_tag(node) ⇒ String, Symbol

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

Параметры:

  • node (AST::SendNode)

Возвращает:

  • (String, Symbol)


194
195
196
197
198
199
200
201
# File 'rubocops/bottle.rb', line 194

def sha256_bottle_tag(node)
  hash_pair = node.last_argument.pairs.last
  if hash_pair.key.sym_type?
    hash_pair.key.value
  else
    hash_pair.value.value
  end
end

#sha256_order(nodes) ⇒ Array<String, Symbol>

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

Параметры:

  • nodes (Array<RuboCop::AST::SendNode>)

Возвращает:

  • (Array<String, Symbol>)


187
188
189
190
191
# File 'rubocops/bottle.rb', line 187

def sha256_order(nodes)
  nodes.map do |node|
    sha256_bottle_tag node
  end
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/RuboCop/Cop/FormulaAudit/BottleOrder.html

Spec-Zone.ru

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