From 4f50f44d7a3206e9e28b984e023efce2a4a75369 Mon Sep 17 00:00:00 2001 From: "David R. Jenni" Date: Fri, 7 Aug 2015 17:16:12 +0200 Subject: [PATCH] imports: fix bug, where unused named import is mistaken for unnamed import. Fixes #8149. Change-Id: Ia3d318f70981b2032a71d3fd32eaffba20cfbcbd Reviewed-on: https://go-review.googlesource.com/13371 Reviewed-by: Josh Bleecher Snyder --- imports/fix.go | 30 +++++++++++++++--------------- imports/fix_test.go | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/imports/fix.go b/imports/fix.go index 22fde6c1..3ccee0ee 100644 --- a/imports/fix.go +++ b/imports/fix.go @@ -89,6 +89,21 @@ func fixImports(fset *token.FileSet, f *ast.File) (added []string, err error) { }) ast.Walk(visitor, f) + // Nil out any unused ImportSpecs, to be removed in following passes + unusedImport := map[string]bool{} + for pkg, is := range decls { + if refs[pkg] == nil && pkg != "_" && pkg != "." { + unusedImport[strings.Trim(is.Path.Value, `"`)] = true + } + } + for ipath := range unusedImport { + if ipath == "C" { + // Don't remove cgo stuff. + continue + } + astutil.DeleteImport(fset, f, ipath) + } + // Search for imports matching potential package references. searches := 0 type result struct { @@ -126,21 +141,6 @@ func fixImports(fset *token.FileSet, f *ast.File) (added []string, err error) { } } - // Nil out any unused ImportSpecs, to be removed in following passes - unusedImport := map[string]bool{} - for pkg, is := range decls { - if refs[pkg] == nil && pkg != "_" && pkg != "." { - unusedImport[strings.Trim(is.Path.Value, `"`)] = true - } - } - for ipath := range unusedImport { - if ipath == "C" { - // Don't remove cgo stuff. - continue - } - astutil.DeleteImport(fset, f, ipath) - } - return added, nil } diff --git a/imports/fix_test.go b/imports/fix_test.go index 6be1d578..f087bc70 100644 --- a/imports/fix_test.go +++ b/imports/fix_test.go @@ -707,6 +707,24 @@ var ( _ p.P _ = regexp.Compile ) +`, + }, + + // Unused named import is mistaken for unnamed import + // golang.org/issue/8149 + { + name: "issue 8149", + in: `package main + +import foo "fmt" + +func main() { fmt.Println() } +`, + out: `package main + +import "fmt" + +func main() { fmt.Println() } `, }, }