33 lines
1.1 KiB
Ruby
33 lines
1.1 KiB
Ruby
![]() |
# typed: true
|
||
|
# frozen_string_literal: true
|
||
|
|
||
|
require "rubocops/extend/formula_cop"
|
||
|
|
||
|
module RuboCop
|
||
|
module Cop
|
||
|
module FormulaAudit
|
||
|
# This cop audits Python formulae that include the "lxml" resource
|
||
|
# to ensure that they also have the correct `uses_from_macos`
|
||
|
# dependencies.
|
||
|
#
|
||
|
# @api private
|
||
|
class ResourceRequiresDependencies < FormulaCop
|
||
|
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
||
|
return if body_node.nil?
|
||
|
|
||
|
resource_nodes = find_every_method_call_by_name(body_node, :resource)
|
||
|
lxml = resource_nodes.find { |node| node.arguments.first.str_content == "lxml" }
|
||
|
return unless lxml
|
||
|
|
||
|
uses_from_macos_nodes = find_every_method_call_by_name(body_node, :uses_from_macos)
|
||
|
dependencies = uses_from_macos_nodes.map { |node| node.arguments.first.str_content }
|
||
|
return if dependencies.include?("libxml2") && dependencies.include?("libxslt")
|
||
|
|
||
|
offending_node(lxml)
|
||
|
problem "Add `uses_from_macos` lines above for \"libxml2\"` and \"libxslt\"."
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|