2020-10-10 14:16:11 +02:00
|
|
|
# typed: true
|
2020-04-05 15:22:06 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "rubocops/extend/formula"
|
|
|
|
|
|
|
|
module RuboCop
|
|
|
|
module Cop
|
|
|
|
module FormulaAudit
|
2020-11-27 13:13:09 -05:00
|
|
|
# This cop audits formulae that are keg-only because they are provided by macos.
|
|
|
|
class ProvidedByMacos < FormulaCop
|
|
|
|
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
|
|
|
find_method_with_args(body_node, :keg_only, :provided_by_macos) do
|
|
|
|
unless tap_style_exception? :provided_by_macos_formulae
|
|
|
|
problem "Formulae that are `keg_only :provided_by_macos` should be added to "\
|
|
|
|
"`style_exceptions/provided_by_macos_formulae.json`"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-11-05 17:17:03 -05:00
|
|
|
# This cop audits `uses_from_macos` dependencies in formulae.
|
2020-04-05 15:22:06 +01:00
|
|
|
class UsesFromMacos < FormulaCop
|
|
|
|
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
|
|
|
find_method_with_args(body_node, :uses_from_macos, /^"(.+)"/).each do |method|
|
2020-10-09 11:12:06 +02:00
|
|
|
dep = if parameters(method).first.instance_of?(RuboCop::AST::StrNode)
|
2020-04-05 15:22:06 +01:00
|
|
|
parameters(method).first
|
2020-10-09 11:12:06 +02:00
|
|
|
elsif parameters(method).first.instance_of?(RuboCop::AST::HashNode)
|
2020-04-05 15:22:06 +01:00
|
|
|
parameters(method).first.keys.first
|
|
|
|
end
|
|
|
|
|
2020-11-27 13:13:09 -05:00
|
|
|
next if tap_style_exception? :provided_by_macos_formulae, string_content(dep)
|
|
|
|
next if tap_style_exception? :non_keg_only_provided_by_macos_formulae, string_content(dep)
|
2020-04-05 15:22:06 +01:00
|
|
|
|
|
|
|
problem "`uses_from_macos` should only be used for macOS dependencies, not #{string_content(dep)}."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|