Spec-Zone.ru › Homebrew

Класс: RuboCop::Cop::FormulaCop Абстрактный Приватный

Наследует:
Base
  • Object
  • Base
  • RuboCop::Cop::FormulaCop
показать все
Расширен с помощью:
T::Helpers
Подключает:
RangeHelp, HelperFunctions
Определён в:
rubocops/extend/formula_cop.rb,
sorbet/rbi/dsl/rubo_cop/cop/formula_cop.rbi

Обзор

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

Этот класс является абстрактным.

Его нельзя создать напрямую. Подклассы должны реализовать приведённые ниже методы abstract.

Абстрактный базовый класс для всех проверок формул.

Непосредственные известные подклассы

RuboCop::Cop::FormulaAudit::AssertStatements, RuboCop::Cop::FormulaAudit::BottleDigestIndentation, RuboCop::Cop::FormulaAudit::BottleFormat, RuboCop::Cop::FormulaAudit::BottleOrder, RuboCop::Cop::FormulaAudit::BottleTagIndentation, RuboCop::Cop::FormulaAudit::Caveats, RuboCop::Cop::FormulaAudit::Checksum, RuboCop::Cop::FormulaAudit::ChecksumCase, RuboCop::Cop::FormulaAudit::ClassInheritance, RuboCop::Cop::FormulaAudit::ClassName, RuboCop::Cop::FormulaAudit::Comments, RuboCop::Cop::FormulaAudit::ComponentsOrder, RuboCop::Cop::FormulaAudit::ComponentsRedundancy, RuboCop::Cop::FormulaAudit::Conflicts, RuboCop::Cop::FormulaAudit::DependencyOrder, RuboCop::Cop::FormulaAudit::DeprecateDisableDate, RuboCop::Cop::FormulaAudit::DeprecateDisableReason, RuboCop::Cop::FormulaAudit::Desc, RuboCop::Cop::FormulaAudit::Files, RuboCop::Cop::FormulaAudit::FullDependencyCheck, RuboCop::Cop::FormulaAudit::GenerateCompletionsDSL, RuboCop::Cop::FormulaAudit::GitUrls, RuboCop::Cop::FormulaAudit::Homepage, RuboCop::Cop::FormulaAudit::HttpUrls, RuboCop::Cop::FormulaAudit::InstallSteps, RuboCop::Cop::FormulaAudit::JavaVersions, RuboCop::Cop::FormulaAudit::KegOnly, RuboCop::Cop::FormulaAudit::LibiconvCheck, RuboCop::Cop::FormulaAudit::LicenseArrays, RuboCop::Cop::FormulaAudit::Licenses, RuboCop::Cop::FormulaAudit::Lines, RuboCop::Cop::FormulaAudit::LivecheckRegexCaseInsensitive, RuboCop::Cop::FormulaAudit::LivecheckRegexExtension, RuboCop::Cop::FormulaAudit::LivecheckRegexIfPageMatch, RuboCop::Cop::FormulaAudit::LivecheckRegexParentheses, RuboCop::Cop::FormulaAudit::LivecheckSkip, RuboCop::Cop::FormulaAudit::LivecheckUrlProvided, RuboCop::Cop::FormulaAudit::LivecheckUrlSymbol, RuboCop::Cop::FormulaAudit::MacOSOnLinux, RuboCop::Cop::FormulaAudit::Miscellaneous, RuboCop::Cop::FormulaAudit::MpiCheck, RuboCop::Cop::FormulaAudit::NoAutobump, RuboCop::Cop::FormulaAudit::NonPublicApiUsage, RuboCop::Cop::FormulaAudit::OnSystemConditionals,

