brew/Library/Homebrew/rubocops/resource_requires_dependencies.rb
Issy Long 33c33b5338
rubocop: Formulae with the "lxml" resource have required dependencies
- We're moving from `depends_on "python-lxml"` to `resource "lxml" ...` as part
  of the new Python vendoring plan.
- For `resource "lxml"` to work, `uses_from_macos "libxml2"` and
  `uses_from_macos "libxslt"` are needed in the formulae.
- This new RuboCop rule enforces that a formula including the "lxml" resource
  also include those dependencies.
2024-02-19 22:50:55 +00:00

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