Merge pull request #1049 from golangci/unused-fix-mode

Fix unused in "fix" mode
This commit is contained in:
Aleksandr Razumov 2020-04-27 20:18:54 +03:00 committed by GitHub
commit c0618b0593
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 4 deletions

View File

@ -33,7 +33,7 @@ func NewUnused() *goanalysis.Linter {
for _, ur := range u.Result() { for _, ur := range u.Result() {
p := u.ProblemObject(lintCtx.Packages[0].Fset, ur) p := u.ProblemObject(lintCtx.Packages[0].Fset, ur)
pkg := typesToPkg[ur.Pkg()] pkg := typesToPkg[ur.Pkg()]
issues = append(issues, goanalysis.NewIssue(&result.Issue{ //nolint:scopelint i := &result.Issue{
FromLinter: name, FromLinter: name,
Text: p.Message, Text: p.Message,
Pos: p.Pos, Pos: p.Pos,
@ -42,11 +42,16 @@ func NewUnused() *goanalysis.Linter {
From: p.Pos.Line, From: p.Pos.Line,
To: p.End.Line, To: p.End.Line,
}, },
Replacement: &result.Replacement{ }
// See https://github.com/golangci/golangci-lint/issues/1048
// If range is invalid, this will break `--fix` mode.
if i.LineRange.To >= i.LineRange.From {
i.Replacement = &result.Replacement{
// Suggest deleting unused stuff. // Suggest deleting unused stuff.
NeedOnlyDelete: true, NeedOnlyDelete: true,
}, }
}, nil)) }
issues = append(issues, goanalysis.NewIssue(i, nil))
} }
return issues return issues
}).WithContextSetter(func(lintCtx *linter.Context) { }).WithContextSetter(func(lintCtx *linter.Context) {

View File

@ -223,6 +223,12 @@ func (f Fixer) writeFixedFile(origFileLines [][]byte, issues []result.Issue, tmp
} else { } else {
nextIssueIndex++ nextIssueIndex++
rng := nextIssue.GetLineRange() rng := nextIssue.GetLineRange()
if rng.From > rng.To {
// Maybe better decision is to skip such issues, re-evaluate if regressed.
f.log.Warnf("[fixer]: issue line range is probably invalid, fix can be incorrect (from=%d, to=%d, linter=%s)",
rng.From, rng.To, nextIssue.FromLinter,
)
}
i += rng.To - rng.From i += rng.To - rng.From
if nextIssue.Replacement.NeedOnlyDelete { if nextIssue.Replacement.NeedOnlyDelete {
continue continue

8
test/testdata/fix/in/unused.go vendored Normal file
View File

@ -0,0 +1,8 @@
//args: -Eunused
package p
type (
unused struct{}
)
func X() {}

8
test/testdata/fix/out/unused.go vendored Normal file
View File

@ -0,0 +1,8 @@
//args: -Eunused
package p
type (
unused struct{}
)
func X() {}