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
|
class FormulaText
|
||||||
def initialize path
|
def initialize path
|
||||||
@text = path.open("rb", &:read)
|
@text = path.open("rb", &:read)
|
||||||
|
@lines = @text.lines
|
||||||
end
|
end
|
||||||
|
|
||||||
def without_patch
|
def without_patch
|
||||||
@ -77,6 +78,11 @@ class FormulaText
|
|||||||
def =~ regex
|
def =~ regex
|
||||||
regex =~ @text
|
regex =~ @text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def line_number regex
|
||||||
|
index = @lines.index { |line| line =~ regex }
|
||||||
|
index ? index + 1 : nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class FormulaAuditor
|
class FormulaAuditor
|
||||||
@ -125,6 +131,37 @@ class FormulaAuditor
|
|||||||
unless text.has_trailing_newline?
|
unless text.has_trailing_newline?
|
||||||
problem "File should end with a newline"
|
problem "File should end with a newline"
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
def audit_class
|
def audit_class
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user