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.6.3
details: https://anonhg.NetBSD.org/pkgsrc/rev/27e7ae1c4ead
branches: trunk
changeset: 313602:27e7ae1c4ead
user: rillig <rillig%pkgsrc.org@localhost>
date: Wed Oct 03 22:27:53 2018 +0000
description:
pkgtools/pkglint: Update to 5.6.3
Changes since 5.6.2:
* Add check for version patterns 1.5*, which should rather be 1.5.*
* Re-enable check for "set -e" and commands that may silently fail
because of missing error checking
* Lots of internal clean-up and tests
diffstat:
pkgtools/pkglint/Makefile | 4 +-
pkgtools/pkglint/files/alternatives.go | 7 +-
pkgtools/pkglint/files/alternatives_test.go | 23 +-
pkgtools/pkglint/files/autofix.go | 15 +-
pkgtools/pkglint/files/autofix_test.go | 68 +-
pkgtools/pkglint/files/buildlink3_test.go | 37 +-
pkgtools/pkglint/files/category_test.go | 16 +-
pkgtools/pkglint/files/check_test.go | 115 +++-
pkgtools/pkglint/files/distinfo_test.go | 26 +-
pkgtools/pkglint/files/expecter.go | 2 +-
pkgtools/pkglint/files/files.go | 9 +-
pkgtools/pkglint/files/files_test.go | 6 +-
pkgtools/pkglint/files/fuzzer_test.go | 90 +++
pkgtools/pkglint/files/getopt/getopt_test.go | 40 +
pkgtools/pkglint/files/licenses.go | 2 +-
pkgtools/pkglint/files/licenses/licenses.go | 9 +-
pkgtools/pkglint/files/licenses/licenses_test.go | 28 +-
pkgtools/pkglint/files/licenses_test.go | 29 +-
pkgtools/pkglint/files/line.go | 3 +-
pkgtools/pkglint/files/linechecker.go | 34 +-
pkgtools/pkglint/files/linechecker_test.go | 24 +-
pkgtools/pkglint/files/logging.go | 13 +-
pkgtools/pkglint/files/logging_test.go | 28 +-
pkgtools/pkglint/files/mkline.go | 57 +-
pkgtools/pkglint/files/mkline_test.go | 68 +-
pkgtools/pkglint/files/mklinechecker.go | 110 +---
pkgtools/pkglint/files/mklinechecker_test.go | 257 ++++++++-
pkgtools/pkglint/files/mklines.go | 23 +-
pkgtools/pkglint/files/mklines_test.go | 10 +-
pkgtools/pkglint/files/mkparser.go | 3 +
pkgtools/pkglint/files/mkparser_test.go | 17 +-
pkgtools/pkglint/files/mkshparser_test.go | 48 +-
pkgtools/pkglint/files/mkshtypes.go | 52 +-
pkgtools/pkglint/files/mkshwalker.go | 350 +++++++---
pkgtools/pkglint/files/mkshwalker_test.go | 44 +-
pkgtools/pkglint/files/options.go | 9 +-
pkgtools/pkglint/files/options_test.go | 12 +-
pkgtools/pkglint/files/package.go | 182 ++---
pkgtools/pkglint/files/package_test.go | 435 ++++++++++++++-
pkgtools/pkglint/files/parser.go | 2 +-
pkgtools/pkglint/files/patches_test.go | 6 +-
pkgtools/pkglint/files/pkglint.go | 107 ++-
pkgtools/pkglint/files/pkglint_test.go | 307 ++++++++--
pkgtools/pkglint/files/pkgsrc.go | 67 +-
pkgtools/pkglint/files/pkgsrc_test.go | 181 ++++-
pkgtools/pkglint/files/plist.go | 3 +-
pkgtools/pkglint/files/plist_test.go | 13 +-
pkgtools/pkglint/files/regex/regex.go | 96 +-
pkgtools/pkglint/files/shell.go | 216 ++++--
pkgtools/pkglint/files/shell_test.go | 380 +++++++++++-
pkgtools/pkglint/files/shtokenizer.go | 40 +-
pkgtools/pkglint/files/shtokenizer_test.go | 657 ++++++++++++---------
pkgtools/pkglint/files/shtypes.go | 40 +-
pkgtools/pkglint/files/substcontext_test.go | 27 +-
pkgtools/pkglint/files/testnames_test.go | 130 ++++
pkgtools/pkglint/files/textproc/prefixreplacer.go | 11 +-
pkgtools/pkglint/files/tools.go | 25 +-
pkgtools/pkglint/files/tools_test.go | 6 +-
pkgtools/pkglint/files/toplevel_test.go | 10 +-
pkgtools/pkglint/files/util.go | 231 ++++++-
pkgtools/pkglint/files/util_test.go | 134 +++-
pkgtools/pkglint/files/vardefs.go | 419 +++++++------
pkgtools/pkglint/files/vardefs_test.go | 28 +-
pkgtools/pkglint/files/vartype.go | 2 +-
pkgtools/pkglint/files/vartype_test.go | 6 +-
pkgtools/pkglint/files/vartypecheck.go | 50 +-
pkgtools/pkglint/files/vartypecheck_test.go | 20 +-
pkgtools/pkglint/select.mk | 4 +-
68 files changed, 3931 insertions(+), 1592 deletions(-)
diffs (truncated from 9533 to 300 lines):
diff -r 194ffbfb303b -r 27e7ae1c4ead pkgtools/pkglint/Makefile
--- a/pkgtools/pkglint/Makefile Wed Oct 03 22:27:18 2018 +0000
+++ b/pkgtools/pkglint/Makefile Wed Oct 03 22:27:53 2018 +0000
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.548 2018/09/05 17:56:22 rillig Exp $
+# $NetBSD: Makefile,v 1.549 2018/10/03 22:27:53 rillig Exp $
-PKGNAME= pkglint-5.6.2
+PKGNAME= pkglint-5.6.3
DISTFILES= # none
CATEGORIES= pkgtools
diff -r 194ffbfb303b -r 27e7ae1c4ead pkgtools/pkglint/files/alternatives.go
--- a/pkgtools/pkglint/files/alternatives.go Wed Oct 03 22:27:18 2018 +0000
+++ b/pkgtools/pkglint/files/alternatives.go Wed Oct 03 22:27:53 2018 +0000
@@ -1,9 +1,6 @@
package main
-import (
- "netbsd.org/pkglint/regex"
- "strings"
-)
+import "strings"
func CheckfileAlternatives(filename string, plistFiles map[string]bool) {
lines := Load(filename, NotEmpty|LogErrors)
@@ -19,7 +16,7 @@
}
relImplementation := strings.Replace(implementation, "@PREFIX@/", "", 1)
- plistName := regex.Compile(`@(\w+)@`).ReplaceAllString(relImplementation, "${$1}")
+ plistName := replaceAll(relImplementation, `@(\w+)@`, "${$1}")
if !plistFiles[plistName] && !G.Pkg.vars.Defined("ALTERNATIVES_SRC") {
if plistName != implementation {
line.Errorf("Alternative implementation %q must appear in the PLIST as %q.", implementation, plistName)
diff -r 194ffbfb303b -r 27e7ae1c4ead pkgtools/pkglint/files/alternatives_test.go
--- a/pkgtools/pkglint/files/alternatives_test.go Wed Oct 03 22:27:18 2018 +0000
+++ b/pkgtools/pkglint/files/alternatives_test.go Wed Oct 03 22:27:53 2018 +0000
@@ -2,25 +2,30 @@
import "gopkg.in/check.v1"
-func (s *Suite) Test_Alternatives_PLIST(c *check.C) {
+func (s *Suite) Test_CheckfileAlternatives__PLIST(c *check.C) {
t := s.Init(c)
+ t.SetupPackage("category/package")
t.Chdir("category/package")
- t.SetupFileLines("ALTERNATIVES",
+ t.CreateFileLines("ALTERNATIVES",
"sbin/sendmail @PREFIX@/sbin/sendmail.postfix@POSTFIXVER@",
"sbin/sendmail @PREFIX@/sbin/sendmail.exim@EXIMVER@",
"bin/echo bin/gnu-echo",
"bin/editor bin/vim -e",
"invalid")
+ t.CreateFileLines("PLIST",
+ PlistRcsID,
+ "bin/echo",
+ "bin/vim",
+ "sbin/sendmail.exim${EXIMVER}")
- G.Pkg = NewPackage(".")
- G.Pkg.PlistFiles["bin/echo"] = true
- G.Pkg.PlistFiles["bin/vim"] = true
- G.Pkg.PlistFiles["sbin/sendmail.exim${EXIMVER}"] = true
+ G.CheckDirent(".")
- CheckfileAlternatives("ALTERNATIVES", G.Pkg.PlistFiles)
-
+ // TODO: Remove redundant diagnostics.
t.CheckOutputLines(
+ "NOTE: ALTERNATIVES:1: @PREFIX@/ can be omitted from the file name.",
+ "NOTE: ALTERNATIVES:2: @PREFIX@/ can be omitted from the file name.",
+ "ERROR: ALTERNATIVES:5: Invalid ALTERNATIVES line \"invalid\".",
"ERROR: ALTERNATIVES:1: Alternative implementation \"@PREFIX@/sbin/sendmail.postfix@POSTFIXVER@\" must appear in the PLIST as \"sbin/sendmail.postfix${POSTFIXVER}\".",
"NOTE: ALTERNATIVES:1: @PREFIX@/ can be omitted from the file name.",
"NOTE: ALTERNATIVES:2: @PREFIX@/ can be omitted from the file name.",
@@ -33,7 +38,7 @@
t := s.Init(c)
t.Chdir("category/package")
- t.SetupFileLines("ALTERNATIVES")
+ t.CreateFileLines("ALTERNATIVES")
G.Pkg = NewPackage(".")
diff -r 194ffbfb303b -r 27e7ae1c4ead pkgtools/pkglint/files/autofix.go
--- a/pkgtools/pkglint/files/autofix.go Wed Oct 03 22:27:18 2018 +0000
+++ b/pkgtools/pkglint/files/autofix.go Wed Oct 03 22:27:53 2018 +0000
@@ -46,8 +46,9 @@
// If printAutofix or autofix is true, the fix should be done in
// memory as far as possible (e.g. changes to the text of the line).
//
-// If autofix is true, the fix should be done permanently
-// (e.g. direct changes to the file system).
+// If autofix is true, the fix should be done persistently
+// (e.g. direct changes to the file system). Except if the fix only
+// affects the current line, then SaveAutofixChanges will do that.
func (fix *Autofix) Custom(fixer func(printAutofix, autofix bool)) {
if fix.skip() {
return
@@ -104,7 +105,7 @@
return toText
}
- if replaced := regex.Compile(from).ReplaceAllStringFunc(rawLine.textnl, replace); replaced != rawLine.textnl {
+ if replaced := replaceAllFunc(rawLine.textnl, from, replace); replaced != rawLine.textnl {
if G.opts.PrintAutofix || G.opts.Autofix {
rawLine.textnl = replaced
}
@@ -134,12 +135,12 @@
}
for _, rawLine := range fix.lines[1:] {
- _, comment, space := regex.Match2(rawLine.textnl, `^(#?)([ \t]*)`)
+ _, comment, space := match2(rawLine.textnl, `^(#?)([ \t]*)`)
width := tabWidth(comment + space)
if (oldWidth == 0 || width < oldWidth) && width >= 8 && rawLine.textnl != "\n" {
oldWidth = width
}
- if !regex.Matches(space, `^\t* {0,7}$`) {
+ if !matches(space, `^\t* {0,7}$`) {
normalized = false
}
}
@@ -156,7 +157,7 @@
}
for _, rawLine := range fix.lines[1:] {
- _, comment, oldSpace := regex.Match2(rawLine.textnl, `^(#?)([ \t]*)`)
+ _, comment, oldSpace := match2(rawLine.textnl, `^(#?)([ \t]*)`)
newWidth := tabWidth(oldSpace) - oldWidth + newWidth
newSpace := strings.Repeat("\t", newWidth/8) + strings.Repeat(" ", newWidth%8)
replaced := strings.Replace(rawLine.textnl, comment+oldSpace, comment+newSpace, 1)
@@ -311,6 +312,7 @@
for _, line := range lines {
if line.autofix != nil && line.autofix.modified {
G.autofixAvailable = true
+ G.fileCache.Evict(line.Filename)
}
}
return
@@ -338,6 +340,7 @@
}
for fname := range changed {
+ G.fileCache.Evict(fname)
changedLines := changes[fname]
tmpname := fname + ".pkglint.tmp"
text := ""
diff -r 194ffbfb303b -r 27e7ae1c4ead pkgtools/pkglint/files/autofix_test.go
--- a/pkgtools/pkglint/files/autofix_test.go Wed Oct 03 22:27:18 2018 +0000
+++ b/pkgtools/pkglint/files/autofix_test.go Wed Oct 03 22:27:53 2018 +0000
@@ -7,7 +7,7 @@
"strings"
)
-func (s *Suite) Test_Autofix_ReplaceRegex(c *check.C) {
+func (s *Suite) Test_Autofix_ReplaceRegex__show_autofix(c *check.C) {
t := s.Init(c)
t.SetupCommandLine("--show-autofix")
@@ -36,7 +36,7 @@
"AUTOFIX: ~/Makefile:2: Replacing \"2\" with \"X\".")
}
-func (s *Suite) Test_Autofix_ReplaceRegex_with_autofix(c *check.C) {
+func (s *Suite) Test_Autofix_ReplaceRegex__autofix(c *check.C) {
t := s.Init(c)
t.SetupCommandLine("--autofix", "--source")
@@ -75,7 +75,7 @@
"line3")
}
-func (s *Suite) Test_Autofix_ReplaceRegex_with_show_autofix(c *check.C) {
+func (s *Suite) Test_Autofix_ReplaceRegex__show_autofix_and_source(c *check.C) {
t := s.Init(c)
t.SetupCommandLine("--show-autofix", "--source")
@@ -111,11 +111,11 @@
"+\tYXXXX")
}
-func (s *Suite) Test_autofix_MkLines(c *check.C) {
+func (s *Suite) Test_SaveAutofixChanges(c *check.C) {
t := s.Init(c)
t.SetupCommandLine("--autofix")
- t.SetupFileLines("category/basename/Makefile",
+ t.CreateFileLines("category/basename/Makefile",
"line1 := value1",
"line2 := value2",
"line3 := value3")
@@ -149,6 +149,27 @@
"XXXe3 := value3")
}
+func (s *Suite) Test_SaveAutofixChanges__no_changes_necessary(c *check.C) {
+ t := s.Init(c)
+
+ t.SetupCommandLine("--autofix")
+ lines := t.SetupFileLines("DESCR",
+ "Line 1",
+ "Line 2")
+
+ fix := lines[0].Autofix()
+ fix.Warnf("Dummy warning.")
+ fix.Replace("X", "Y")
+ fix.Apply()
+
+ // Since nothing has been effectively changed,
+ // nothing needs to be saved.
+ SaveAutofixChanges(lines)
+
+ // And therefore, no AUTOFIX action must appear in the log.
+ t.CheckOutputEmpty()
+}
+
func (s *Suite) Test_Autofix__multiple_modifications(c *check.C) {
t := s.Init(c)
@@ -255,7 +276,7 @@
"AUTOFIX: fname:1: Deleting this line.")
}
-func (s *Suite) Test_Autofix_show_source_code(c *check.C) {
+func (s *Suite) Test_Autofix__show_autofix_and_source(c *check.C) {
t := s.Init(c)
t.SetupCommandLine("--show-autofix", "--source")
@@ -319,7 +340,7 @@
// Demonstrates that the --show-autofix option only shows those diagnostics
// that would be fixed.
-func (s *Suite) Test_Autofix_suppress_unfixable_warnings(c *check.C) {
+func (s *Suite) Test_Autofix__suppress_unfixable_warnings(c *check.C) {
t := s.Init(c)
t.SetupCommandLine("--show-autofix", "--source")
@@ -328,14 +349,14 @@
"line2",
"line3")
- lines[0].Warnf("This warning is not shown since it is not automatically fixed.")
+ lines[0].Warnf("This warning is not shown since it is not part of a fix.")
fix := lines[1].Autofix()
fix.Warnf("Something's wrong here.")
fix.ReplaceRegex(`.`, "X", -1)
fix.Apply()
- fix.Warnf("The XXX marks are usually not fixed, use TODO instead.")
+ fix.Warnf("Since XXX marks are usually not fixed, use TODO instead to draw attention.")
fix.Replace("XXX", "TODO")
fix.Apply()
@@ -351,14 +372,14 @@
"-\tline2",
"+\tXXXXX",
"",
- "WARN: Makefile:2: The XXX marks are usually not fixed, use TODO instead.",
+ "WARN: Makefile:2: Since XXX marks are usually not fixed, use TODO instead to draw attention.",
"AUTOFIX: Makefile:2: Replacing \"XXX\" with \"TODO\".",
"-\tline2",
"+\tTODOXX")
}
// If an Autofix doesn't do anything it must not log any diagnostics.
-func (s *Suite) Test_Autofix_failed_replace(c *check.C) {
+func (s *Suite) Test_Autofix__noop_replace(c *check.C) {
t := s.Init(c)
line := t.NewLine("Makefile", 14, "Original text")
@@ -372,28 +393,9 @@
t.CheckOutputEmpty()
}
-func (s *Suite) Test_SaveAutofixChanges(c *check.C) {
- t := s.Init(c)
-
- t.SetupCommandLine("--autofix")
- lines := t.SetupFileLines("DESCR",
- "Line 1",
- "Line 2")
-
- fix := lines[0].Autofix()
- fix.Warnf("Dummy warning.")
- fix.Replace("X", "Y")
- fix.Apply()
-
- // Since nothing has been effectively changed,
- // nothing needs to be saved.
- SaveAutofixChanges(lines)
-
- // And therefore, no AUTOFIX action must appear in the log.
- t.CheckOutputEmpty()
-}
-
-func (s *Suite) Test_Autofix_CustomFix(c *check.C) {
Home |
Main Index |
Thread Index |
Old Index