Skip to content

Commit c0618b0

Browse files
authored
Merge pull request #1049 from golangci/unused-fix-mode
Fix unused in "fix" mode
2 parents c4e40f1 + 56f2b7d commit c0618b0

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

pkg/golinters/unused.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func NewUnused() *goanalysis.Linter {
3333
for _, ur := range u.Result() {
3434
p := u.ProblemObject(lintCtx.Packages[0].Fset, ur)
3535
pkg := typesToPkg[ur.Pkg()]
36-
issues = append(issues, goanalysis.NewIssue(&result.Issue{ //nolint:scopelint
36+
i := &result.Issue{
3737
FromLinter: name,
3838
Text: p.Message,
3939
Pos: p.Pos,
@@ -42,11 +42,16 @@ func NewUnused() *goanalysis.Linter {
4242
From: p.Pos.Line,
4343
To: p.End.Line,
4444
},
45-
Replacement: &result.Replacement{
45+
}
46+
// See https://github.com/golangci/golangci-lint/issues/1048
47+
// If range is invalid, this will break `--fix` mode.
48+
if i.LineRange.To >= i.LineRange.From {
49+
i.Replacement = &result.Replacement{
4650
// Suggest deleting unused stuff.
4751
NeedOnlyDelete: true,
48-
},
49-
}, nil))
52+
}
53+
}
54+
issues = append(issues, goanalysis.NewIssue(i, nil))
5055
}
5156
return issues
5257
}).WithContextSetter(func(lintCtx *linter.Context) {

pkg/result/processors/fixer.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,12 @@ func (f Fixer) writeFixedFile(origFileLines [][]byte, issues []result.Issue, tmp
223223
} else {
224224
nextIssueIndex++
225225
rng := nextIssue.GetLineRange()
226+
if rng.From > rng.To {
227+
// Maybe better decision is to skip such issues, re-evaluate if regressed.
228+
f.log.Warnf("[fixer]: issue line range is probably invalid, fix can be incorrect (from=%d, to=%d, linter=%s)",
229+
rng.From, rng.To, nextIssue.FromLinter,
230+
)
231+
}
226232
i += rng.To - rng.From
227233
if nextIssue.Replacement.NeedOnlyDelete {
228234
continue

test/testdata/fix/in/unused.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//args: -Eunused
2+
package p
3+
4+
type (
5+
unused struct{}
6+
)
7+
8+
func X() {}

test/testdata/fix/out/unused.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//args: -Eunused
2+
package p
3+
4+
type (
5+
unused struct{}
6+
)
7+
8+
func X() {}

0 commit comments

Comments
 (0)