Класс: RuboCop::Cop::FormulaAudit::DependencyOrder Частный
- Наследует:
- RuboCop::Cop::FormulaCop
- Object
- Base
- RuboCop::Cop::FormulaCop
- RuboCop::Cop::FormulaAudit::DependencyOrder
- Расширено модулем:
- AutoCorrector
- Определено в:
- rubocops/dependency_order.rb,
sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi
Обзор
Этот класс является частью приватного API. Этот класс можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Эта проверка контролирует правильный порядок depends_on в формулах.
порядок приоритета: во время сборки > тестовые > обычные > рекомендуемые > необязательные
Краткое описание атрибутов экземпляра
Атрибуты, унаследованные от RuboCop::Cop::FormulaCop
Краткое описание методов экземпляра свернуть
- #audit_formula(formula_nodes) ⇒ void приватный
- #build_with_dependency_name(node) ⇒ Array<String>? приватный
- #build_with_dependency_node(node, *pattern, **kwargs, &block) ⇒ T.untyped приватный
- #buildtime_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean приватный
- #check_dependency_nodes_order(parent_node) ⇒ void приватный
- #check_uses_from_macos_nodes_order(parent_node) ⇒ void приватный
- #dependency_name(dependency_node) ⇒ String? приватный
- #dependency_name_node(node, *pattern, **kwargs, &block) ⇒ T.untyped приватный
- #depends_on_node?(node, **kwargs, &block) ⇒ T.untyped приватный
- #ensure_dependency_order(nodes) ⇒ void приватный
- #insert_after!(arr, idx1, idx2) ⇒ void приватный
- #negate_normal_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean приватный
- #optional_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean приватный
- #recommended_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean приватный
- #sort_conditional_dependencies!(ordered) ⇒ Array<RuboCop::AST::Node> приватный
depends_on :apple if build.with? "foo"всегда должен быть определён послеdepends_on :foo. - #sort_dependencies_by_type(dependency_nodes) ⇒ Array<RuboCop::AST::Node> приватный
Разделяет зависимости согласно порядку приоритета: зависимости на этапе сборки > тестовые > обычные > рекомендуемые > необязательные.
- #test_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean приватный
- #uses_from_macos_node?(node, **kwargs, &block) ⇒ T.untyped приватный
- #verify_order_in_source(ordered) ⇒ void приватный
Проверяет фактический порядок отсортированных узлов
depends_onв исходном коде; в противном случае вызывает ошибку RuboCop.
Методы, унаследованные от 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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
17 18 19 20 21 22 23 24 25 26 27 28 29 | # File 'rubocops/dependency_order.rb', line 17 def audit_formula(formula_nodes) body_node = formula_nodes.body_node check_dependency_nodes_order(body_node) check_uses_from_macos_nodes_order(body_node) ([:head, :stable] + on_system_methods).each do |block_name| block = find_block(body_node, block_name) next unless block check_dependency_nodes_order(block.body) check_uses_from_macos_nodes_order(block.body) end end |
#build_with_dependency_name(node) ⇒ Array<String>?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
175 176 177 178 179 | # File 'rubocops/dependency_order.rb', line 175 def build_with_dependency_name(node) match_nodes = build_with_dependency_node(node) match_nodes = match_nodes.to_a.compact match_nodes.map { |n| string_content(n) } unless match_nodes.empty? end |
#build_with_dependency_node(node, *pattern, **kwargs, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
17 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 17 def build_with_dependency_node(node, *pattern, **kwargs, &block); end |
#buildtime_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
27 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 27 def buildtime_dependency?(node, *pattern, **kwargs, &block); end |
#check_dependency_nodes_order(parent_node) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
40 41 42 43 44 45 | # File 'rubocops/dependency_order.rb', line 40 def check_dependency_nodes_order(parent_node) return if parent_node.nil? dependency_nodes = parent_node.each_child_node.select { |x| depends_on_node?(x) } ensure_dependency_order(dependency_nodes) end |
#check_uses_from_macos_nodes_order(parent_node) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
32 33 34 35 36 37 | # File 'rubocops/dependency_order.rb', line 32 def check_uses_from_macos_nodes_order(parent_node) return if parent_node.nil? dependency_nodes = parent_node.each_child_node.select { |x| uses_from_macos_node?(x) } ensure_dependency_order(dependency_nodes) end |
#dependency_name(dependency_node) ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
182 183 184 185 | # File 'rubocops/dependency_order.rb', line 182 def dependency_name(dependency_node) match_node = dependency_name_node(dependency_node).to_a.first string_content(match_node) if match_node end |
#dependency_name_node(node, *pattern, **kwargs, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
37 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 37 def dependency_name_node(node, *pattern, **kwargs, &block); end |
#depends_on_node?(node, **kwargs, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
40 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 40 def depends_on_node?(node, **kwargs, &block); end |
#ensure_dependency_order(nodes) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
48 49 50 51 52 53 54 55 56 57 58 59 | # File 'rubocops/dependency_order.rb', line 48 def ensure_dependency_order(nodes) name_node_pairs = nodes.filter_map do |node| name = dependency_name(node) next unless name [name, node] end name_node_pairs.sort_by! { |name, _| name.downcase } ordered = sort_dependencies_by_type(name_node_pairs.map { |_, node| node }) sort_conditional_dependencies!(ordered) verify_order_in_source(ordered) end |
#insert_after!(arr, idx1, idx2) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
167 168 169 170 171 172 | # File 'rubocops/dependency_order.rb', line 167 def insert_after!(arr, idx1, idx2) arr.insert( idx2+1, arr.delete_at(idx1) || raise("unexpected nil value for arr.delete_at(idx1)"), ) end |
#negate_normal_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
50 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 50 def negate_normal_dependency?(node, *pattern, **kwargs, &block); end |
#optional_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
60 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 60 def optional_dependency?(node, *pattern, **kwargs, &block); end |
#recommended_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
70 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 70 def recommended_dependency?(node, *pattern, **kwargs, &block); end |
#sort_conditional_dependencies!(ordered) ⇒ Array<RuboCop::AST::Node>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
depends_on :apple if build.with? "foo" всегда должен быть определён после depends_on :foo. Этот метод переупорядочивает массив зависимостей согласно указанному выше правилу.
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | # File 'rubocops/dependency_order.rb', line 82 def sort_conditional_dependencies!(ordered) length = ordered.size idx = 0 while idx < length idx1 = T.let(nil, T.nilable(Integer)) idx2 = T.let(nil, T.nilable(Integer)) ordered.each_with_index do |dep, pos| idx = pos+1 match_nodes = build_with_dependency_name(dep) next if match_nodes.blank? idx1 = pos ordered.drop(idx1+1).each_with_index do |dep2, pos2| next unless match_nodes.index(dependency_name(dep2)) idx2 = pos2 if idx2.nil? || pos2 > idx2 end break if idx2 end insert_after!(ordered, idx1, idx2 + idx1) if idx1 &&idx2 end ordered end |
#sort_dependencies_by_type(dependency_nodes) ⇒ Array<RuboCop::AST::Node>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Разделяет зависимости согласно порядку приоритета: во время сборки > тестовые > обычные > рекомендуемые > необязательные
64 65 66 67 68 69 70 71 72 73 74 75 76 | # File 'rubocops/dependency_order.rb', line 64 def sort_dependencies_by_type(dependency_nodes) unsorted_deps = dependency_nodes.to_a ordered = [] ordered.concat(unsorted_deps.select { |dep| buildtime_dependency? dep }) unsorted_deps -= ordered ordered.concat(unsorted_deps.select { |dep| test_dependency? dep }) unsorted_deps -= ordered ordered.concat(unsorted_deps.reject { |dep| negate_normal_dependency? dep }) unsorted_deps -= ordered ordered.concat(unsorted_deps.select { |dep| recommended_dependency? dep }) unsorted_deps -= ordered ordered.concat(unsorted_deps.select { |dep| optional_dependency? dep }) end |
#test_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
80 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 80 def test_dependency?(node, *pattern, **kwargs, &block); end |
#uses_from_macos_node?(node, **kwargs, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
83 | # File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/dependency_order.rbi', line 83 def uses_from_macos_node?(node, **kwargs, &block); end |
#verify_order_in_source(ordered) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Проверяет фактический порядок отсортированных узлов depends_on в исходном коде; в противном случае вызывает ошибку RuboCop.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # File 'rubocops/dependency_order.rb', line 109 def verify_order_in_source(ordered) ordered.each_with_index do |node_1, idx| l1 = line_number(node_1) l2 = T.let(nil, T.nilable(Integer)) node_2 = T.let(nil, T.nilable(RuboCop::AST::Node)) ordered.drop(idx + 1).each do |test_node| l2 = line_number(test_node) node_2 = test_node if l2 < l1 end next unless node_2 offending_node(node_1) problem "`dependency \"#{dependency_name(node_1)}\"` (line #{l1}) should be put before " \ "`dependency \"#{dependency_name(node_2)}\"` (line #{l2})" do |corrector| indentation = "" * (start_column(node_2) - line_start_column(node_2)) line_breaks = "\n" corrector.insert_before(node_2.source_range, node_1.source + line_breaks + indentation) corrector.remove(range_with_surrounding_space(range: node_1.source_range, side: :left)) end end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/RuboCop/Cop/FormulaAudit/DependencyOrder.html