github.com/benma/gogen@v0.0.0-20160826115606-cf49914b915a/cleanimports/clean.go (about) 1 // Package cleanimports provides functionality to clean unused imports from the 2 // given source code 3 package cleanimports 4 5 import ( 6 "go/ast" 7 "go/format" 8 "go/parser" 9 "go/token" 10 "io" 11 "strings" 12 13 "golang.org/x/tools/go/ast/astutil" 14 ) 15 16 // Clean writes the clean source to io.Writer. The source can be a io.Reader, 17 // string or []bytes 18 func Clean(w io.Writer, src interface{}) error { 19 fset := token.NewFileSet() 20 file, err := parser.ParseFile(fset, "clean.go", src, parser.ParseComments) 21 if err != nil { 22 return err 23 } 24 // Clean unused imports 25 imports := astutil.Imports(fset, file) 26 for _, group := range imports { 27 for _, imp := range group { 28 path := strings.Trim(imp.Path.Value, `"`) 29 if !astutil.UsesImport(file, path) { 30 astutil.DeleteImport(fset, file, path) 31 } 32 } 33 } 34 ast.SortImports(fset, file) 35 // Write formatted code without unused imports 36 return format.Node(w, fset, file) 37 }