aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/ssgreg
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-09-15 18:05:35 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-09-15 19:34:30 +0200
commit712de1c63d9db97c81af68cd0dc4372c53d2e57a (patch)
treeae1761fec52c3ae4ddd003a4130ddbda8d0a2d69 /vendor/github.com/ssgreg
parent298a69c38dd5c8a9bbd7a022e88f4ddbcf885e16 (diff)
vendor/github.com/golangci/golangci-lint: update to v1.31
Diffstat (limited to 'vendor/github.com/ssgreg')
-rw-r--r--vendor/github.com/ssgreg/nlreturn/v2/LICENSE21
-rw-r--r--vendor/github.com/ssgreg/nlreturn/v2/pkg/nlreturn/nlreturn.go86
2 files changed, 107 insertions, 0 deletions
diff --git a/vendor/github.com/ssgreg/nlreturn/v2/LICENSE b/vendor/github.com/ssgreg/nlreturn/v2/LICENSE
new file mode 100644
index 000000000..0a5b4d106
--- /dev/null
+++ b/vendor/github.com/ssgreg/nlreturn/v2/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Grigory Zubankov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/ssgreg/nlreturn/v2/pkg/nlreturn/nlreturn.go b/vendor/github.com/ssgreg/nlreturn/v2/pkg/nlreturn/nlreturn.go
new file mode 100644
index 000000000..52318ccfd
--- /dev/null
+++ b/vendor/github.com/ssgreg/nlreturn/v2/pkg/nlreturn/nlreturn.go
@@ -0,0 +1,86 @@
+package nlreturn
+
+import (
+ "fmt"
+ "go/ast"
+ "go/token"
+
+ "golang.org/x/tools/go/analysis"
+)
+
+const (
+ linterName = "nlreturn"
+ linterDoc = `Linter requires a new line before return and branch statements except when the return is alone inside a statement group (such as an if statement) to increase code clarity.`
+)
+
+// NewAnalyzer returns a new nlreturn analyzer.
+func NewAnalyzer() *analysis.Analyzer {
+ return &analysis.Analyzer{
+ Name: linterName,
+ Doc: linterDoc,
+ Run: run,
+ }
+}
+
+func run(pass *analysis.Pass) (interface{}, error) {
+ for _, f := range pass.Files {
+ ast.Inspect(f, func(node ast.Node) bool {
+ switch c := node.(type) {
+ case *ast.CaseClause:
+ inspectBlock(pass, c.Body)
+ case *ast.CommClause:
+ inspectBlock(pass, c.Body)
+ case *ast.BlockStmt:
+ inspectBlock(pass, c.List)
+ }
+
+ return true
+ })
+ }
+
+ return nil, nil
+}
+
+func inspectBlock(pass *analysis.Pass, block []ast.Stmt) {
+ for i, stmt := range block {
+ switch stmt.(type) {
+ case *ast.BranchStmt, *ast.ReturnStmt:
+ if i == 0 {
+ return
+ }
+
+ if line(pass, stmt.Pos())-line(pass, block[i-1].End()) <= 1 {
+ pass.Report(analysis.Diagnostic{
+ Pos: stmt.Pos(),
+ Message: fmt.Sprintf("%s with no blank line before", name(stmt)),
+ SuggestedFixes: []analysis.SuggestedFix{
+ {
+ TextEdits: []analysis.TextEdit{
+ {
+ Pos: stmt.Pos(),
+ NewText: []byte("\n"),
+ End: stmt.Pos(),
+ },
+ },
+ },
+ },
+ })
+ }
+ }
+ }
+}
+
+func name(stmt ast.Stmt) string {
+ switch c := stmt.(type) {
+ case *ast.BranchStmt:
+ return c.Tok.String()
+ case *ast.ReturnStmt:
+ return "return"
+ default:
+ return "unknown"
+ }
+}
+
+func line(pass *analysis.Pass, pos token.Pos) int {
+ return pass.Fset.Position(pos).Line
+}