From 1b0dbb0965adf2457654c185d3bec44beb2207d7 Mon Sep 17 00:00:00 2001 From: Denis Limarev Date: Fri, 8 Mar 2024 00:18:09 +0500 Subject: [PATCH] fix: use first issue without inline on mergeLineIssues on multiplie issues (#3316) Co-authored-by: Fernandez Ludovic --- pkg/result/processors/fixer.go | 16 +++++++++------- test/testdata/configs/multiple-issues-fix.yml | 4 ++++ test/testdata/fix/in/multiple-issues-fix.go | 11 +++++++++++ test/testdata/fix/out/multiple-issues-fix.go | 11 +++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 test/testdata/configs/multiple-issues-fix.yml create mode 100644 test/testdata/fix/in/multiple-issues-fix.go create mode 100644 test/testdata/fix/out/multiple-issues-fix.go diff --git a/pkg/result/processors/fixer.go b/pkg/result/processors/fixer.go index a79a846288ee..5c6d12ac0f74 100644 --- a/pkg/result/processors/fixer.go +++ b/pkg/result/processors/fixer.go @@ -133,20 +133,22 @@ func (f Fixer) mergeLineIssues(lineNum int, lineIssues []result.Issue, origFileL // check issues first for ind := range lineIssues { - i := &lineIssues[ind] - if i.LineRange != nil { + li := &lineIssues[ind] + + if li.LineRange != nil { f.log.Infof("Line %d has multiple issues but at least one of them is ranged: %#v", lineNum, lineIssues) return &lineIssues[0] } - r := i.Replacement - if r.Inline == nil || len(r.NewLines) != 0 || r.NeedOnlyDelete { + inline := li.Replacement.Inline + + if inline == nil || len(li.Replacement.NewLines) != 0 || li.Replacement.NeedOnlyDelete { f.log.Infof("Line %d has multiple issues but at least one of them isn't inline: %#v", lineNum, lineIssues) - return &lineIssues[0] + return li } - if r.Inline.StartCol < 0 || r.Inline.Length <= 0 || r.Inline.StartCol+r.Inline.Length > len(origLine) { - f.log.Warnf("Line %d (%q) has invalid inline fix: %#v, %#v", lineNum, origLine, i, r.Inline) + if inline.StartCol < 0 || inline.Length <= 0 || inline.StartCol+inline.Length > len(origLine) { + f.log.Warnf("Line %d (%q) has invalid inline fix: %#v, %#v", lineNum, origLine, li, inline) return nil } } diff --git a/test/testdata/configs/multiple-issues-fix.yml b/test/testdata/configs/multiple-issues-fix.yml new file mode 100644 index 000000000000..451973c5a144 --- /dev/null +++ b/test/testdata/configs/multiple-issues-fix.yml @@ -0,0 +1,4 @@ +linters-settings: + gofumpt: + extra-rules: true + diff --git a/test/testdata/fix/in/multiple-issues-fix.go b/test/testdata/fix/in/multiple-issues-fix.go new file mode 100644 index 000000000000..af56df5227c0 --- /dev/null +++ b/test/testdata/fix/in/multiple-issues-fix.go @@ -0,0 +1,11 @@ +//golangcitest:args -Egocritic,gofumpt +//golangcitest:config_path testdata/configs/multiple-issues-fix.yml +//golangcitest:expected_exitcode 0 +package p + +import "fmt" + +func main() { + //standard greeting + fmt.Println("hello world") +} diff --git a/test/testdata/fix/out/multiple-issues-fix.go b/test/testdata/fix/out/multiple-issues-fix.go new file mode 100644 index 000000000000..524fb94140e8 --- /dev/null +++ b/test/testdata/fix/out/multiple-issues-fix.go @@ -0,0 +1,11 @@ +//golangcitest:args -Egocritic,gofumpt +//golangcitest:config_path testdata/configs/multiple-issues-fix.yml +//golangcitest:expected_exitcode 0 +package p + +import "fmt" + +func main() { + // standard greeting + fmt.Println("hello world") +}