go/analysis/passes/unreachable: use refactor.DeleteStmt This change causes unreachable to use the DeleteStmt operator, resulting in cleaner edits. Change-Id: I2457033f379330dfd698e13e0b93ec4542f6fab6 Reviewed-on: https://go-review.googlesource.com/c/tools/+/711321 Reviewed-by: Peter Weinberger <pjw@google.com> Auto-Submit: Alan Donovan <adonovan@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/go/analysis/passes/unreachable/testdata/src/a/a.go.golden b/go/analysis/passes/unreachable/testdata/src/a/a.go.golden index 79cb89d..8514024 100644 --- a/go/analysis/passes/unreachable/testdata/src/a/a.go.golden +++ b/go/analysis/passes/unreachable/testdata/src/a/a.go.golden
@@ -110,27 +110,23 @@ func _() int { print(1) return 2 - } func _() int { L: print(1) goto L - } func _() int { print(1) panic(2) - } func _() int { { print(1) return 2 - } } @@ -139,7 +135,6 @@ { print(1) goto L - } } @@ -147,7 +142,6 @@ print(1) { panic(2) - } } @@ -156,7 +150,6 @@ print(1) return 2 } - } func _() int { @@ -165,7 +158,6 @@ print(1) goto L } - } func _() int { @@ -173,7 +165,6 @@ { panic(2) } - } func _() int { @@ -980,27 +971,23 @@ func _() int { return 2 - println() // ok } func _() int { L: goto L - println() // ok } func _() int { panic(2) - println() // ok } func _() int { { return 2 - } println() // ok } @@ -1009,7 +996,6 @@ L: { goto L - } println() // ok } @@ -1017,7 +1003,6 @@ func _() int { { panic(2) - } println() // ok } @@ -1026,7 +1011,6 @@ { return 2 } - println() // ok } @@ -1035,7 +1019,6 @@ { goto L } - println() // ok } @@ -1043,7 +1026,6 @@ { panic(2) } - println() // ok } @@ -1145,27 +1127,23 @@ var _ = func() int { print(1) return 2 - } var _ = func() int { L: print(1) goto L - } var _ = func() int { print(1) panic(2) - } var _ = func() int { { print(1) return 2 - } } @@ -1174,7 +1152,6 @@ { print(1) goto L - } } @@ -1182,7 +1159,6 @@ print(1) { panic(2) - } } @@ -1191,7 +1167,6 @@ print(1) return 2 } - } var _ = func() int { @@ -1200,7 +1175,6 @@ print(1) goto L } - } var _ = func() int { @@ -1208,7 +1182,6 @@ { panic(2) } - } var _ = func() int { @@ -2015,27 +1988,23 @@ var _ = func() int { return 2 - println() // ok } var _ = func() int { L: goto L - println() // ok } var _ = func() int { panic(2) - println() // ok } var _ = func() int { { return 2 - } println() // ok } @@ -2044,7 +2013,6 @@ L: { goto L - } println() // ok } @@ -2052,7 +2020,6 @@ var _ = func() int { { panic(2) - } println() // ok } @@ -2061,7 +2028,6 @@ { return 2 } - println() // ok } @@ -2070,7 +2036,6 @@ { goto L } - println() // ok } @@ -2078,7 +2043,6 @@ { panic(2) } - println() // ok }
diff --git a/go/analysis/passes/unreachable/unreachable.go b/go/analysis/passes/unreachable/unreachable.go index 317f034..a460f37 100644 --- a/go/analysis/passes/unreachable/unreachable.go +++ b/go/analysis/passes/unreachable/unreachable.go
@@ -16,6 +16,7 @@ "golang.org/x/tools/go/analysis/passes/inspect" "golang.org/x/tools/go/analysis/passes/internal/analysisutil" "golang.org/x/tools/go/ast/inspector" + "golang.org/x/tools/internal/refactor" ) //go:embed doc.go @@ -188,6 +189,11 @@ case *ast.EmptyStmt: // do not warn about unreachable empty statements default: + var ( + inspect = d.pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) + curStmt, _ = inspect.Root().FindNode(stmt) + tokFile = d.pass.Fset.File(stmt.Pos()) + ) // (This call to pass.Report is a frequent source // of diagnostics beyond EOF in a truncated file; // see #71659.) @@ -196,11 +202,8 @@ End: stmt.End(), Message: "unreachable code", SuggestedFixes: []analysis.SuggestedFix{{ - Message: "Remove", - TextEdits: []analysis.TextEdit{{ - Pos: stmt.Pos(), - End: stmt.End(), - }}, + Message: "Remove", + TextEdits: refactor.DeleteStmt(tokFile, curStmt), }}, }) d.reachable = true // silence error about next statement