pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/pkgtools/pkglint pkgtools/pkglint: Update to 5.5.16
details: https://anonhg.NetBSD.org/pkgsrc/rev/72f0e7d7448b
branches: trunk
changeset: 311401:72f0e7d7448b
user: rillig <rillig%pkgsrc.org@localhost>
date: Thu Aug 09 20:08:12 2018 +0000
description:
pkgtools/pkglint: Update to 5.5.16
Changes since 5.5.15:
* Add checks for options.mk files
* Treat redundant variable definitions as notes, not as warnings
* Check doc/CHANGES-* for typos in the dates (only for 2018 and later)
* Lots of cleanup in the test code
diffstat:
pkgtools/pkglint/Makefile | 4 +-
pkgtools/pkglint/files/autofix_test.go | 4 +-
pkgtools/pkglint/files/check_test.go | 5 +-
pkgtools/pkglint/files/expecter.go | 38 ++++++++
pkgtools/pkglint/files/files_test.go | 12 ++-
pkgtools/pkglint/files/mkline_test.go | 3 +-
pkgtools/pkglint/files/mklinechecker_test.go | 9 +-
pkgtools/pkglint/files/mklines_test.go | 12 ++
pkgtools/pkglint/files/mklines_varalign_test.go | 7 +-
pkgtools/pkglint/files/options.go | 106 ++++++++++++++++++++++++
pkgtools/pkglint/files/options_test.go | 78 +++++++++++++++++
pkgtools/pkglint/files/package_test.go | 7 +-
pkgtools/pkglint/files/pkglint.go | 9 ++
pkgtools/pkglint/files/pkglint_test.go | 1 +
pkgtools/pkglint/files/pkgsrc.go | 24 +++++
pkgtools/pkglint/files/pkgsrc_test.go | 34 ++++---
pkgtools/pkglint/files/shell_test.go | 4 +-
pkgtools/pkglint/files/util.go | 5 +-
18 files changed, 319 insertions(+), 43 deletions(-)
diffs (truncated from 638 to 300 lines):
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/Makefile
--- a/pkgtools/pkglint/Makefile Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/Makefile Thu Aug 09 20:08:12 2018 +0000
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.543 2018/07/28 18:31:23 rillig Exp $
+# $NetBSD: Makefile,v 1.544 2018/08/09 20:08:12 rillig Exp $
-PKGNAME= pkglint-5.5.15
+PKGNAME= pkglint-5.5.16
DISTFILES= # none
CATEGORIES= pkgtools
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/autofix_test.go
--- a/pkgtools/pkglint/files/autofix_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/autofix_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -257,12 +257,12 @@
t := s.Init(c)
t.SetupCommandLine("--show-autofix", "--source")
- lines := t.SetupFileLinesContinuation("Makefile",
+ mklines := t.SetupFileMkLines("Makefile",
MkRcsID,
"before \\",
"The old song \\",
"after")
- line := lines[1]
+ line := mklines.lines[1]
{
fix := line.Autofix()
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/check_test.go
--- a/pkgtools/pkglint/files/check_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/check_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -154,9 +154,10 @@
// SetupFileLines creates a temporary file and writes the given lines to it.
// The file is then read in, handling line continuations for Makefiles.
-func (t *Tester) SetupFileLinesContinuation(relativeFilename string, lines ...string) []Line {
+func (t *Tester) SetupFileMkLines(relativeFilename string, lines ...string) *MkLines {
filename := t.CreateFileLines(relativeFilename, lines...)
- return LoadExistingLines(filename, true)
+ plainLines := LoadExistingLines(filename, true)
+ return NewMkLines(plainLines)
}
func (t *Tester) CreateFileLines(relativeFilename string, lines ...string) (filename string) {
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/expecter.go
--- a/pkgtools/pkglint/files/expecter.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/expecter.go Thu Aug 09 20:08:12 2018 +0000
@@ -82,6 +82,16 @@
return !exp.EOF() && exp.lines[exp.index].Text == text && exp.Advance()
}
+func (exp *Expecter) AdvanceWhile(pred func(line Line) bool) {
+ if trace.Tracing {
+ defer trace.Call(exp.CurrentLine().Text)()
+ }
+
+ for !exp.EOF() && !pred(exp.CurrentLine()) {
+ exp.Advance()
+ }
+}
+
func (exp *Expecter) ExpectEmptyLine(warnSpace bool) bool {
if exp.AdvanceIfEquals("") {
return true
@@ -110,3 +120,31 @@
func (exp *Expecter) SkipToFooter() {
exp.index = len(exp.lines) - 2
}
+
+// MkExpecter records the state when checking a list of Makefile lines from top to bottom.
+type MkExpecter struct {
+ mklines *MkLines
+ Expecter
+}
+
+func NewMkExpecter(mklines *MkLines) *MkExpecter {
+ return &MkExpecter{mklines, *NewExpecter(mklines.lines)}
+}
+
+func (exp *MkExpecter) CurrentMkLine() MkLine {
+ return exp.mklines.mklines[exp.index]
+}
+
+func (exp *MkExpecter) PreviousMkLine() MkLine {
+ return exp.mklines.mklines[exp.index-1]
+}
+
+func (exp *MkExpecter) AdvanceWhile(pred func(mkline MkLine) bool) {
+ if trace.Tracing {
+ defer trace.Call(exp.CurrentMkLine().Text)()
+ }
+
+ for !exp.EOF() && pred(exp.CurrentMkLine()) {
+ exp.Advance()
+ }
+}
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/files_test.go
--- a/pkgtools/pkglint/files/files_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/files_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -34,7 +34,7 @@
func (s *Suite) Test_convertToLogicalLines__comments(c *check.C) {
t := s.Init(c)
- lines := t.SetupFileLinesContinuation("comment.mk",
+ mklines := t.SetupFileMkLines("comment.mk",
"# This is a comment",
"",
"#\\",
@@ -60,7 +60,7 @@
"This is no comment")
var texts []string
- for _, line := range lines {
+ for _, line := range mklines.lines {
texts = append(texts, line.Text)
}
@@ -83,7 +83,7 @@
"This is no comment"})
var rawTexts []string
- for _, line := range lines {
+ for _, line := range mklines.lines {
for _, rawLine := range line.raw {
rawTexts = append(rawTexts, rawLine.textnl)
}
@@ -113,6 +113,12 @@
"This is a comment\n",
"#\\\\\\\\\\\\\n",
"This is no comment\n"})
+
+ // This is just a side-effect and not relevant for this particular test.
+ t.CheckOutputLines(
+ "ERROR: ~/comment.mk:15: Unknown Makefile line format.",
+ "ERROR: ~/comment.mk:19: Unknown Makefile line format.",
+ "ERROR: ~/comment.mk:23: Unknown Makefile line format.")
}
func (s *Suite) Test_convertToLogicalLines_continuationInLastLine(c *check.C) {
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/mkline_test.go
--- a/pkgtools/pkglint/files/mkline_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/mkline_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -679,13 +679,12 @@
t.SetupCommandLine("-Wall", "--autofix")
t.SetupVartypes()
- lines := t.SetupFileLinesContinuation("Makefile",
+ mklines := t.SetupFileMkLines("Makefile",
MkRcsID,
"",
"demo: .PHONY",
"\t${ECHO} ${WRKSRC:Q}",
"\t${ECHO} ${FOODIR:Q}")
- mklines := NewMkLines(lines)
mklines.Check()
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/mklinechecker_test.go
--- a/pkgtools/pkglint/files/mklinechecker_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/mklinechecker_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -330,14 +330,13 @@
t.SetupCommandLine("-Wall", "--autofix")
t.SetupVartypes()
- lines := t.SetupFileLinesContinuation("options.mk",
+ mklines := t.SetupFileMkLines("options.mk",
MkRcsID,
".if ${PKGNAME} == pkgname",
".if \\",
" ${PLATFORM:MNetBSD-4.*}",
".endif",
".endif")
- mklines := NewMkLines(lines)
mklines.Check()
@@ -359,12 +358,11 @@
t.SetupCommandLine("-Wall")
t.SetupVartypes()
- lines := t.SetupFileLinesContinuation("options.mk",
+ mklines := t.SetupFileMkLines("options.mk",
MkRcsID,
"GOPATH=\t${WRKDIR}",
"do-build:",
"\tcd ${WRKSRC} && GOPATH=${GOPATH} PATH=${PATH} :")
- mklines := NewMkLines(lines)
mklines.Check()
@@ -387,11 +385,10 @@
t.SetupCommandLine("-Wall")
t.SetupVartypes()
t.SetupMasterSite("MASTER_SITE_GITHUB", "https://github.com/")
- lines := t.SetupFileLinesContinuation("options.mk",
+ mklines := t.SetupFileMkLines("options.mk",
MkRcsID,
"WRKSRC=\t\t${WRKDIR:=/subdir}",
"MASTER_SITES=\t${MASTER_SITE_GITHUB:=organization/}")
- mklines := NewMkLines(lines)
mklines.Check()
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/mklines_test.go
--- a/pkgtools/pkglint/files/mklines_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/mklines_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -599,6 +599,18 @@
t.CheckOutputEmpty()
}
+func (s *Suite) Test_MkLines_CheckRedundantVariables__overwrite_same_value(c *check.C) {
+ t := s.Init(c)
+ mklines := t.NewMkLines("module.mk",
+ "VAR=\tvalue ${OTHER}",
+ "VAR=\tvalue ${OTHER}")
+
+ mklines.CheckRedundantVariables()
+
+ t.CheckOutputLines(
+ "NOTE: module.mk:1: Definition of VAR is redundant because of line 2.")
+}
+
func (s *Suite) Test_MkLines_CheckRedundantVariables__procedure_call(c *check.C) {
t := s.Init(c)
mklines := t.NewMkLines("mk/pthread.buildlink3.mk",
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/mklines_varalign_test.go
--- a/pkgtools/pkglint/files/mklines_varalign_test.go Thu Aug 09 19:10:06 2018 +0000
+++ b/pkgtools/pkglint/files/mklines_varalign_test.go Thu Aug 09 20:08:12 2018 +0000
@@ -52,8 +52,7 @@
}
vt.tester.SetupCommandLine(cmdline...)
- lines := vt.tester.SetupFileLinesContinuation("Makefile", vt.input...)
- mklines := NewMkLines(lines)
+ mklines := vt.tester.SetupFileMkLines("Makefile", vt.input...)
varalign := VaralignBlock{}
for _, mkline := range mklines.mklines {
@@ -71,9 +70,7 @@
}
vt.tester.SetupCommandLine(cmdline...)
- lines := vt.tester.SetupFileLinesContinuation("Makefile", vt.input...)
-
- mklines := NewMkLines(lines)
+ mklines := vt.tester.SetupFileMkLines("Makefile", vt.input...)
var varalign VaralignBlock
for _, mkline := range mklines.mklines {
diff -r 42ead6884d0f -r 72f0e7d7448b pkgtools/pkglint/files/options.go
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkglint/files/options.go Thu Aug 09 20:08:12 2018 +0000
@@ -0,0 +1,106 @@
+package main
+
+import "netbsd.org/pkglint/trace"
+
+func ChecklinesOptionsMk(mklines *MkLines) {
+ if trace.Tracing {
+ defer trace.Call1(mklines.lines[0].Filename)()
+ }
+
+ mklines.Check()
+
+ exp := NewMkExpecter(mklines)
+ exp.AdvanceWhile(func(mkline MkLine) bool { return mkline.IsComment() || mkline.IsEmpty() })
+
+ if exp.EOF() || !(exp.CurrentMkLine().IsVarassign() && exp.CurrentMkLine().Varname() == "PKG_OPTIONS_VAR") {
+ exp.CurrentLine().Warnf("Expected definition of PKG_OPTIONS_VAR.")
+ Explain(
+ "The input variables in an options.mk file should always be",
+ "mentioned in the same order: PKG_OPTIONS_VAR, ",
+ "PKG_SUPPORTED_OPTIONS, PKG_SUGGESTED_OPTIONS. This way, the",
+ "options.mk files have the same structure and are easy to understand.")
+ return
+ }
+ exp.Advance()
+
+ declaredOptions := make(map[string]MkLine)
+ handledOptions := make(map[string]MkLine)
+ var optionsInDeclarationOrder []string
+
+ // The conditionals are typically for OPSYS and MACHINE_ARCH.
+loop:
+ for ; !exp.EOF(); exp.Advance() {
+ mkline := exp.CurrentMkLine()
+ switch {
+ case mkline.IsComment():
+ case mkline.IsEmpty():
+ case mkline.IsVarassign():
+ varname := mkline.Varname()
+ if varname == "PKG_SUPPORTED_OPTIONS" || hasPrefix(varname, "PKG_OPTIONS_GROUP.") {
+ for _, option := range splitOnSpace(mkline.Value()) {
+ if option == mkline.WithoutMakeVariables(option) {
+ declaredOptions[option] = mkline
+ optionsInDeclarationOrder = append(optionsInDeclarationOrder, option)
+ }
+ }
Home |
Main Index |
Thread Index |
Old Index