1
1
package tenv
2
2
3
3
import (
4
- "fmt"
5
4
"go/ast"
6
5
"go/token"
7
6
"go/types"
@@ -73,40 +72,33 @@ func checkStmts(pass *analysis.Pass, stmts []ast.Stmt, funcName, argName string)
73
72
for _ , stmt := range stmts {
74
73
switch stmt := stmt .(type ) {
75
74
case * ast.ExprStmt :
76
- if ! checkExprStmt (pass , stmt , funcName , argName ) {
77
- continue
78
- }
75
+ checkExprStmt (pass , stmt , funcName , argName )
79
76
case * ast.IfStmt :
80
- if ! checkIfStmt (pass , stmt , funcName , argName ) {
81
- continue
82
- }
77
+ checkIfStmt (pass , stmt , funcName , argName )
83
78
case * ast.AssignStmt :
84
- if ! checkAssignStmt (pass , stmt , funcName , argName ) {
85
- continue
86
- }
79
+ checkAssignStmt (pass , stmt , funcName , argName )
87
80
case * ast.ForStmt :
88
81
checkForStmt (pass , stmt , funcName , argName )
89
82
}
90
83
}
91
84
}
92
85
93
- func checkExprStmt (pass * analysis.Pass , stmt * ast.ExprStmt , funcName , argName string ) bool {
86
+ func checkExprStmt (pass * analysis.Pass , stmt * ast.ExprStmt , funcName , argName string ) {
94
87
callExpr , ok := stmt .X .(* ast.CallExpr )
95
88
if ! ok {
96
- return false
89
+ return
97
90
}
98
91
checkArgs (pass , callExpr .Args , funcName , argName )
99
92
ident , ok := callExpr .Fun .(* ast.Ident )
100
93
if ok {
101
94
obj := pass .TypesInfo .ObjectOf (ident )
102
- return checkObj (pass , obj , stmt .Pos (), funcName , argName )
95
+ checkObj (pass , obj , stmt .Pos (), funcName , argName )
103
96
}
104
97
fun , ok := callExpr .Fun .(* ast.SelectorExpr )
105
98
if ok {
106
99
obj := pass .TypesInfo .ObjectOf (fun .Sel )
107
- return checkObj (pass , obj , stmt .Pos (), funcName , argName )
100
+ checkObj (pass , obj , stmt .Pos (), funcName , argName )
108
101
}
109
- return false
110
102
}
111
103
112
104
func checkArgs (pass * analysis.Pass , args []ast.Expr , funcName , argName string ) {
@@ -128,47 +120,45 @@ func checkArgs(pass *analysis.Pass, args []ast.Expr, funcName, argName string) {
128
120
}
129
121
}
130
122
131
- func checkIfStmt (pass * analysis.Pass , stmt * ast.IfStmt , funcName , argName string ) bool {
123
+ func checkIfStmt (pass * analysis.Pass , stmt * ast.IfStmt , funcName , argName string ) {
132
124
assignStmt , ok := stmt .Init .(* ast.AssignStmt )
133
125
if ! ok {
134
- return false
126
+ return
135
127
}
136
128
rhs , ok := assignStmt .Rhs [0 ].(* ast.CallExpr )
137
129
if ! ok {
138
- return false
130
+ return
139
131
}
140
132
ident , ok := rhs .Fun .(* ast.Ident )
141
133
if ok {
142
134
obj := pass .TypesInfo .ObjectOf (ident )
143
- return checkObj (pass , obj , stmt .Pos (), funcName , argName )
135
+ checkObj (pass , obj , stmt .Pos (), funcName , argName )
144
136
}
145
137
fun , ok := rhs .Fun .(* ast.SelectorExpr )
146
138
if ok {
147
139
obj := pass .TypesInfo .ObjectOf (fun .Sel )
148
- return checkObj (pass , obj , stmt .Pos (), funcName , argName )
140
+ checkObj (pass , obj , stmt .Pos (), funcName , argName )
149
141
}
150
- return false
151
142
}
152
143
153
- func checkAssignStmt (pass * analysis.Pass , stmt * ast.AssignStmt , funcName , argName string ) bool {
144
+ func checkAssignStmt (pass * analysis.Pass , stmt * ast.AssignStmt , funcName , argName string ) {
154
145
rhs , ok := stmt .Rhs [0 ].(* ast.CallExpr )
155
146
if ! ok {
156
- return false
147
+ return
157
148
}
158
149
ident , ok := rhs .Fun .(* ast.Ident )
159
150
if ok {
160
151
obj := pass .TypesInfo .ObjectOf (ident )
161
- return checkObj (pass , obj , stmt .Pos (), funcName , argName )
152
+ checkObj (pass , obj , stmt .Pos (), funcName , argName )
162
153
}
163
154
fun , ok := rhs .Fun .(* ast.SelectorExpr )
164
155
if ok {
165
156
obj := pass .TypesInfo .ObjectOf (fun .Sel )
166
- return checkObj (pass , obj , stmt .Pos (), funcName , argName )
157
+ checkObj (pass , obj , stmt .Pos (), funcName , argName )
167
158
}
168
- return false
169
159
}
170
160
171
- func checkObj (pass * analysis.Pass , obj types.Object , pos token.Pos , funcName , argName string ) bool {
161
+ func checkObj (pass * analysis.Pass , obj types.Object , pos token.Pos , funcName , argName string ) {
172
162
// For built-in objects, obj.Pkg() returns nil.
173
163
var pkgPrefix string
174
164
if pkg := obj .Pkg (); pkg != nil {
@@ -180,10 +170,8 @@ func checkObj(pass *analysis.Pass, obj types.Object, pos token.Pos, funcName, ar
180
170
if argName == "" {
181
171
argName = "testing"
182
172
}
183
- fmt .Println (argName , funcName )
184
173
pass .Reportf (pos , "os.Setenv() can be replaced by `%s.Setenv()` in %s" , argName , funcName )
185
174
}
186
- return true
187
175
}
188
176
189
177
func checkForStmt (pass * analysis.Pass , stmt * ast.ForStmt , funcName , argName string ) {
0 commit comments