gopls/internal/golang: strength reduce ComputeImportFixEdits

Simplify the API of ComputeOneImportFixEdits (renamed to
ComputeImportFixEdits), so that it can be used in more scenarios.

Change-Id: I4c4adb5f38947074dfb005e0c745d1a623bd3fd8
Reviewed-on: https://go-review.googlesource.com/c/tools/+/626280
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Hongxiang Jiang <hxjiang@golang.org>
Auto-Submit: Robert Findley <rfindley@google.com>
diff --git a/gopls/internal/golang/add_import.go b/gopls/internal/golang/add_import.go
index a43256a..7581bc0 100644
--- a/gopls/internal/golang/add_import.go
+++ b/gopls/internal/golang/add_import.go
@@ -20,7 +20,7 @@
 	if err != nil {
 		return nil, err
 	}
-	return ComputeOneImportFixEdits(snapshot, pgf, &imports.ImportFix{
+	return ComputeImportFixEdits(snapshot.Options().Local, pgf.Src, &imports.ImportFix{
 		StmtInfo: imports.ImportInfo{
 			ImportPath: importPath,
 		},
diff --git a/gopls/internal/golang/completion/format.go b/gopls/internal/golang/completion/format.go
index 45d734e..baf0890 100644
--- a/gopls/internal/golang/completion/format.go
+++ b/gopls/internal/golang/completion/format.go
@@ -299,7 +299,7 @@
 		return nil, err
 	}
 
-	return golang.ComputeOneImportFixEdits(c.snapshot, pgf, &imports.ImportFix{
+	return golang.ComputeImportFixEdits(c.snapshot.Options().Local, pgf.Src, &imports.ImportFix{
 		StmtInfo: imports.ImportInfo{
 			ImportPath: imp.importPath,
 			Name:       imp.name,
diff --git a/gopls/internal/golang/fix.go b/gopls/internal/golang/fix.go
index 119ca39..a20658f 100644
--- a/gopls/internal/golang/fix.go
+++ b/gopls/internal/golang/fix.go
@@ -188,7 +188,7 @@
 // addEmbedImport adds a missing embed "embed" import with blank name.
 func addEmbedImport(ctx context.Context, snapshot *cache.Snapshot, pkg *cache.Package, pgf *parsego.File, _, _ token.Pos) (*token.FileSet, *analysis.SuggestedFix, error) {
 	// Like golang.AddImport, but with _ as Name and using our pgf.
-	protoEdits, err := ComputeOneImportFixEdits(snapshot, pgf, &imports.ImportFix{
+	protoEdits, err := ComputeImportFixEdits(snapshot.Options().Local, pgf.Src, &imports.ImportFix{
 		StmtInfo: imports.ImportInfo{
 			ImportPath: "embed",
 			Name:       "_",
diff --git a/gopls/internal/golang/format.go b/gopls/internal/golang/format.go
index 1a7ffbd..fa255e6 100644
--- a/gopls/internal/golang/format.go
+++ b/gopls/internal/golang/format.go
@@ -140,7 +140,7 @@
 		return nil, nil, err
 	}
 
-	allFixEdits, err = computeFixEdits(pgf, options, allFixes)
+	allFixEdits, err = computeFixEdits(pgf.Src, options, allFixes)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -148,7 +148,7 @@
 	// Apply all of the import fixes to the file.
 	// Add the edits for each fix to the result.
 	for _, fix := range allFixes {
-		edits, err := computeFixEdits(pgf, options, []*imports.ImportFix{fix})
+		edits, err := computeFixEdits(pgf.Src, options, []*imports.ImportFix{fix})
 		if err != nil {
 			return nil, nil, err
 		}
@@ -160,10 +160,10 @@
 	return allFixEdits, editsPerFix, nil
 }
 
-// ComputeOneImportFixEdits returns text edits for a single import fix.
-func ComputeOneImportFixEdits(snapshot *cache.Snapshot, pgf *parsego.File, fix *imports.ImportFix) ([]protocol.TextEdit, error) {
+// ComputeImportFixEdits returns text edits for a single import fix.
+func ComputeImportFixEdits(localPrefix string, src []byte, fixes ...*imports.ImportFix) ([]protocol.TextEdit, error) {
 	options := &imports.Options{
-		LocalPrefix: snapshot.Options().Local,
+		LocalPrefix: localPrefix,
 		// Defaults.
 		AllErrors:  true,
 		Comments:   true,
@@ -172,18 +172,18 @@
 		TabIndent:  true,
 		TabWidth:   8,
 	}
-	return computeFixEdits(pgf, options, []*imports.ImportFix{fix})
+	return computeFixEdits(src, options, fixes)
 }
 
-func computeFixEdits(pgf *parsego.File, options *imports.Options, fixes []*imports.ImportFix) ([]protocol.TextEdit, error) {
+func computeFixEdits(src []byte, options *imports.Options, fixes []*imports.ImportFix) ([]protocol.TextEdit, error) {
 	// trim the original data to match fixedData
-	left, err := importPrefix(pgf.Src)
+	left, err := importPrefix(src)
 	if err != nil {
 		return nil, err
 	}
 	extra := !strings.Contains(left, "\n") // one line may have more than imports
 	if extra {
-		left = string(pgf.Src)
+		left = string(src)
 	}
 	if len(left) > 0 && left[len(left)-1] != '\n' {
 		left += "\n"
@@ -195,7 +195,7 @@
 		// used all of origData above, use all of it here too
 		flags = 0
 	}
-	fixedData, err := imports.ApplyFixes(fixes, "", pgf.Src, options, flags)
+	fixedData, err := imports.ApplyFixes(fixes, "", src, options, flags)
 	if err != nil {
 		return nil, err
 	}