Skip to content

Commit e909c89

Browse files
committed
fix: race condition
1 parent e262b45 commit e909c89

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

exptostd.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ type analyzer struct {
5555
constraintsPkgReplacements map[string]stdReplacement[*ast.SelectorExpr]
5656

5757
skipGoVersionDetection bool
58-
goVersion int
5958
}
6059

6160
// NewAnalyzer create a new Analyzer.
@@ -126,7 +125,7 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
126125
return nil, nil
127126
}
128127

129-
a.goVersion = getGoVersion(pass)
128+
goVersion := getGoVersion(pass)
130129

131130
nodeFilter := []ast.Node{
132131
(*ast.CallExpr)(nil),
@@ -166,15 +165,15 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
166165

167166
switch ident.Name {
168167
case pkgMaps:
169-
diagnostic, usage := a.detectPackageUsage(pass, a.mapsPkgReplacements, selExpr, ident, node, pkgExpMaps)
168+
diagnostic, usage := a.detectPackageUsage(pass, a.mapsPkgReplacements, selExpr, ident, node, pkgExpMaps, goVersion)
170169
if usage {
171170
pass.Report(diagnostic)
172171
}
173172

174173
shouldKeepExpMaps = shouldKeepExpMaps || !usage
175174

176175
case pkgSlices:
177-
diagnostic, usage := a.detectPackageUsage(pass, a.slicesPkgReplacements, selExpr, ident, node, pkgExpSlices)
176+
diagnostic, usage := a.detectPackageUsage(pass, a.slicesPkgReplacements, selExpr, ident, node, pkgExpSlices, goVersion)
178177
if usage {
179178
resultExpSlices.Diagnostics = append(resultExpSlices.Diagnostics, diagnostic)
180179
}
@@ -185,14 +184,14 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
185184
case *ast.FuncDecl:
186185
if node.Type.TypeParams != nil {
187186
for _, field := range node.Type.TypeParams.List {
188-
a.detectConstraintsUsage(pass, field.Type, resultExpConstraints)
187+
a.detectConstraintsUsage(pass, field.Type, resultExpConstraints, goVersion)
189188
}
190189
}
191190

192191
case *ast.TypeSpec:
193192
if node.TypeParams != nil {
194193
for _, field := range node.TypeParams.List {
195-
a.detectConstraintsUsage(pass, field.Type, resultExpConstraints)
194+
a.detectConstraintsUsage(pass, field.Type, resultExpConstraints, goVersion)
196195
}
197196
}
198197

@@ -204,11 +203,11 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
204203
for _, method := range interfaceType.Methods.List {
205204
switch exp := method.Type.(type) {
206205
case *ast.BinaryExpr:
207-
a.detectConstraintsUsage(pass, exp.X, resultExpConstraints)
208-
a.detectConstraintsUsage(pass, exp.Y, resultExpConstraints)
206+
a.detectConstraintsUsage(pass, exp.X, resultExpConstraints, goVersion)
207+
a.detectConstraintsUsage(pass, exp.Y, resultExpConstraints, goVersion)
209208

210209
case *ast.SelectorExpr:
211-
a.detectConstraintsUsage(pass, exp, resultExpConstraints)
210+
a.detectConstraintsUsage(pass, exp, resultExpConstraints, goVersion)
212211
}
213212
}
214213
}
@@ -235,14 +234,14 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
235234
func (a *analyzer) detectPackageUsage(pass *analysis.Pass,
236235
replacements map[string]stdReplacement[*ast.CallExpr],
237236
selExpr *ast.SelectorExpr, ident *ast.Ident, callExpr *ast.CallExpr,
238-
importPath string,
237+
importPath string, goVersion int,
239238
) (analysis.Diagnostic, bool) {
240239
rp, ok := replacements[selExpr.Sel.Name]
241240
if !ok {
242241
return analysis.Diagnostic{}, false
243242
}
244243

245-
if !a.skipGoVersionDetection && rp.MinGo > a.goVersion {
244+
if !a.skipGoVersionDetection && rp.MinGo > goVersion {
246245
return analysis.Diagnostic{}, false
247246
}
248247

@@ -267,7 +266,7 @@ func (a *analyzer) detectPackageUsage(pass *analysis.Pass,
267266
return diagnostic, true
268267
}
269268

270-
func (a *analyzer) detectConstraintsUsage(pass *analysis.Pass, expr ast.Expr, result *Result) {
269+
func (a *analyzer) detectConstraintsUsage(pass *analysis.Pass, expr ast.Expr, result *Result, goVersion int) {
271270
selExpr, ok := expr.(*ast.SelectorExpr)
272271
if !ok {
273272
return
@@ -288,7 +287,7 @@ func (a *analyzer) detectConstraintsUsage(pass *analysis.Pass, expr ast.Expr, re
288287
return
289288
}
290289

291-
if !a.skipGoVersionDetection && rp.MinGo > a.goVersion {
290+
if !a.skipGoVersionDetection && rp.MinGo > goVersion {
292291
result.shouldKeepImport = true
293292
return
294293
}

0 commit comments

Comments
 (0)