aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matoous
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2023-02-22 22:16:50 +0100
committerTaras Madan <tarasmadan@google.com>2023-02-24 12:47:23 +0100
commit4165372ec8fd142475a4e35fd0cf4f8042132208 (patch)
tree21cd62211b4dd80bee469054c5b65db77342333c /vendor/github.com/matoous
parent2b3ed821a493b8936c8bacfa6f8b4f1c90a00855 (diff)
dependencies: update
set go min requirements to 1.19 update dependencies update vendor
Diffstat (limited to 'vendor/github.com/matoous')
-rw-r--r--vendor/github.com/matoous/godox/go.mod5
-rw-r--r--vendor/github.com/matoous/godox/go.sum8
-rw-r--r--vendor/github.com/matoous/godox/godox.go101
3 files changed, 68 insertions, 46 deletions
diff --git a/vendor/github.com/matoous/godox/go.mod b/vendor/github.com/matoous/godox/go.mod
deleted file mode 100644
index 69b34f0e9..000000000
--- a/vendor/github.com/matoous/godox/go.mod
+++ /dev/null
@@ -1,5 +0,0 @@
-module github.com/matoous/godox
-
-go 1.13
-
-require golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578
diff --git a/vendor/github.com/matoous/godox/go.sum b/vendor/github.com/matoous/godox/go.sum
deleted file mode 100644
index 970cb25dd..000000000
--- a/vendor/github.com/matoous/godox/go.sum
+++ /dev/null
@@ -1,8 +0,0 @@
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578 h1:f0Gfd654rnnfXT1+BK1YHPTS1qQdKrPIaGQwWxNE44k=
-golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/vendor/github.com/matoous/godox/godox.go b/vendor/github.com/matoous/godox/godox.go
index 6d7104b09..3903525c8 100644
--- a/vendor/github.com/matoous/godox/godox.go
+++ b/vendor/github.com/matoous/godox/godox.go
@@ -8,31 +8,23 @@ import (
"go/token"
"path/filepath"
"strings"
+ "unicode"
+ "unicode/utf8"
)
-var (
- defaultKeywords = []string{"TODO", "BUG", "FIXME"}
-)
+var defaultKeywords = []string{"TODO", "BUG", "FIXME"}
-// Message contains a message and position
+// Message contains a message and position.
type Message struct {
Pos token.Position
Message string
}
-func getMessages(c *ast.Comment, fset *token.FileSet, keywords []string) []Message {
- commentText := c.Text
- switch commentText[1] {
- case '/':
- commentText = commentText[2:]
- if len(commentText) > 0 && commentText[0] == ' ' {
- commentText = commentText[1:]
- }
- case '*':
- commentText = commentText[2 : len(commentText)-2]
- }
+func getMessages(comment *ast.Comment, fset *token.FileSet, keywords []string) []Message {
+ commentText := extractComment(comment.Text)
b := bufio.NewReader(bytes.NewBufferString(commentText))
+
var comments []Message
for lineNum := 0; ; lineNum++ {
@@ -40,45 +32,88 @@ func getMessages(c *ast.Comment, fset *token.FileSet, keywords []string) []Messa
if err != nil {
break
}
+
+ const minimumSize = 4
+
sComment := bytes.TrimSpace(line)
- if len(sComment) < 4 {
+ if len(sComment) < minimumSize {
continue
}
+
for _, kw := range keywords {
- if bytes.EqualFold([]byte(kw), sComment[0:len(kw)]) {
- pos := fset.Position(c.Pos())
- // trim the comment
- if len(sComment) > 40 {
- sComment = []byte(fmt.Sprintf("%.40s...", sComment))
- }
- comments = append(comments, Message{
- Pos: pos,
- Message: fmt.Sprintf(
- "%s:%d: Line contains %s: \"%s\"",
- filepath.Join(pos.Filename),
- pos.Line+lineNum,
- strings.Join(keywords, "/"),
- sComment,
- ),
- })
- break
+ if lkw := len(kw); !(bytes.EqualFold([]byte(kw), sComment[0:lkw]) &&
+ !hasAlphanumRuneAdjacent(sComment[lkw:])) {
+ continue
+ }
+
+ pos := fset.Position(comment.Pos())
+ // trim the comment
+ const commentLimit = 40
+ if len(sComment) > commentLimit {
+ sComment = []byte(fmt.Sprintf("%.40s...", sComment))
}
+
+ comments = append(comments, Message{
+ Pos: pos,
+ Message: fmt.Sprintf(
+ "%s:%d: Line contains %s: %q",
+ filepath.Clean(pos.Filename),
+ pos.Line+lineNum,
+ strings.Join(keywords, "/"),
+ sComment,
+ ),
+ })
+
+ break
}
}
+
return comments
}
+func extractComment(commentText string) string {
+ switch commentText[1] {
+ case '/':
+ commentText = commentText[2:]
+ if len(commentText) > 0 && commentText[0] == ' ' {
+ commentText = commentText[1:]
+ }
+ case '*':
+ commentText = commentText[2 : len(commentText)-2]
+ }
+
+ return commentText
+}
+
+func hasAlphanumRuneAdjacent(rest []byte) bool {
+ if len(rest) == 0 {
+ return false
+ }
+
+ switch rest[0] { // most common cases
+ case ':', ' ', '(':
+ return false
+ }
+
+ r, _ := utf8.DecodeRune(rest)
+
+ return unicode.IsLetter(r) || unicode.IsNumber(r) || unicode.IsDigit(r)
+}
+
// Run runs the godox linter on given file.
// Godox searches for comments starting with given keywords and reports them.
func Run(file *ast.File, fset *token.FileSet, keywords ...string) []Message {
if len(keywords) == 0 {
keywords = defaultKeywords
}
+
var messages []Message
+
for _, c := range file.Comments {
for _, ci := range c.List {
messages = append(messages, getMessages(ci, fset, keywords)...)
}
}
+
return messages
}