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