aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/macabu/inamedparam/inamedparam.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/macabu/inamedparam/inamedparam.go')
-rw-r--r--vendor/github.com/macabu/inamedparam/inamedparam.go33
1 files changed, 30 insertions, 3 deletions
diff --git a/vendor/github.com/macabu/inamedparam/inamedparam.go b/vendor/github.com/macabu/inamedparam/inamedparam.go
index 433e04e5b..8ba7fe188 100644
--- a/vendor/github.com/macabu/inamedparam/inamedparam.go
+++ b/vendor/github.com/macabu/inamedparam/inamedparam.go
@@ -1,6 +1,7 @@
package inamedparam
import (
+ "flag"
"go/ast"
"golang.org/x/tools/go/analysis"
@@ -8,15 +9,30 @@ import (
"golang.org/x/tools/go/ast/inspector"
)
+const (
+ analyzerName = "inamedparam"
+
+ flagSkipSingleParam = "skip-single-param"
+)
+
var Analyzer = &analysis.Analyzer{
- Name: "inamedparam",
- Doc: "reports interfaces with unnamed method parameters",
- Run: run,
+ Name: analyzerName,
+ Doc: "reports interfaces with unnamed method parameters",
+ Run: run,
+ Flags: flags(),
Requires: []*analysis.Analyzer{
inspect.Analyzer,
},
}
+func flags() flag.FlagSet {
+ flags := flag.NewFlagSet(analyzerName, flag.ExitOnError)
+
+ flags.Bool(flagSkipSingleParam, false, "skip interface methods with a single unnamed parameter")
+
+ return *flags
+}
+
func run(pass *analysis.Pass) (interface{}, error) {
inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
@@ -24,6 +40,8 @@ func run(pass *analysis.Pass) (interface{}, error) {
&ast.InterfaceType{},
}
+ skipSingleParam := pass.Analyzer.Flags.Lookup(flagSkipSingleParam).Value.(flag.Getter).Get().(bool)
+
inspect.Preorder(types, func(n ast.Node) {
interfaceType, ok := n.(*ast.InterfaceType)
if !ok || interfaceType == nil || interfaceType.Methods == nil {
@@ -36,8 +54,17 @@ func run(pass *analysis.Pass) (interface{}, error) {
continue
}
+ // Improvement: add test case to reproduce this. Help wanted.
+ if len(method.Names) == 0 {
+ continue
+ }
+
methodName := method.Names[0].Name
+ if skipSingleParam && len(interfaceFunc.Params.List) == 1 {
+ continue
+ }
+
for _, param := range interfaceFunc.Params.List {
if param.Names == nil {
var builtParamType string