diff options
| author | Taras Madan <tarasmadan@google.com> | 2022-09-05 14:27:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-05 12:27:54 +0000 |
| commit | b2f2446b46bf02821d90ebedadae2bf7ae0e880e (patch) | |
| tree | 923cf42842918d6bebca1d6bbdc08abed54d274d /vendor/github.com/ashanbrown/forbidigo | |
| parent | e6654faff4bcca4be92e9a8596fd4b77f747c39e (diff) | |
go.mod, vendor: update (#3358)
* go.mod, vendor: remove unnecessary dependencies
Commands:
1. go mod tidy
2. go mod vendor
* go.mod, vendor: update cloud.google.com/go
Commands:
1. go get -u cloud.google.com/go
2. go mod tidy
3. go mod vendor
* go.mod, vendor: update cloud.google.com/*
Commands:
1. go get -u cloud.google.com/storage cloud.google.com/logging
2. go mod tidy
3. go mod vendor
* go.mod, .golangci.yml, vendor: update *lint*
Commands:
1. go get -u golang.org/x/tools github.com/golangci/golangci-lint@v1.47.0
2. go mod tidy
3. go mod vendor
4. edit .golangci.yml to suppress new errors (resolved in the same PR later)
* all: fix lint errors
hash.go: copy() recommended by gosimple
parse.go: ent is never nil
verifier.go: signal.Notify() with unbuffered channel is bad. Have no idea why.
* .golangci.yml: adjust godot rules
check-all is deprecated, but still work
if you're hesitating too - I'll remove this commit
Diffstat (limited to 'vendor/github.com/ashanbrown/forbidigo')
| -rw-r--r-- | vendor/github.com/ashanbrown/forbidigo/forbidigo/forbidigo.go | 34 | ||||
| -rw-r--r-- | vendor/github.com/ashanbrown/forbidigo/forbidigo/patterns.go | 43 |
2 files changed, 63 insertions, 14 deletions
diff --git a/vendor/github.com/ashanbrown/forbidigo/forbidigo/forbidigo.go b/vendor/github.com/ashanbrown/forbidigo/forbidigo/forbidigo.go index 794a43ad2..17740faa7 100644 --- a/vendor/github.com/ashanbrown/forbidigo/forbidigo/forbidigo.go +++ b/vendor/github.com/ashanbrown/forbidigo/forbidigo/forbidigo.go @@ -24,10 +24,15 @@ type UsedIssue struct { identifier string pattern string position token.Position + customMsg string } func (a UsedIssue) Details() string { - return fmt.Sprintf("use of `%s` forbidden by pattern `%s`", a.identifier, a.pattern) + explanation := fmt.Sprintf(` because %q`, a.customMsg) + if a.customMsg == "" { + explanation = fmt.Sprintf(" by pattern `%s`", a.pattern) + } + return fmt.Sprintf("use of `%s` forbidden", a.identifier) + explanation } func (a UsedIssue) Position() token.Position { @@ -36,17 +41,17 @@ func (a UsedIssue) Position() token.Position { func (a UsedIssue) String() string { return toString(a) } -func toString(i Issue) string { +func toString(i UsedIssue) string { return fmt.Sprintf("%s at %s", i.Details(), i.Position()) } type Linter struct { cfg config - patterns []*regexp.Regexp + patterns []*pattern } func DefaultPatterns() []string { - return []string{`^fmt\.Print(|f|ln)$`} + return []string{`^(fmt\.Print(|f|ln)|print|println)$`} } //go:generate go-options config @@ -65,13 +70,13 @@ func NewLinter(patterns []string, options ...Option) (*Linter, error) { if len(patterns) == 0 { patterns = DefaultPatterns() } - compiledPatterns := make([]*regexp.Regexp, 0, len(patterns)) - for _, p := range patterns { - re, err := regexp.Compile(p) + compiledPatterns := make([]*pattern, 0, len(patterns)) + for _, ptrn := range patterns { + p, err := parse(ptrn) if err != nil { - return nil, fmt.Errorf("unable to compile pattern `%s`: %s", p, err) + return nil, err } - compiledPatterns = append(compiledPatterns, re) + compiledPatterns = append(compiledPatterns, p) } return &Linter{ cfg: cfg, @@ -91,7 +96,7 @@ type visitor struct { } func (l *Linter) Run(fset *token.FileSet, nodes ...ast.Node) ([]Issue, error) { - var issues []Issue // nolint:prealloc // we don't know how many there will be + var issues []Issue //nolint:prealloc // we don't know how many there will be for _, node := range nodes { var comments []*ast.CommentGroup isTestFile := false @@ -158,11 +163,12 @@ func (v *visitor) Visit(node ast.Node) ast.Visitor { return v } for _, p := range v.linter.patterns { - if p.MatchString(v.textFor(node)) && !v.permit(node) { + if p.pattern.MatchString(v.textFor(node)) && !v.permit(node) { v.issues = append(v.issues, UsedIssue{ identifier: v.textFor(node), - pattern: p.String(), + pattern: p.pattern.String(), position: v.fset.Position(node.Pos()), + customMsg: p.msg, }) } } @@ -182,10 +188,10 @@ func (v *visitor) permit(node ast.Node) bool { return false } nodePos := v.fset.Position(node.Pos()) - var nolint = regexp.MustCompile(fmt.Sprintf(`^permit:%s\b`, regexp.QuoteMeta(v.textFor(node)))) + var nolint = regexp.MustCompile(fmt.Sprintf(`^//\s?permit:%s\b`, regexp.QuoteMeta(v.textFor(node)))) for _, c := range v.comments { commentPos := v.fset.Position(c.Pos()) - if commentPos.Line == nodePos.Line && nolint.MatchString(c.Text()) { + if commentPos.Line == nodePos.Line && len(c.List) > 0 && nolint.MatchString(c.List[0].Text) { return true } } diff --git a/vendor/github.com/ashanbrown/forbidigo/forbidigo/patterns.go b/vendor/github.com/ashanbrown/forbidigo/forbidigo/patterns.go new file mode 100644 index 000000000..c23648822 --- /dev/null +++ b/vendor/github.com/ashanbrown/forbidigo/forbidigo/patterns.go @@ -0,0 +1,43 @@ +package forbidigo + +import ( + "fmt" + "regexp" + "regexp/syntax" + "strings" +) + +type pattern struct { + pattern *regexp.Regexp + msg string +} + +func parse(ptrn string) (*pattern, error) { + ptrnRe, err := regexp.Compile(ptrn) + if err != nil { + return nil, fmt.Errorf("unable to compile pattern `%s`: %s", ptrn, err) + } + re, err := syntax.Parse(ptrn, syntax.Perl) + if err != nil { + return nil, fmt.Errorf("unable to parse pattern `%s`: %s", ptrn, err) + } + msg := extractComment(re) + return &pattern{pattern: ptrnRe, msg: msg}, nil +} + +// Traverse the leaf submatches in the regex tree and extract a comment, if any +// is present. +func extractComment(re *syntax.Regexp) string { + for _, sub := range re.Sub { + if len(sub.Sub) > 0 { + if comment := extractComment(sub); comment != "" { + return comment + } + } + subStr := sub.String() + if strings.HasPrefix(subStr, "#") { + return strings.TrimSpace(strings.TrimPrefix(subStr, "#")) + } + } + return "" +} |