RuboCop::Cop::FormulaAudit::OptionDeclarations, RuboCop::Cop::FormulaAudit::Options, RuboCop::Cop::FormulaAudit::Patches, RuboCop::Cop::FormulaAudit::ProvidedByMacos, RuboCop::Cop::FormulaAudit::PyPiUrls, RuboCop::Cop::FormulaAudit::PyoxidizerCheck, RuboCop::Cop::FormulaAudit::PythonVersions, RuboCop::Cop::FormulaAudit::QuicTLSCheck, RuboCop::Cop::FormulaAudit::RedundantGenerateCompletionsShells, RuboCop::Cop::FormulaAudit::ResourceRequiresDependencies, RuboCop::Cop::FormulaAudit::SafePopenCommands, RuboCop::Cop::FormulaAudit::Service, RuboCop::Cop::FormulaAudit::ShellVariables, RuboCop::Cop::FormulaAudit::SingleGenerateCompletionsDSLCall, RuboCop::Cop::FormulaAudit::StdNpmArgs, RuboCop::Cop::FormulaAudit::Test, RuboCop::Cop::FormulaAudit::Text, RuboCop::Cop::FormulaAudit::Urls, RuboCop::Cop::FormulaAudit::UsesFromMacos, RuboCop::Cop::FormulaAudit::Version, RuboCop::Cop::FormulaAudit::ZeroZeroZeroZero, RuboCop::Cop::FormulaAuditStrict::GitUrls, RuboCop::Cop::FormulaAuditStrict::MakeCheck, RuboCop::Cop::FormulaAuditStrict::Requirements, RuboCop::Cop::FormulaAuditStrict::RustCheck, RuboCop::Cop::FormulaAuditStrict::TestPresent, RuboCop::Cop::FormulaAuditStrict::Text

Определено в пространстве имён

Классы: FormulaNodes

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

  • #file_path ⇒ String? приватный

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

  • #audit_comments(&_block) ⇒ void закрытый

    Передаёт блоку текст комментария в качестве параметра.

  • #audit_formula(formula_nodes) ⇒ void абстрактный закрытый
  • #audit_urls(urls, regex, &_block) ⇒ void закрытый

    Передаёт управление блоку при совпадении.

  • #caveats_strings ⇒ Array<RuboCop::AST::Node> закрытый

    Возвращает все узлы строк с оговорками в массиве.

  • #dependency_name_hash_match?(node, *pattern, **kwargs, &block) ⇒ Boolean закрытый
  • #dependency_type_hash_match?(node, *pattern, **kwargs, &block) ⇒ Boolean закрытый
  • #depends_on?(dependency_name, *types) ⇒ Boolean закрытый

    Возвращает, зависит ли формула от dependency_name.

  • #depends_on_name_type?(node, name = nil, type = :required) ⇒ Boolean закрытый

    Возвращает true, если указанное имя зависимости и её тип присутствуют в заданном узле вызова метода зависимости.

  • #formula_tap ⇒ String? закрытый

    Возвращает tap формулы.

  • #get_checksum_node(call) ⇒ RuboCop::AST::Node? закрытый

    Возвращает узел строки sha256 для заданного узла вызова sha256.

  • #on_class(node) ⇒ void закрытый

    Этот метод вызывается RuboCop и служит основной точкой входа.

  • #required_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean закрытый
  • #required_dependency_name?(node, *pattern, **kwargs, &block) ⇒ Boolean закрытый
  • #style_exceptions_dir ⇒ String? закрытый

    Возвращает каталог исключений стиля из пути к файлу.

  • #tap_style_exception?(list, formula = nil) ⇒ Boolean закрытый

    Возвращает, содержится ли указанная формула в заданном списке исключений стиля.

  • #versioned_formula? ⇒ Boolean закрытый

    Возвращает true, если формула версионирована.

Методы, включённые из 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

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

#file_path ⇒ String?

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

Возвращает:

  • (String, nil)


18
19
20
# File 'rubocops/extend/formula_cop.rb', line 18

def file_path
  @file_path
end

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

#audit_comments(&_block) ⇒ void

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

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

Передаёт блоку текст комментария в качестве параметра.

Параметры:

  • _block (T.proc.params(arg0: String).void)


169
170
171
172
173
174
# File 'rubocops/extend/formula_cop.rb', line 169

def audit_comments(&_block)
  processed_source.comments.each do |comment_node|
    @offensive_node = comment_node
    yield comment_node.text
  end
end

#audit_formula(formula_nodes) ⇒ void

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

Этот метод является абстрактным.

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

Параметры:

  • formula_nodes (FormulaNodes)


45
# File 'rubocops/extend/formula_cop.rb', line 45

def audit_formula(formula_nodes); end

#audit_urls(urls, regex, &_block) ⇒ void

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

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

Вызывает блок при совпадении.

Параметры:

  • urls (Array<RuboCop::AST::Node>) —

    узлы вызовов методов url/mirror

  • regex (Regexp) —

    шаблон для поиска URL

  • _block (T.proc.params(arg0: MatchData, arg1: String, arg2: Integer).void)


57
58
59
60
61
62
63
64
65
66
67
# File 'rubocops/extend/formula_cop.rb', line 57

