Класс: 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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
18 19 20 | # File 'rubocops/extend/formula_cop.rb', line 18 def file_path @file_path end |
Подробное описание методов экземпляра
#audit_comments(&_block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Передаёт блоку текст комментария в качестве параметра.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
45 | # File 'rubocops/extend/formula_cop.rb', line 45 def audit_formula(formula_nodes); end |
#audit_urls(urls, regex, &_block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Вызывает блок при совпадении.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Возвращает массив со всеми узлами строк предупреждений.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
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, если в узле вызова заданного метода зависимости присутствуют указанное имя зависимости и её тип.
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 формулы.
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.
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 и является основной точкой входа.
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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Возвращает каталог исключений стиля на основе пути к файлу.
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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Возвращает, присутствует ли указанная формула в указанном списке исключений стиля. По умолчанию проверяется текущая формула.
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, если формула имеет версию.
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