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.7.23



details:   https://anonhg.NetBSD.org/pkgsrc/rev/ae2b2c53ce7d
branches:  trunk
changeset: 400996:ae2b2c53ce7d
user:      rillig <rillig%pkgsrc.org@localhost>
date:      Sun Sep 08 22:47:47 2019 +0000

description:
pkgtools/pkglint: update to 5.7.23

Changes since 5.7.22:

* Added a warning for lines that look empty but are actually follow-up
  lines from a previous line.

* Added notes for unusual placement of the continuation backslash. It
  should always be preceded by a single space or tab, or be in column
  73.

* Improved check for needlessly complicated !empty(PKGPATH:Mcat/pkg)
  that is transformed into the simpler ${PKGPATH} == cat/pkg, even if
  the package name contains hyphens, dots, plus or slashes.

* Added check for the _VARGROUPS section since that section contains
  many redundancies that can easily be checked. For example, in
  mk/compiler/gcc.mk the _VARGROUPS section is 67 lines long and
  contains far more than 100 variables. It's tedious to manually check
  this file for internal consistency. That's better left to pkglint.

* The empty variable is no longer flagged as "used but not defined".
  It appears in expressions like ${:Ustring}.

* When --source is combined with --explain, don't unnecessarily
  repeat the source code for a single line if there are several
  diagnostics. Instead, even omit the empty line between the diagnostics
  for the same line.

diffstat:

 pkgtools/pkglint/Makefile                    |     4 +-
 pkgtools/pkglint/PLIST                       |     4 +-
 pkgtools/pkglint/files/autofix.go            |    22 +-
 pkgtools/pkglint/files/autofix_test.go       |     2 -
 pkgtools/pkglint/files/category_test.go      |    25 +
 pkgtools/pkglint/files/lines.go              |     6 +-
 pkgtools/pkglint/files/lines_test.go         |     1 +
 pkgtools/pkglint/files/logging.go            |    46 +-
 pkgtools/pkglint/files/logging_test.go       |   144 ++-
 pkgtools/pkglint/files/mkline_test.go        |    29 +-
 pkgtools/pkglint/files/mklinechecker.go      |   100 +-
 pkgtools/pkglint/files/mklinechecker_test.go |    20 +
 pkgtools/pkglint/files/mklines.go            |     3 +
 pkgtools/pkglint/files/mkparser.go           |     6 +-
 pkgtools/pkglint/files/mkparser_test.go      |    21 +-
 pkgtools/pkglint/files/package.go            |     5 +-
 pkgtools/pkglint/files/package_test.go       |    39 +-
 pkgtools/pkglint/files/pkglint.go            |     1 +
 pkgtools/pkglint/files/pkglint_test.go       |     2 +-
 pkgtools/pkglint/files/pkgsrc.go             |     9 +
 pkgtools/pkglint/files/shell.go              |     1 +
 pkgtools/pkglint/files/tools.go              |     2 +
 pkgtools/pkglint/files/util.go               |    38 +-
 pkgtools/pkglint/files/util_test.go          |     9 +
 pkgtools/pkglint/files/varalignblock.go      |   606 +++++---
 pkgtools/pkglint/files/varalignblock_test.go |  1772 +++++++++++++++----------
 pkgtools/pkglint/files/vardefs.go            |    14 +-
 pkgtools/pkglint/files/vargroups.go          |   246 +++
 pkgtools/pkglint/files/vargroups_test.go     |   142 ++
 29 files changed, 2230 insertions(+), 1089 deletions(-)

diffs (truncated from 5545 to 300 lines):

diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/Makefile
--- a/pkgtools/pkglint/Makefile Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/Makefile Sun Sep 08 22:47:47 2019 +0000
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.595 2019/08/25 21:47:11 rillig Exp $
+# $NetBSD: Makefile,v 1.596 2019/09/08 22:47:47 rillig Exp $
 
-PKGNAME=       pkglint-5.7.22
+PKGNAME=       pkglint-5.7.23
 CATEGORIES=    pkgtools
 DISTNAME=      tools
 MASTER_SITES=  ${MASTER_SITE_GITHUB:=golang/}
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/PLIST
--- a/pkgtools/pkglint/PLIST    Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/PLIST    Sun Sep 08 22:47:47 2019 +0000
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.13 2019/07/14 21:25:47 rillig Exp $
+@comment $NetBSD: PLIST,v 1.14 2019/09/08 22:47:47 rillig Exp $
 bin/pkglint
 gopkg/pkg/${GO_PLATFORM}/netbsd.org/pkglint.a
 gopkg/pkg/${GO_PLATFORM}/netbsd.org/pkglint/getopt.a
@@ -116,6 +116,8 @@
 gopkg/src/netbsd.org/pkglint/varalignblock_test.go
 gopkg/src/netbsd.org/pkglint/vardefs.go
 gopkg/src/netbsd.org/pkglint/vardefs_test.go
