audit: add rules on field order
Closes Homebrew/homebrew#40472. Signed-off-by: Xu Cheng <xucheng@me.com>
This commit is contained in:
parent
d3ab5e6034
commit
8604799f1a
@ -56,6 +56,7 @@ end
|
||||
class FormulaText
|
||||
def initialize path
|
||||
@text = path.open("rb", &:read)
|
||||
@lines = @text.lines
|
||||
end
|
||||
|
||||
def without_patch
|
||||
@ -77,6 +78,11 @@ class FormulaText
|
||||
def =~ regex
|
||||
regex =~ @text
|
||||
end
|
||||
|
||||
def line_number regex
|
||||
index = @lines.index { |line| line =~ regex }
|
||||
index ? index + 1 : nil
|
||||
end
|
||||
end
|
||||
|
||||
class FormulaAuditor
|
||||
@ -125,6 +131,37 @@ class FormulaAuditor
|
||||
unless text.has_trailing_newline?
|
||||
problem "File should end with a newline"
|
||||
end
|
||||
|
||||
return unless @strict
|
||||
|
||||
component_list = [
|
||||
[/^ desc ["'][\S\ ]+["']/, "desc" ],
|
||||
[/^ homepage ["'][\S\ ]+["']/, "homepage" ],
|
||||
[/^ url ["'][\S\ ]+["']/, "url" ],
|
||||
[/^ mirror ["'][\S\ ]+["']/, "mirror" ],
|
||||
[/^ version ["'][\S\ ]+["']/, "version" ],
|
||||
[/^ (sha1|sha256) ["'][\S\ ]+["']/, "checksum" ],
|
||||
[/^ head ["'][\S\ ]+["']/, "head" ],
|
||||
[/^ stable do/, "stable block" ],
|
||||
[/^ bottle do/, "bottle block" ],
|
||||
[/^ devel do/, "devel block" ],
|
||||
[/^ head do/, "head block" ],
|
||||
[/^ option/, "option" ],
|
||||
[/^ depends_on/, "depends_on" ],
|
||||
[/^ def install/, "install method"],
|
||||
[/^ def caveats/, "caveats method"],
|
||||
[/^ test do/, "test block" ],
|
||||
]
|
||||
|
||||
component_list.map do |regex, name|
|
||||
lineno = text.line_number regex
|
||||
next unless lineno
|
||||
[lineno, name]
|
||||
end.compact.each_cons(2) do |c1, c2|
|
||||
unless c1[0] < c2[0]
|
||||
problem "`#{c1[1]}`(line #{c1[0]}) should be put before `#{c2[1]}`(line #{c2[0]})"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def audit_class
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user