From 7c390649b7125f01a352aebf613a34e1d92d52fe Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Wed, 18 Oct 2023 11:25:04 +0300 Subject: [PATCH] fix: data-race Resolves: https://github.com/butuzov/ireturn/issues/63 --- analyzer/analyzer.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/analyzer/analyzer.go b/analyzer/analyzer.go index 3a0bf74..21e5897 100644 --- a/analyzer/analyzer.go +++ b/analyzer/analyzer.go @@ -23,6 +23,7 @@ type validator interface { type analyzer struct { once sync.Once + mu sync.RWMutex handler validator err error @@ -83,11 +84,13 @@ func (a *analyzer) run(pass *analysis.Pass) (interface{}, error) { } seen[key] = true - a.found = append(a.found, issue.ExportDiagnostic()) + a.addDiagnostic(issue.ExportDiagnostic()) } }) // 02. Printing reports. + a.mu.RLock() + defer a.mu.RUnlock() for i := range a.found { pass.Report(a.found[i]) } @@ -95,6 +98,13 @@ func (a *analyzer) run(pass *analysis.Pass) (interface{}, error) { return nil, nil } +func (a *analyzer) addDiagnostic(d analysis.Diagnostic) { + a.mu.Lock() + defer a.mu.Unlock() + + a.found = append(a.found, d) +} + func (a *analyzer) readConfiguration(fs *flag.FlagSet) { cnf, err := config.New(fs) if err != nil {