+gopkg/src/netbsd.org/pkglint/vargroups.go
+gopkg/src/netbsd.org/pkglint/vargroups_test.go
 gopkg/src/netbsd.org/pkglint/vartype.go
 gopkg/src/netbsd.org/pkglint/vartype_test.go
 gopkg/src/netbsd.org/pkglint/vartypecheck.go
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/autofix.go
--- a/pkgtools/pkglint/files/autofix.go Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/autofix.go Sun Sep 08 22:47:47 2019 +0000
@@ -127,7 +127,7 @@
 
 // ReplaceAt replaces the text "from" with "to", a single time.
 // But only if the text at the given position is indeed "from".
-func (fix *Autofix) ReplaceAt(rawIndex int, column int, from string, to string) {
+func (fix *Autofix) ReplaceAt(rawIndex int, textIndex int, from string, to string) {
        assert(from != to)
        fix.assertRealLine()
 
@@ -136,11 +136,11 @@
        }
 
        rawLine := fix.line.raw[rawIndex]
-       if column >= len(rawLine.textnl) || !hasPrefix(rawLine.textnl[column:], from) {
+       if textIndex >= len(rawLine.textnl) || !hasPrefix(rawLine.textnl[textIndex:], from) {
                return
        }
 
-       replaced := rawLine.textnl[:column] + to + rawLine.textnl[column+len(from):]
+       replaced := rawLine.textnl[:textIndex] + to + rawLine.textnl[textIndex+len(from):]
 
        if G.Logger.IsAutofix() {
                rawLine.textnl = replaced
@@ -328,7 +328,6 @@
                        fix.modified = true
                }
 
-               // Reduce number of calls to runtime.writeBarrier.
                fix.autofixShortTerm = autofixShortTerm{}
        }
 
@@ -364,20 +363,11 @@
                        }
                        G.Logger.Logf(AutofixLogLevel, line.Filename, lineno, AutofixFormat, action.description)
                }
+               G.Logger.showSource(line)
        }
 
-       if logDiagnostic || logFix {
-               if logFix {
-                       G.Logger.showSource(line)
-               }
-               if logDiagnostic && len(fix.explanation) > 0 {
-                       line.Explain(fix.explanation...)
-               }
-               if G.Logger.Opts.ShowSource {
-                       if !(G.Logger.Opts.Explain && logDiagnostic && len(fix.explanation) > 0) {
-                               G.Logger.out.Separate()
-                       }
-               }
+       if logDiagnostic && len(fix.explanation) > 0 {
+               line.Explain(fix.explanation...)
        }
 
        reset()
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/autofix_test.go
--- a/pkgtools/pkglint/files/autofix_test.go    Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/autofix_test.go    Sun Sep 08 22:47:47 2019 +0000
@@ -966,8 +966,6 @@
        t.CheckOutputLines(
                ">\ttext",
                "WARN: README.txt:123: A warning with autofix.",
-               "",
-               ">\ttext",
                "NOTE: README.txt:123: A note without fix.")
 }
 
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/category_test.go
--- a/pkgtools/pkglint/files/category_test.go   Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/category_test.go   Sun Sep 08 22:47:47 2019 +0000
@@ -343,3 +343,28 @@
        t.CheckOutputLines(
                "ERROR: ~/category/Makefile: Cannot be read.")
 }
