mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
audit: Port audit_caveats method to rubocop and add tests
This commit is contained in:
parent
f9e8d84301
commit
cf848a14d2
@ -11,6 +11,9 @@ require: ./Homebrew/rubocops.rb
|
||||
FormulaAudit/Text:
|
||||
Enabled: true
|
||||
|
||||
FormulaAudit/Caveats:
|
||||
Enabled: true
|
||||
|
||||
FormulaAuditStrict/BottleBlock:
|
||||
Enabled: true
|
||||
|
||||
|
@ -1148,11 +1148,6 @@ class FormulaAuditor
|
||||
problem "Use pkgshare instead of (share#{$1}\"#{formula.name}\")"
|
||||
end
|
||||
|
||||
def audit_caveats
|
||||
return unless formula.caveats.to_s.include?("setuid")
|
||||
problem "Don't recommend setuid in the caveats, suggest sudo instead."
|
||||
end
|
||||
|
||||
def audit_reverse_migration
|
||||
# Only enforce for new formula being re-added to core and official taps
|
||||
return unless @strict
|
||||
|
@ -4,3 +4,4 @@ require_relative "./rubocops/components_order_cop"
|
||||
require_relative "./rubocops/components_redundancy_cop"
|
||||
require_relative "./rubocops/homepage_cop"
|
||||
require_relative "./rubocops/text_cop"
|
||||
require_relative "./rubocops/caveats_cop"
|
||||
|
16
Library/Homebrew/rubocops/caveats_cop.rb
Normal file
16
Library/Homebrew/rubocops/caveats_cop.rb
Normal file
@ -0,0 +1,16 @@
|
||||
require_relative "./extend/formula_cop"
|
||||
|
||||
module RuboCop
|
||||
module Cop
|
||||
module FormulaAudit
|
||||
class Caveats < FormulaCop
|
||||
def audit_formula(_node, _class_node, _parent_class_node, _body_node)
|
||||
caveats_strings.each do |n|
|
||||
next unless regex_match_group(n, /\bsetuid\b/i)
|
||||
problem "Don't recommend setuid in the caveats, suggest sudo instead."
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -24,7 +24,11 @@ module RuboCop
|
||||
return unless match_object
|
||||
node_begin_pos = start_column(node)
|
||||
line_begin_pos = line_start_column(node)
|
||||
@column = node_begin_pos + match_object.begin(0) - line_begin_pos + 1
|
||||
if node_begin_pos == line_begin_pos
|
||||
@column = node_begin_pos + match_object.begin(0) - line_begin_pos
|
||||
else
|
||||
@column = node_begin_pos + match_object.begin(0) - line_begin_pos + 1
|
||||
end
|
||||
@length = match_object.to_s.length
|
||||
@line_no = line_number(node)
|
||||
@source_buf = source_buffer(node)
|
||||
@ -33,6 +37,12 @@ module RuboCop
|
||||
match_object
|
||||
end
|
||||
|
||||
# Returns all string nodes among the descendants of given node
|
||||
def find_strings(node)
|
||||
return [] if node.nil?
|
||||
node.each_descendant(:str)
|
||||
end
|
||||
|
||||
# Returns method_node matching method_name
|
||||
def find_node_method_by_name(node, method_name)
|
||||
return if node.nil?
|
||||
@ -233,6 +243,11 @@ module RuboCop
|
||||
true
|
||||
end
|
||||
|
||||
# Return all the caveats' string nodes in an array
|
||||
def caveats_strings
|
||||
find_strings(find_method_def(@body, :caveats))
|
||||
end
|
||||
|
||||
# Returns the array of arguments of the method_node
|
||||
def parameters(method_node)
|
||||
return unless method_node.send_type?
|
||||
@ -308,6 +323,8 @@ module RuboCop
|
||||
return node.each_child_node(:str).map(&:str_content).join("") if node.type == :dstr
|
||||
when :const
|
||||
return node.const_name if node.type == :const
|
||||
else
|
||||
""
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -305,23 +305,6 @@ describe FormulaAuditor do
|
||||
end
|
||||
end
|
||||
|
||||
specify "#audit_caveats" do
|
||||
fa = formula_auditor "foo", <<-EOS.undent
|
||||
class Foo < Formula
|
||||
homepage "http://example.com/foo"
|
||||
url "http://example.com/foo-1.0.tgz"
|
||||
|
||||
def caveats
|
||||
"setuid"
|
||||
end
|
||||
end
|
||||
EOS
|
||||
|
||||
fa.audit_caveats
|
||||
expect(fa.problems)
|
||||
.to eq(["Don't recommend setuid in the caveats, suggest sudo instead."])
|
||||
end
|
||||
|
||||
describe "#audit_keg_only_style" do
|
||||
specify "keg_only_needs_downcasing" do
|
||||
fa = formula_auditor "foo", <<-EOS.undent, strict: true
|
||||
|
42
Library/Homebrew/test/rubocops/caveats_cop_spec.rb
Normal file
42
Library/Homebrew/test/rubocops/caveats_cop_spec.rb
Normal file
@ -0,0 +1,42 @@
|
||||
require "rubocop"
|
||||
require "rubocop/rspec/support"
|
||||
require_relative "../../extend/string"
|
||||
require_relative "../../rubocops/caveats_cop"
|
||||
|
||||
describe RuboCop::Cop::FormulaAudit::Caveats do
|
||||
subject(:cop) { described_class.new }
|
||||
|
||||
context "When auditing caveats" do
|
||||
it "When there is setuid mentioned in caveats" do
|
||||
source = <<-EOS.undent
|
||||
class Foo < Formula
|
||||
homepage "http://example.com/foo"
|
||||
url "http://example.com/foo-1.0.tgz"
|
||||
|
||||
def caveats
|
||||
"setuid"
|
||||
end
|
||||
end
|
||||
EOS
|
||||
|
||||
expected_offenses = [{ message: "Don't recommend setuid in the caveats, suggest sudo instead.",
|
||||
severity: :convention,
|
||||
line: 6,
|
||||
column: 5,
|
||||
source: source }]
|
||||
|
||||
inspect_source(cop, source)
|
||||
|
||||
expected_offenses.zip(cop.offenses).each do |expected, actual|
|
||||
expect_offense(expected, actual)
|
||||
end
|
||||
end
|
||||
|
||||
def expect_offense(expected, actual)
|
||||
expect(actual.message).to eq(expected[:message])
|
||||
expect(actual.severity).to eq(expected[:severity])
|
||||
expect(actual.line).to eq(expected[:line])
|
||||
expect(actual.column).to eq(expected[:column])
|
||||
end
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user