func DeletePackageImports()

in tools/go-agent/tools/dst.go [55:103]


func DeletePackageImports(file dst.Node, imports ...string) {
	containsDeletedImport := false
	deletedPackages := make(map[string]string)
	dstutil.Apply(file, func(cursor *dstutil.Cursor) bool {
		switch n := cursor.Node().(type) {
		case *dst.ImportSpec:
			for _, pkg := range imports {
				if n.Path.Value == fmt.Sprintf("%q", pkg) {
					containsDeletedImport = true
					cursor.Delete()

					if n.Name != nil {
						deletedPackages[n.Name.Name] = pkg
					} else {
						deletedPackages[filepath.Base(pkg)] = pkg
					}
				}
			}
			return false
		case *dst.SelectorExpr:
			pkgRefName, ok := n.X.(*dst.Ident)
			if !ok {
				return true
			}
			if _, ok := deletedPackages[pkgRefName.Name]; ok {
				RemovePackageRef(cursor.Parent(), n, -1)
			}
		case *dst.CaseClause:
			for i, d := range n.List {
				if sel, ok := d.(*dst.SelectorExpr); ok {
					pkgRefName, ok := sel.X.(*dst.Ident)
					if !ok {
						return true
					}
					if _, ok := deletedPackages[pkgRefName.Name]; ok {
						RemovePackageRef(n, sel, i)
					}
				}
			}
		}
		return true
	}, func(cursor *dstutil.Cursor) bool {
		return true
	})

	if containsDeletedImport {
		RemoveImportDefineIfNoPackage(file)
	}
}