Migrate uses_from_macos style lists
This commit is contained in:
parent
a09613543a
commit
44bfbd0112
@ -473,8 +473,9 @@ module RuboCop
|
|||||||
match_obj[1]
|
match_obj[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns whether the current formula exists in the given style exception list
|
# Returns whether the given formula exists in the given style exception list.
|
||||||
def tap_style_exception?(list)
|
# Defaults to the current formula being checked.
|
||||||
|
def tap_style_exception?(list, formula = nil)
|
||||||
if @tap_style_exceptions.blank? && formula_tap.present?
|
if @tap_style_exceptions.blank? && formula_tap.present?
|
||||||
@tap_style_exceptions = {}
|
@tap_style_exceptions = {}
|
||||||
|
|
||||||
@ -495,7 +496,7 @@ module RuboCop
|
|||||||
return false if @tap_style_exceptions.blank?
|
return false if @tap_style_exceptions.blank?
|
||||||
return false unless @tap_style_exceptions.key? list
|
return false unless @tap_style_exceptions.key? list
|
||||||
|
|
||||||
@tap_style_exceptions[list].include? @formula_name
|
@tap_style_exceptions[list].include?(formula || @formula_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@ -6,82 +6,20 @@ require "rubocops/extend/formula"
|
|||||||
module RuboCop
|
module RuboCop
|
||||||
module Cop
|
module Cop
|
||||||
module FormulaAudit
|
module FormulaAudit
|
||||||
|
# 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
|
||||||
|
|
||||||
# This cop audits `uses_from_macos` dependencies in formulae.
|
# This cop audits `uses_from_macos` dependencies in formulae.
|
||||||
class UsesFromMacos < FormulaCop
|
class UsesFromMacos < FormulaCop
|
||||||
# Generate with:
|
|
||||||
#
|
|
||||||
# ```
|
|
||||||
# brew ruby -e 'puts Formula.select {|f| f.keg_only_reason&.provided_by_macos? }.map(&:name).sort.join("\n")'
|
|
||||||
# ```
|
|
||||||
#
|
|
||||||
# Not done at runtime as it's too slow and RuboCop doesn't have access.
|
|
||||||
PROVIDED_BY_MACOS_FORMULAE = %w[
|
|
||||||
apr
|
|
||||||
bc
|
|
||||||
bison
|
|
||||||
bzip2
|
|
||||||
cups
|
|
||||||
curl
|
|
||||||
dyld-headers
|
|
||||||
ed
|
|
||||||
expat
|
|
||||||
file-formula
|
|
||||||
flex
|
|
||||||
gcore
|
|
||||||
gnu-getopt
|
|
||||||
icu4c
|
|
||||||
krb5
|
|
||||||
libarchive
|
|
||||||
libedit
|
|
||||||
libffi
|
|
||||||
libiconv
|
|
||||||
libpcap
|
|
||||||
libressl
|
|
||||||
libxml2
|
|
||||||
libxslt
|
|
||||||
llvm
|
|
||||||
lsof
|
|
||||||
m4
|
|
||||||
ncompress
|
|
||||||
ncurses
|
|
||||||
net-snmp
|
|
||||||
openldap
|
|
||||||
openlibm
|
|
||||||
pod2man
|
|
||||||
rpcgen
|
|
||||||
ruby
|
|
||||||
sqlite
|
|
||||||
ssh-copy-id
|
|
||||||
swift
|
|
||||||
tcl-tk
|
|
||||||
texinfo
|
|
||||||
unifdef
|
|
||||||
unzip
|
|
||||||
zip
|
|
||||||
zlib
|
|
||||||
].freeze
|
|
||||||
|
|
||||||
# These formulae aren't `keg_only :provided_by_macos` but are provided by
|
|
||||||
# macOS (or very similarly, e.g. OpenSSL where system provides LibreSSL).
|
|
||||||
# TODO: consider making some of these keg-only.
|
|
||||||
ALLOWED_USES_FROM_MACOS_DEPS = (PROVIDED_BY_MACOS_FORMULAE + %w[
|
|
||||||
bash
|
|
||||||
cpio
|
|
||||||
expect
|
|
||||||
groff
|
|
||||||
gzip
|
|
||||||
openssl
|
|
||||||
openssl@1.1
|
|
||||||
perl
|
|
||||||
php
|
|
||||||
python
|
|
||||||
python@3
|
|
||||||
rsync
|
|
||||||
vim
|
|
||||||
xz
|
|
||||||
zsh
|
|
||||||
]).freeze
|
|
||||||
|
|
||||||
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
||||||
find_method_with_args(body_node, :uses_from_macos, /^"(.+)"/).each do |method|
|
find_method_with_args(body_node, :uses_from_macos, /^"(.+)"/).each do |method|
|
||||||
dep = if parameters(method).first.instance_of?(RuboCop::AST::StrNode)
|
dep = if parameters(method).first.instance_of?(RuboCop::AST::StrNode)
|
||||||
@ -90,7 +28,8 @@ module RuboCop
|
|||||||
parameters(method).first.keys.first
|
parameters(method).first.keys.first
|
||||||
end
|
end
|
||||||
|
|
||||||
next if ALLOWED_USES_FROM_MACOS_DEPS.include?(string_content(dep))
|
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)
|
||||||
|
|
||||||
problem "`uses_from_macos` should only be used for macOS dependencies, not #{string_content(dep)}."
|
problem "`uses_from_macos` should only be used for macOS dependencies, not #{string_content(dep)}."
|
||||||
end
|
end
|
||||||
|
|||||||
@ -17,6 +17,4 @@ describe RuboCop::Cop::FormulaAudit::UsesFromMacos do
|
|||||||
end
|
end
|
||||||
RUBY
|
RUBY
|
||||||
end
|
end
|
||||||
|
|
||||||
include_examples "formulae exist", described_class::ALLOWED_USES_FROM_MACOS_DEPS
|
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user