+
+func (s *Suite) Test_CheckdirCategory__case_mismatch(c *check.C) {
+       t := s.Init(c)
+
+       t.SetUpPkgsrc()
+       t.CreateFileLines("mk/misc/category.mk")
+       t.CreateFileLines("category/p5-Net-DNS/Makefile")
+       t.CreateFileLines("category/Makefile",
+               MkCvsID,
+               "",
+               "COMMENT=\tCategory comment",
+               "",
+               "SUBDIR+=\tp5-net-dns",
+               "",
+               ".include \"../mk/misc/category.mk\"")
+       t.FinishSetUp()
+
+       G.Check(t.File("category"))
+
+       t.CheckOutputLines(
+               "ERROR: ~/category/Makefile:5: \"p5-Net-DNS\" "+
+                       "exists in the file system but not in the Makefile.",
+               "ERROR: ~/category/Makefile:5: \"p5-net-dns\" "+
+                       "exists in the Makefile but not in the file system.")
+}
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/lines.go
--- a/pkgtools/pkglint/files/lines.go   Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/lines.go   Sun Sep 08 22:47:47 2019 +0000
@@ -42,7 +42,11 @@
        line := ls.Lines[index]
        if m, expanded := line.IsCvsID(prefixRe); m {
 
-               if G.Testing && G.Wip && expanded {
+               // This check is considered experimental because it produces a few
+               // thousand notes and doesn't really affect the functionality of
+               // the packages. The worst thing that might happen is that a file
+               // looks older than it really is.
+               if G.Experimental && G.Wip && expanded {
                        fix := line.Autofix()
                        fix.Notef("Expected exactly %q.", suggestedPrefix+"$"+"NetBSD$")
                        fix.Explain(
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/lines_test.go
--- a/pkgtools/pkglint/files/lines_test.go      Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/lines_test.go      Sun Sep 08 22:47:47 2019 +0000
@@ -30,6 +30,7 @@
 func (s *Suite) Test_Lines_CheckCvsID__wip(c *check.C) {
        t := s.Init(c)
 
+       G.Experimental = true
        t.SetUpPkgsrc()
        t.SetUpPackage("wip/package")
        t.CreateFileLines("wip/package/file1.mk",
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/logging.go
--- a/pkgtools/pkglint/files/logging.go Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/logging.go Sun Sep 08 22:47:47 2019 +0000
@@ -16,6 +16,7 @@
 
        suppressDiag bool
        suppressExpl bool
+       prevLine     *Line
 
        logged    Once
        explained Once
@@ -98,8 +99,16 @@
                return
        }
 
+       // The explanation should fit nicely on a screen that is 80
+       // characters wide. The explanation is indented using a tab, and
+       // there should be a little margin at the right. The resulting
+       // number comes remarkably close to the line width recommended
+       // by typographers, which is 66.
+       const explanationWidth = 80 - 8 - 4
+
+       l.prevLine = nil
        l.out.Separate()
-       wrapped := wrap(68, explanation...)
+       wrapped := wrap(explanationWidth, explanation...)
        for _, explanationLine := range wrapped {
                if explanationLine != "" {
                        l.out.Write("\t")
@@ -114,6 +123,10 @@
                return
        }
 
+       if l.Opts.ShowSource {
+               l.out.Separate()
+       }
+
        if l.errors != 0 || l.warnings != 0 {
                num := func(n int, singular, plural string) string {
                        if n == 0 {
@@ -187,12 +200,13 @@
        }
 
        if l.Opts.ShowSource {
+               if !l.IsAutofix() && line != l.prevLine && level != Fatal {
+                       l.out.Separate()
+               }
                l.showSource(line)
-               l.Logf(level, filename, linenos, format, msg)
-               l.out.Separate()
-       } else {
-               l.Logf(level, filename, linenos, format, msg)
        }
+
+       l.Logf(level, filename, linenos, format, msg)
 }
 
 func (l *Logger) showSource(line *Line) {
@@ -200,6 +214,13 @@
                return
        }
 
+       if !l.IsAutofix() {
+               if line == l.prevLine {
+                       return
+               }
+               l.prevLine = line
+       }
+
        out := l.out
        writeLine := func(prefix, line string) {
                out.Write(prefix)
@@ -229,6 +250,9 @@
                }
        }
 
+       if !l.IsAutofix() {
+               l.out.Separate()
+       }
        if line.autofix != nil {
                for _, before := range line.autofix.linesBefore {
                        writeLine("+\t", before)
@@ -240,6 +264,9 @@
        } else {
                printDiff(line.raw)
        }
+       if l.IsAutofix() {
+               l.out.Separate()
+       }
 }
 
 func (l *Logger) Logf(level *LogLevel, filename, lineno, format, msg string) {
@@ -324,7 +351,7 @@
 }
 
 func NewSeparatorWriter(out io.Writer) *SeparatorWriter {
-       return &SeparatorWriter{out: out}
+       return &SeparatorWriter{out: out, state: 3}
 }
 
 func (wr *SeparatorWriter) WriteLine(text string) {
@@ -339,11 +366,10 @@
 }
 
 // Separate remembers to output an empty line before the next character.
-// If the writer is currently in the middle of a line, that line is terminated immediately.
+//
+// The writer must not be in the middle of a line.
 func (wr *SeparatorWriter) Separate() {
-       if wr.state == 1 {
-               wr.write('\n')
-       }
+       assert(wr.state != 1)
        if wr.state < 2 {
                wr.state = 2
        }
diff -r 2f522f4f5ad7 -r ae2b2c53ce7d pkgtools/pkglint/files/logging_test.go
--- a/pkgtools/pkglint/files/logging_test.go    Sun Sep 08 21:01:57 2019 +0000
+++ b/pkgtools/pkglint/files/logging_test.go    Sun Sep 08 22:47:47 2019 +0000
@@ -206,9 +206,107 @@
                "",
                ">\tThe third line",
                "WARN: ~/DESCR:3: Dummy warning.",
+               "WARN: ~/DESCR:3: Using \"third\" is deprecated.")
+}
+
+func (s *Suite) Test_Logger__show_source_with_explanation(c *check.C) {
+       t := s.Init(c)
+
+       t.SetUpCommandLine("--source", "--explain")
+       lines := t.SetUpFileLines("DESCR",
+               "The first line",
+               "The second line",
+               "The third line")
+
+       fix := lines.Lines[1].Autofix()
+       fix.Warnf("Using \"second\" is deprecated.")
+       fix.Explain("Explanation 1.")
+       fix.Replace("second", "silver medal")
+       fix.Apply()
+



Home | Main Index | Thread Index | Old Index