aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/sivchari
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-11-11 11:41:38 +0100
committerTaras Madan <tarasmadan@google.com>2024-11-11 11:10:48 +0000
commit27e76fae2ee2d84dc7db63af1d9ed7358ba35b7a (patch)
treeed19c0e35e272b3c4cc5a2f2c595e035b2428337 /vendor/github.com/sivchari
parent621e84e063b0e15b23e17780338627c509e1b9e8 (diff)
vendor: update
Diffstat (limited to 'vendor/github.com/sivchari')
-rw-r--r--vendor/github.com/sivchari/tenv/goreleaser.yaml26
-rw-r--r--vendor/github.com/sivchari/tenv/tenv.go147
2 files changed, 89 insertions, 84 deletions
diff --git a/vendor/github.com/sivchari/tenv/goreleaser.yaml b/vendor/github.com/sivchari/tenv/goreleaser.yaml
new file mode 100644
index 000000000..56db218d7
--- /dev/null
+++ b/vendor/github.com/sivchari/tenv/goreleaser.yaml
@@ -0,0 +1,26 @@
+project_name: tenv
+
+env:
+ - GO111MODULE=on
+
+builds:
+ - id: tenv
+ main: ./cmd/tenv/main.go
+ binary: tenv
+ env:
+ - CGO_ENABLED=0
+ goos:
+ - linux
+ - darwin
+ goarch:
+ - amd64
+ - arm64
+
+archives:
+ - id: tenv
+ builds:
+ - tenv
+ name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
+ format_overrides:
+ - goos: windows
+ format: zip
diff --git a/vendor/github.com/sivchari/tenv/tenv.go b/vendor/github.com/sivchari/tenv/tenv.go
index 999c5289d..657e60e4e 100644
--- a/vendor/github.com/sivchari/tenv/tenv.go
+++ b/vendor/github.com/sivchari/tenv/tenv.go
@@ -2,6 +2,8 @@ package tenv
import (
"go/ast"
+ "go/token"
+ "go/types"
"strings"
"golang.org/x/tools/go/analysis"
@@ -51,7 +53,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
}
func checkFuncDecl(pass *analysis.Pass, f *ast.FuncDecl, fileName string) {
- argName, ok := targetRunner(f.Type.Params.List, fileName)
+ argName, ok := targetRunner(pass, f.Type.Params.List, fileName)
if !ok {
return
}
@@ -59,7 +61,7 @@ func checkFuncDecl(pass *analysis.Pass, f *ast.FuncDecl, fileName string) {
}
func checkFuncLit(pass *analysis.Pass, f *ast.FuncLit, fileName string) {
- argName, ok := targetRunner(f.Type.Params.List, fileName)
+ argName, ok := targetRunner(pass, f.Type.Params.List, fileName)
if !ok {
return
}
@@ -70,45 +72,33 @@ func checkStmts(pass *analysis.Pass, stmts []ast.Stmt, funcName, argName string)
for _, stmt := range stmts {
switch stmt := stmt.(type) {
case *ast.ExprStmt:
- if !checkExprStmt(pass, stmt, funcName, argName) {
- continue
- }
+ checkExprStmt(pass, stmt, funcName, argName)
case *ast.IfStmt:
- if !checkIfStmt(pass, stmt, funcName, argName) {
- continue
- }
+ checkIfStmt(pass, stmt, funcName, argName)
case *ast.AssignStmt:
- if !checkAssignStmt(pass, stmt, funcName, argName) {
- continue
- }
+ checkAssignStmt(pass, stmt, funcName, argName)
case *ast.ForStmt:
checkForStmt(pass, stmt, funcName, argName)
}
}
}
-func checkExprStmt(pass *analysis.Pass, stmt *ast.ExprStmt, funcName, argName string) bool {
+func checkExprStmt(pass *analysis.Pass, stmt *ast.ExprStmt, funcName, argName string) {
callExpr, ok := stmt.X.(*ast.CallExpr)
if !ok {
- return false
+ return
}
checkArgs(pass, callExpr.Args, funcName, argName)
- fun, ok := callExpr.Fun.(*ast.SelectorExpr)
- if !ok {
- return false
- }
- x, ok := fun.X.(*ast.Ident)
- if !ok {
- return false
+ ident, ok := callExpr.Fun.(*ast.Ident)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(ident)
+ checkObj(pass, obj, stmt.Pos(), funcName, argName)
}
- targetName := x.Name + "." + fun.Sel.Name
- if targetName == "os.Setenv" {
- if argName == "" {
- argName = "testing"
- }
- pass.Reportf(stmt.Pos(), "os.Setenv() can be replaced by `%s.Setenv()` in %s", argName, funcName)
+ fun, ok := callExpr.Fun.(*ast.SelectorExpr)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(fun.Sel)
+ checkObj(pass, obj, stmt.Pos(), funcName, argName)
}
- return true
}
func checkArgs(pass *analysis.Pass, args []ast.Expr, funcName, argName string) {
@@ -117,83 +107,82 @@ func checkArgs(pass *analysis.Pass, args []ast.Expr, funcName, argName string) {
if !ok {
continue
}
- fun, ok := callExpr.Fun.(*ast.SelectorExpr)
- if !ok {
- continue
- }
- x, ok := fun.X.(*ast.Ident)
- if !ok {
- continue
+ ident, ok := callExpr.Fun.(*ast.Ident)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(ident)
+ checkObj(pass, obj, arg.Pos(), funcName, argName)
}
- targetName := x.Name + "." + fun.Sel.Name
- if targetName == "os.Setenv" {
- if argName == "" {
- argName = "testing"
- }
- pass.Reportf(arg.Pos(), "os.Setenv() can be replaced by `%s.Setenv()` in %s", argName, funcName)
+ fun, ok := callExpr.Fun.(*ast.SelectorExpr)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(fun.Sel)
+ checkObj(pass, obj, arg.Pos(), funcName, argName)
}
}
}
-func checkIfStmt(pass *analysis.Pass, stmt *ast.IfStmt, funcName, argName string) bool {
+func checkIfStmt(pass *analysis.Pass, stmt *ast.IfStmt, funcName, argName string) {
assignStmt, ok := stmt.Init.(*ast.AssignStmt)
if !ok {
- return false
+ return
}
rhs, ok := assignStmt.Rhs[0].(*ast.CallExpr)
if !ok {
- return false
- }
- fun, ok := rhs.Fun.(*ast.SelectorExpr)
- if !ok {
- return false
+ return
}
- x, ok := fun.X.(*ast.Ident)
- if !ok {
- return false
+ ident, ok := rhs.Fun.(*ast.Ident)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(ident)
+ checkObj(pass, obj, stmt.Pos(), funcName, argName)
}
- targetName := x.Name + "." + fun.Sel.Name
- if targetName == "os.Setenv" {
- if argName == "" {
- argName = "testing"
- }
- pass.Reportf(stmt.Pos(), "os.Setenv() can be replaced by `%s.Setenv()` in %s", argName, funcName)
+ fun, ok := rhs.Fun.(*ast.SelectorExpr)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(fun.Sel)
+ checkObj(pass, obj, stmt.Pos(), funcName, argName)
}
- return true
}
-func checkAssignStmt(pass *analysis.Pass, stmt *ast.AssignStmt, funcName, argName string) bool {
+func checkAssignStmt(pass *analysis.Pass, stmt *ast.AssignStmt, funcName, argName string) {
rhs, ok := stmt.Rhs[0].(*ast.CallExpr)
if !ok {
- return false
+ return
+ }
+ ident, ok := rhs.Fun.(*ast.Ident)
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(ident)
+ checkObj(pass, obj, stmt.Pos(), funcName, argName)
}
fun, ok := rhs.Fun.(*ast.SelectorExpr)
- if !ok {
- return false
+ if ok {
+ obj := pass.TypesInfo.ObjectOf(fun.Sel)
+ checkObj(pass, obj, stmt.Pos(), funcName, argName)
}
- x, ok := fun.X.(*ast.Ident)
- if !ok {
- return false
+}
+
+func checkObj(pass *analysis.Pass, obj types.Object, pos token.Pos, funcName, argName string) {
+ // For built-in objects, obj.Pkg() returns nil.
+ var pkgPrefix string
+ if pkg := obj.Pkg(); pkg != nil {
+ pkgPrefix = pkg.Name() + "."
}
- targetName := x.Name + "." + fun.Sel.Name
+
+ targetName := pkgPrefix + obj.Name()
if targetName == "os.Setenv" {
if argName == "" {
argName = "testing"
}
- pass.Reportf(stmt.Pos(), "os.Setenv() can be replaced by `%s.Setenv()` in %s", argName, funcName)
+ pass.Reportf(pos, "os.Setenv() can be replaced by `%s.Setenv()` in %s", argName, funcName)
}
- return true
}
func checkForStmt(pass *analysis.Pass, stmt *ast.ForStmt, funcName, argName string) {
checkStmts(pass, stmt.Body.List, funcName, argName)
}
-func targetRunner(params []*ast.Field, fileName string) (string, bool) {
+func targetRunner(pass *analysis.Pass, params []*ast.Field, fileName string) (string, bool) {
for _, p := range params {
switch typ := p.Type.(type) {
case *ast.StarExpr:
- if checkStarExprTarget(typ) {
+ if checkStarExprTarget(pass, typ) {
if len(p.Names) == 0 {
return "", false
}
@@ -201,7 +190,7 @@ func targetRunner(params []*ast.Field, fileName string) (string, bool) {
return argName, true
}
case *ast.SelectorExpr:
- if checkSelectorExprTarget(typ) {
+ if checkSelectorExprTarget(pass, typ) {
if len(p.Names) == 0 {
return "", false
}
@@ -216,17 +205,12 @@ func targetRunner(params []*ast.Field, fileName string) (string, bool) {
return "", false
}
-func checkStarExprTarget(typ *ast.StarExpr) bool {
+func checkStarExprTarget(pass *analysis.Pass, typ *ast.StarExpr) bool {
selector, ok := typ.X.(*ast.SelectorExpr)
if !ok {
return false
}
- x, ok := selector.X.(*ast.Ident)
- if !ok {
- return false
- }
- targetName := x.Name + "." + selector.Sel.Name
- switch targetName {
+ switch pass.TypesInfo.TypeOf(selector).String() {
case "testing.T", "testing.B":
return true
default:
@@ -234,11 +218,6 @@ func checkStarExprTarget(typ *ast.StarExpr) bool {
}
}
-func checkSelectorExprTarget(typ *ast.SelectorExpr) bool {
- x, ok := typ.X.(*ast.Ident)
- if !ok {
- return false
- }
- targetName := x.Name + "." + typ.Sel.Name
- return targetName == "testing.TB"
+func checkSelectorExprTarget(pass *analysis.Pass, typ *ast.SelectorExpr) bool {
+ return pass.TypesInfo.TypeOf(typ).String() == "testing.TB"
}