internal/lsp: change generated variable names to be more verbose

If new functions or variables need to be created during an extract
call, then we choose the new names. This change makes those names
more descriptive to make the generated names easier to read and
understand.

Before:
cond0, ret0 := fn0()
if cond0 {
    return ret0
}

After
shouldReturn, returnValue := newFunction()
if shouldReturn {
    return returnValue
}

Change-Id: I44795dc45185c75d5bf65e48378aa54d6c156212
Reviewed-on: https://go-review.googlesource.com/c/tools/+/326112
Trust: Suzy Mueller <suzmue@golang.org>
Run-TryBot: Suzy Mueller <suzmue@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
diff --git a/internal/lsp/source/extract.go b/internal/lsp/source/extract.go
index 11daf6d..6450ba3 100644
--- a/internal/lsp/source/extract.go
+++ b/internal/lsp/source/extract.go
@@ -139,7 +139,10 @@
 // Possible collisions include other function and variable names. Returns the next index to check for prefix.
 func generateAvailableIdentifier(pos token.Pos, file *ast.File, path []ast.Node, info *types.Info, prefix string, idx int) (string, int) {
 	scopes := CollectScopes(info, path, pos)
-	name := prefix + fmt.Sprintf("%d", idx)
+	name := prefix
+	if idx != 0 {
+		name += fmt.Sprintf("%d", idx)
+	}
 	for file.Scope.Lookup(name) != nil || !isValidName(name, scopes) {
 		idx++
 		name = fmt.Sprintf("%v%d", prefix, idx)
@@ -468,7 +471,7 @@
 	if canDefine {
 		sym = token.DEFINE
 	}
-	funName, _ := generateAvailableIdentifier(rng.Start, file, path, info, "fn", 0)
+	funName, _ := generateAvailableIdentifier(rng.Start, file, path, info, "newFunction", 0)
 	extractedFunCall := generateFuncCall(hasNonNestedReturn, hasReturnValues, params,
 		append(returns, getNames(retVars)...), funName, sym)
 
@@ -999,7 +1002,7 @@
 	var cond *ast.Ident
 	if !hasNonNestedReturns {
 		// Generate information for the added bool value.
-		name, _ := generateAvailableIdentifier(pos, file, path, info, "cond", 0)
+		name, _ := generateAvailableIdentifier(pos, file, path, info, "shouldReturn", 0)
 		cond = &ast.Ident{Name: name}
 		retVars = append(retVars, &returnVariable{
 			name:    cond,
@@ -1022,7 +1025,7 @@
 			}
 			var name string
 			name, idx = generateAvailableIdentifier(pos, file,
-				path, info, "ret", idx)
+				path, info, "returnValue", idx)
 			retVars = append(retVars, &returnVariable{
 				name: ast.NewIdent(name),
 				decl: &ast.Field{Type: expr},
diff --git a/internal/lsp/testdata/extract/extract_function/extract_args_returns.go.golden b/internal/lsp/testdata/extract/extract_function/extract_args_returns.go.golden
index 8d361aa..b15345e 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_args_returns.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_args_returns.go.golden
@@ -4,14 +4,14 @@
 func _() {
 	a := 1
 	//@mark(exSt0, "a")
-	a = fn0(a) //@mark(exEn0, "2")
+	a = newFunction(a) //@mark(exEn0, "2")
 	//@extractfunc(exSt0, exEn0)
 	b := a * 2 //@mark(exB, "	b")
 	_ = 3 + 4  //@mark(exEnd, "4")
 	//@extractfunc(exB, exEnd)
 }
 
-func fn0(a int) int {
+func newFunction(a int) int {
 	a = 5
 	a = a + 2
 	return a
@@ -26,11 +26,11 @@
 	a = a + 2 //@mark(exEn0, "2")
 	//@extractfunc(exSt0, exEn0)
 	//@mark(exB, "	b")
-	fn0(a)  //@mark(exEnd, "4")
+	newFunction(a)  //@mark(exEnd, "4")
 	//@extractfunc(exB, exEnd)
 }
 
-func fn0(a int) {
+func newFunction(a int) {
 	b := a * 2
 	_ = 3 + 4
 }
diff --git a/internal/lsp/testdata/extract/extract_function/extract_basic.go.golden b/internal/lsp/testdata/extract/extract_function/extract_basic.go.golden
index b65c8bc..ba40ff2 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_basic.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_basic.go.golden
@@ -3,11 +3,11 @@
 
 func _() {
 	//@mark(exSt1, "a")
-	fn0() //@mark(exEn1, "4")
+	newFunction() //@mark(exEn1, "4")
 	//@extractfunc(exSt1, exEn1)
 }
 
-func fn0() {
+func newFunction() {
 	a := 1
 	_ = 3 + 4
 }
diff --git a/internal/lsp/testdata/extract/extract_function/extract_basic_comment.go.golden b/internal/lsp/testdata/extract/extract_function/extract_basic_comment.go.golden
index 5d679ed..a43822a 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_basic_comment.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_basic_comment.go.golden
@@ -5,11 +5,11 @@
 	/* comment in the middle of a line */
 	//@mark(exSt18, "a")
 	// Comment on its own line
-	fn0() //@mark(exEn18, "4")
+	newFunction() //@mark(exEn18, "4")
 	//@extractfunc(exSt18, exEn18)
 }
 
-func fn0() {
+func newFunction() {
 	a := 1
 
 	_ = 3 + 4
diff --git a/internal/lsp/testdata/extract/extract_function/extract_issue_44813.go.golden b/internal/lsp/testdata/extract/extract_function/extract_issue_44813.go.golden
index 3d392aa..3198c9f 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_issue_44813.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_issue_44813.go.golden
@@ -5,12 +5,12 @@
 
 func main() {
 	//@mark(exSt9, "x")
-	x := fn0() //@mark(exEn9, "}")
+	x := newFunction() //@mark(exEn9, "}")
 	//@extractfunc(exSt9, exEn9)
 	fmt.Printf("%x\n", x)
 }
 
-func fn0() []rune {
+func newFunction() []rune {
 	x := []rune{}
 	s := "HELLO"
 	for _, c := range s {
diff --git a/internal/lsp/testdata/extract/extract_function/extract_redefine.go.golden b/internal/lsp/testdata/extract/extract_function/extract_redefine.go.golden
index e739e66..e2ee217 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_redefine.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_redefine.go.golden
@@ -5,13 +5,13 @@
 
 func _() {
 	i, err := strconv.Atoi("1")
-	u, err := fn0() //@extractfunc("u", ")")
+	u, err := newFunction() //@extractfunc("u", ")")
 	if i == u || err == nil {
 		return
 	}
 }
 
-func fn0() (int, error) {
+func newFunction() (int, error) {
 	u, err := strconv.Atoi("2")
 	return u, err
 }
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_basic.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_basic.go.golden
index 030ca57..6103d1e 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_basic.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_basic.go.golden
@@ -4,15 +4,15 @@
 func _() bool {
 	x := 1
 	//@mark(exSt2, "if")
-	cond0, ret0 := fn0(x)
-	if cond0 {
-		return ret0
+	shouldReturn, returnValue := newFunction(x)
+	if shouldReturn {
+		return returnValue
 	} //@mark(exEn2, "}")
 	return false
 	//@extractfunc(exSt2, exEn2)
 }
 
-func fn0(x int) (bool, bool) {
+func newFunction(x int) (bool, bool) {
 	if x == 0 {
 		return true, true
 	}
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_basic_nonnested.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_basic_nonnested.go.golden
index 41f8921..19e48da 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_basic_nonnested.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_basic_nonnested.go.golden
@@ -3,11 +3,11 @@
 
 func _() bool {
 	//@mark(exSt13, "x")
-	return fn0() //@mark(exEn13, "false")
+	return newFunction() //@mark(exEn13, "false")
 	//@extractfunc(exSt13, exEn13)
 }
 
-func fn0() bool {
+func newFunction() bool {
 	x := 1
 	if x == 0 {
 		return true
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_complex.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_complex.go.golden
index 4c711c4..4d20122 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_complex.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_complex.go.golden
@@ -7,15 +7,15 @@
 	x := 1
 	y := "hello"
 	//@mark(exSt3, "z")
-	z, cond0, ret0, ret1, ret2 := fn0(y, x)
-	if cond0 {
-		return ret0, ret1, ret2
+	z, shouldReturn, returnValue, returnValue1, returnValue2 := newFunction(y, x)
+	if shouldReturn {
+		return returnValue, returnValue1, returnValue2
 	} //@mark(exEn3, "}")
 	return x, z, nil
 	//@extractfunc(exSt3, exEn3)
 }
 
-func fn0(y string, x int) (string, bool, int, string, error) {
+func newFunction(y string, x int) (string, bool, int, string, error) {
 	z := "bye"
 	if y == z {
 		return "", true, x, y, fmt.Errorf("same")
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_complex_nonnested.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_complex_nonnested.go.golden
index 7a43113..de54b15 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_complex_nonnested.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_complex_nonnested.go.golden
@@ -7,11 +7,11 @@
 	x := 1
 	y := "hello"
 	//@mark(exSt10, "z")
-	return fn0(y, x) //@mark(exEn10, "nil")
+	return newFunction(y, x) //@mark(exEn10, "nil")
 	//@extractfunc(exSt10, exEn10)
 }
 
-func fn0(y string, x int) (int, string, error) {
+func newFunction(y string, x int) (int, string, error) {
 	z := "bye"
 	if y == z {
 		return x, y, fmt.Errorf("same")
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_func_lit.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_func_lit.go.golden
index 937b3e5..3af747c 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_func_lit.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_func_lit.go.golden
@@ -6,16 +6,16 @@
 func _() {
 	ast.Inspect(ast.NewIdent("a"), func(n ast.Node) bool {
 		//@mark(exSt4, "if")
-		cond0, ret0 := fn0(n)
-		if cond0 {
-			return ret0
+		shouldReturn, returnValue := newFunction(n)
+		if shouldReturn {
+			return returnValue
 		} //@mark(exEn4, "}")
 		return false
 	})
 	//@extractfunc(exSt4, exEn4)
 }
 
-func fn0(n ast.Node) (bool, bool) {
+func newFunction(n ast.Node) (bool, bool) {
 	if n == nil {
 		return true, true
 	}
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_func_lit_nonnested.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_func_lit_nonnested.go.golden
index c94a934..efa22ba 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_func_lit_nonnested.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_func_lit_nonnested.go.golden
@@ -6,12 +6,12 @@
 func _() {
 	ast.Inspect(ast.NewIdent("a"), func(n ast.Node) bool {
 		//@mark(exSt11, "if")
-		return fn0(n) //@mark(exEn11, "false")
+		return newFunction(n) //@mark(exEn11, "false")
 	})
 	//@extractfunc(exSt11, exEn11)
 }
 
-func fn0(n ast.Node) bool {
+func newFunction(n ast.Node) bool {
 	if n == nil {
 		return true
 	}
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_init.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_init.go.golden
index 1a5b4d4..31d1b2d 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_init.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_init.go.golden
@@ -4,16 +4,16 @@
 func _() string {
 	x := 1
 	//@mark(exSt5, "if")
-	cond0, ret0 := fn0(x)
-	if cond0 {
-		return ret0
+	shouldReturn, returnValue := newFunction(x)
+	if shouldReturn {
+		return returnValue
 	} //@mark(exEn5, "}")
 	x = 2
 	return "b"
 	//@extractfunc(exSt5, exEn5)
 }
 
-func fn0(x int) (bool, string) {
+func newFunction(x int) (bool, string) {
 	if x == 0 {
 		x = 3
 		return true, "a"
diff --git a/internal/lsp/testdata/extract/extract_function/extract_return_init_nonnested.go.golden b/internal/lsp/testdata/extract/extract_function/extract_return_init_nonnested.go.golden
index 5a16d0d..58bb573 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_return_init_nonnested.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_return_init_nonnested.go.golden
@@ -4,11 +4,11 @@
 func _() string {
 	x := 1
 	//@mark(exSt12, "if")
-	return fn0(x) //@mark(exEn12, "\"b\"")
+	return newFunction(x) //@mark(exEn12, "\"b\"")
 	//@extractfunc(exSt12, exEn12)
 }
 
-func fn0(x int) string {
+func newFunction(x int) string {
 	if x == 0 {
 		x = 3
 		return "a"
diff --git a/internal/lsp/testdata/extract/extract_function/extract_scope.go.golden b/internal/lsp/testdata/extract/extract_function/extract_scope.go.golden
index ecdfc06..1bb4e61 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_scope.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_scope.go.golden
@@ -3,10 +3,10 @@
 
 func _() {
 	fn0 := 1
-	fn2(fn0) //@extractfunc("a", "fn0")
+	newFunction(fn0) //@extractfunc("a", "fn0")
 }
 
-func fn2(fn0 int) {
+func newFunction(fn0 int) {
 	a := fn0
 }
 
diff --git a/internal/lsp/testdata/extract/extract_function/extract_smart_initialization.go.golden b/internal/lsp/testdata/extract/extract_function/extract_smart_initialization.go.golden
index 04d7251..8be5040 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_smart_initialization.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_smart_initialization.go.golden
@@ -4,12 +4,12 @@
 func _() {
 	var a []int
 	//@mark(exSt6, "a")
-	a, b := fn0(a)           //@mark(exEn6, "4")
+	a, b := newFunction(a)           //@mark(exEn6, "4")
 	//@extractfunc(exSt6, exEn6)
 	a = append(a, b)
 }
 
-func fn0(a []int) ([]int, int) {
+func newFunction(a []int) ([]int, int) {
 	a = append(a, 2)
 	b := 4
 	return a, b
diff --git a/internal/lsp/testdata/extract/extract_function/extract_smart_return.go.golden b/internal/lsp/testdata/extract/extract_function/extract_smart_return.go.golden
index 5d7765a..fdf55ae 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_smart_return.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_smart_return.go.golden
@@ -5,12 +5,12 @@
 	var b []int
 	var a int
 	//@mark(exSt7, "a")
-	b = fn0(a, b) //@mark(exEn7, ")")
+	b = newFunction(a, b) //@mark(exEn7, ")")
 	b[0] = 1
 	//@extractfunc(exSt7, exEn7)
 }
 
-func fn0(a int, b []int) []int {
+func newFunction(a int, b []int) []int {
 	a = 2
 	b = []int{}
 	b = append(b, a)
diff --git a/internal/lsp/testdata/extract/extract_function/extract_unnecessary_param.go.golden b/internal/lsp/testdata/extract/extract_function/extract_unnecessary_param.go.golden
index 8afa749..4374f37 100644
--- a/internal/lsp/testdata/extract/extract_function/extract_unnecessary_param.go.golden
+++ b/internal/lsp/testdata/extract/extract_function/extract_unnecessary_param.go.golden
@@ -5,7 +5,7 @@
 	var b []int
 	var a int
 	//@mark(exSt8, "a")
-	a, b = fn0(b) //@mark(exEn8, ")")
+	a, b = newFunction(b) //@mark(exEn8, ")")
 	b[0] = 1
 	if a == 2 {
 		return
@@ -13,7 +13,7 @@
 	//@extractfunc(exSt8, exEn8)
 }
 
-func fn0(b []int) (int, []int) {
+func newFunction(b []int) (int, []int) {
 	a := 2
 	b = []int{}
 	b = append(b, a)
diff --git a/internal/lsp/testdata/extract/extract_variable/extract_basic_lit.go.golden b/internal/lsp/testdata/extract/extract_variable/extract_basic_lit.go.golden
index 202d378..00ee7b4 100644
--- a/internal/lsp/testdata/extract/extract_variable/extract_basic_lit.go.golden
+++ b/internal/lsp/testdata/extract/extract_variable/extract_basic_lit.go.golden
@@ -2,8 +2,8 @@
 package extract
 
 func _() {
-	x0 := 1
-	var _ = x0 + 2 //@suggestedfix("1", "refactor.extract")
+	x := 1
+	var _ = x + 2 //@suggestedfix("1", "refactor.extract")
 	var _ = 3 + 4 //@suggestedfix("3 + 4", "refactor.extract")
 }
 
@@ -12,7 +12,7 @@
 
 func _() {
 	var _ = 1 + 2 //@suggestedfix("1", "refactor.extract")
-	x0 := 3 + 4
-	var _ = x0 //@suggestedfix("3 + 4", "refactor.extract")
+	x := 3 + 4
+	var _ = x //@suggestedfix("3 + 4", "refactor.extract")
 }
 
diff --git a/internal/lsp/testdata/extract/extract_variable/extract_func_call.go.golden b/internal/lsp/testdata/extract/extract_variable/extract_func_call.go.golden
index 07d427b..74df67e 100644
--- a/internal/lsp/testdata/extract/extract_variable/extract_func_call.go.golden
+++ b/internal/lsp/testdata/extract/extract_variable/extract_func_call.go.golden
@@ -16,8 +16,8 @@
 import "strconv"
 
 func _() {
-	x1 := append([]int{}, 1)
-	x0 := x1 //@suggestedfix("append([]int{}, 1)", "refactor.extract")
+	x := append([]int{}, 1)
+	x0 := x //@suggestedfix("append([]int{}, 1)", "refactor.extract")
 	str := "1"
 	b, err := strconv.Atoi(str) //@suggestedfix("strconv.Atoi(str)", "refactor.extract")
 }
@@ -30,7 +30,7 @@
 func _() {
 	x0 := append([]int{}, 1) //@suggestedfix("append([]int{}, 1)", "refactor.extract")
 	str := "1"
-	x1, x2 := strconv.Atoi(str)
-	b, err := x1, x2 //@suggestedfix("strconv.Atoi(str)", "refactor.extract")
+	x, x1 := strconv.Atoi(str)
+	b, err := x, x1 //@suggestedfix("strconv.Atoi(str)", "refactor.extract")
 }
 
diff --git a/internal/lsp/testdata/extract/extract_variable/extract_scope.go.golden b/internal/lsp/testdata/extract/extract_variable/extract_scope.go.golden
index 4ded99a..e0e6464 100644
--- a/internal/lsp/testdata/extract/extract_variable/extract_scope.go.golden
+++ b/internal/lsp/testdata/extract/extract_variable/extract_scope.go.golden
@@ -9,8 +9,8 @@
 		y := ast.CompositeLit{} //@suggestedfix("ast.CompositeLit{}", "refactor.extract")
 	}
 	if true {
-		x2 := !false
-		x1 := x2 //@suggestedfix("!false", "refactor.extract")
+		x := !false
+		x1 := x //@suggestedfix("!false", "refactor.extract")
 	}
 }
 
@@ -22,8 +22,8 @@
 func _() {
 	x0 := 0
 	if true {
-		x1 := ast.CompositeLit{}
-		y := x1 //@suggestedfix("ast.CompositeLit{}", "refactor.extract")
+		x := ast.CompositeLit{}
+		y := x //@suggestedfix("ast.CompositeLit{}", "refactor.extract")
 	}
 	if true {
 		x1 := !false //@suggestedfix("!false", "refactor.extract")