def audit_urls(urls, regex, &_block)
  urls.each_with_index do |url_node, index|
    url_string_node = parameters(url_node).fetch(0)
    url_string = string_content(url_string_node)
    match_object = regex_match_group(url_string_node, regex)
    next unless match_object

    offending_node(url_string_node.parent)
    yield match_object, url_string, index
  end
end

#caveats_strings ⇒ Array<RuboCop::AST::Node>

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

Возвращает массив со всеми узлами строк предупреждений.

Возвращает:

  • (Array<RuboCop::AST::Node>)


137
138
139
140
141
# File 'rubocops/extend/formula_cop.rb', line 137

def caveats_strings
  return [] if @body.nil?

  find_strings(find_method_def(@body, :caveats)).to_a
end

#dependency_name_hash_match?(node, *pattern, **kwargs, &block) ⇒ Boolean

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

Параметры:

  • node (RuboCop::AST::Node)
  • pattern (String, Symbol)
  • kwargs (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


17
# File 'sorbet/rbi/dsl/rubo_cop/cop/formula_cop.rbi', line 17

def dependency_name_hash_match?(node, *pattern, **kwargs, &block); end

#dependency_type_hash_match?(node, *pattern, **kwargs, &block) ⇒ Boolean

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

Параметры:

  • node (RuboCop::AST::Node)
  • pattern (String, Symbol)
  • kwargs (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


27
# File 'sorbet/rbi/dsl/rubo_cop/cop/formula_cop.rbi', line 27

def dependency_type_hash_match?(node, *pattern, **kwargs, &block); end

#depends_on?(dependency_name, *types) ⇒ Boolean

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

Возвращает, зависит ли формула от dependency_name.

Параметры:

  • dependency_name (String, Symbol) —

    имя зависимости

  • types (Symbol)

Возвращает:

  • (Boolean)


73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'rubocops/extend/formula_cop.rb', line 73

def depends_on?(dependency_name, *types)
  return false if @body.nil?

  types = [:any] if types.empty?
  dependency_nodes = find_every_method_call_by_name(@body, :depends_on)
  idx = dependency_nodes.index do |n|
    types.any? { |type| depends_on_name_type?(n, dependency_name, type) }
  end
  return false if idx.nil?

  @offensive_node = T.let(dependency_nodes[idx], T.nilable(RuboCop::AST::Node))

  true
end

#depends_on_name_type?(node, name = nil, type = :required) ⇒ Boolean

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

ЗАДАЧА:

Добавить случай, когда ключом хеша является массив

Возвращает true, если в узле вызова заданного метода зависимости присутствуют указанное имя зависимости и её тип.

Параметры:

  • node (RuboCop::AST::Node)
  • name (String, Symbol, nil) (по умолчанию: nil)
  • type (Symbol) (по умолчанию: :required)

Возвращает:

  • (Boolean)


97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'rubocops/extend/formula_cop.rb', line 97

def depends_on_name_type?(node, name = nil, type = :required)
  name_match = !name # Match only by type when name is nil

  case type
  when :required
    type_match = required_dependency?(node)
    name_match ||= required_dependency_name?(node, name) if type_match
  when :build, :test, :optional, :recommended
    type_match = dependency_type_hash_match?(node, type)
    name_match ||= dependency_name_hash_match?(node, name) if type_match
  when :any
    type_match = true
    name_match ||= required_dependency_name?(node, name) || false
    name_match ||= dependency_name_hash_match?(node, name) || false
  else
    type_match = false
  end

  @offensive_node = node if type_match || name_match
  type_match && name_match
end

#formula_tap ⇒ String?

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

Возвращает tap формулы.

Возвращает:

  • (String, nil)


186
187
188
189
190
# File 'rubocops/extend/formula_cop.rb', line 186

def formula_tap
  return unless (match_obj = @file_path&.match(%r{(?:/Taps/[\w-]+|^)/(homebrew-[\w-]+)/}))

  match_obj[1]
end

#get_checksum_node(call) ⇒ RuboCop::AST::Node?

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

Возвращает узел строки sha256 для заданного узла вызова sha256.

Параметры:

  • call (RuboCop::AST::Node)

Возвращает:

  • (RuboCop::AST::Node, nil)


145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'rubocops/extend/formula_cop.rb', line 145

def get_checksum_node(call)
  return if parameters(call).empty? || parameters(call).nil?

  if parameters(call).fetch(0).str_type?
    parameters(call).first
  # sha256 is passed as a key-value pair in bottle blocks
  elsif parameters(call).fetch(0).hash_type?
    hash_node = T.cast(parameters(call).fetch(0), RuboCop::AST::HashNode)
    if hash_node.keys.first.value == :cellar
      # sha256 :cellar :any, :tag "hexdigest"
      hash_node.values.last
    elsif hash_node.keys.first.is_a?(RuboCop::AST::SymbolNode)
      # sha256 :tag "hexdigest"
      hash_node.values.first
    else
      # Legacy bottle block syntax
      # sha256 "hexdigest" => :tag
      hash_node.keys.first
    end
  end
end

#on_class(node) ⇒ void

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

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

Этот метод вызывается RuboCop и является основной точкой входа.

Параметры:

  • node (RuboCop::AST::ClassNode)


31
32
33
34
35
36
37
38
39
40
41
42
# File 'rubocops/extend/formula_cop.rb', line 31

def on_class(node)
  @file_path = T.let(processed_source.file_path, T.nilable(String))
  return unless file_path_allowed?
  return unless formula_class?(node)

  class_node, parent_class_node, body = *node
  @body = T.let(body, T.nilable(RuboCop::AST::Node))

  @formula_name = T.let(Pathname.new(@file_path).basename(".rb").to_s, T.nilable(String))
  @tap_style_exceptions = T.let(nil, T.nilable(T::Hash[Symbol, T::Array[String]]))
  audit_formula(FormulaNodes.new(node:, class_node:, parent_class_node:, body_node: T.must(@body)))
end

#required_dependency?(node, *pattern, **kwargs, &block) ⇒ Boolean

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

Параметры:

  • node (RuboCop::AST::Node)
  • pattern (String, Symbol)
  • kwargs (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


37
# File 'sorbet/rbi/dsl/rubo_cop/cop/formula_cop.rbi', line 37

def required_dependency?(node, *pattern, **kwargs, &block); end

#required_dependency_name?(node, *pattern, **kwargs, &block) ⇒ Boolean

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

Параметры:

  • node (RuboCop::AST::Node)
  • pattern (String, Symbol)
  • kwargs (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


47
# File 'sorbet/rbi/dsl/rubo_cop/cop/formula_cop.rbi', line 47

def required_dependency_name?(node, *pattern, **kwargs, &block); end

#style_exceptions_dir ⇒ String?

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

Возвращает каталог исключений стиля на основе пути к файлу.

Возвращает:

  • (String, nil)


194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'rubocops/extend/formula_cop.rb', line 194

def style_exceptions_dir
  file_directory = File.dirname(@file_path) if @file_path
  return unless file_directory

  # if we're in a sharded subdirectory, look below that.
  directory_name = File.basename(file_directory)
  formula_directory = if directory_name.length == 1 || directory_name == "lib"
    File.dirname(file_directory)
  else
    file_directory
  end

  # if we're in a Formula or HomebrewFormula subdirectory, look below that.
  formula_directory_names = ["Formula", "HomebrewFormula"].freeze
  directory_name = File.basename(formula_directory)
  tap_root_directory = if formula_directory_names.include?(directory_name)
    File.dirname(formula_directory)
  else
    formula_directory
  end

  "#{tap_root_directory}/style_exceptions"
end

#tap_style_exception?(list, formula = nil) ⇒ Boolean

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

Возвращает, присутствует ли указанная формула в указанном списке исключений стиля. По умолчанию проверяется текущая формула.

Параметры:

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

Возвращает:

  • (Boolean)


221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# File 'rubocops/extend/formula_cop.rb', line 221

def tap_style_exception?(list, formula = nil)
  if @tap_style_exceptions.nil? && !formula_tap.nil?
    @tap_style_exceptions = {}

    Pathname.glob("#{style_exceptions_dir}/*.json").each do |exception_file|
      list_name = exception_file.basename.to_s.chomp(".json").to_sym
      list_contents = begin
        JSON.parse exception_file.read
      rescue JSON::ParserError
        nil
      end
      next if list_contents.nil? || list_contents.none?

      @tap_style_exceptions[list_name] = list_contents
    end
  end

  return false if @tap_style_exceptions.nil? || @tap_style_exceptions.none?
  return false unless @tap_style_exceptions.key? list

  T.must(@tap_style_exceptions[list]).include?(formula || @formula_name)
end

#versioned_formula? ⇒ Boolean

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

Возвращает true, если формула имеет версию.

Возвращает:

  • (Boolean)


178
179
180
181
182
# File 'rubocops/extend/formula_cop.rb', line 178

def versioned_formula?
  return false if @formula_name.nil?

  @formula_name.include?("@")
end

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

Spec-Zone.ru

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