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