internal/lsp: return an error when renaming a builtin

Return an error when attempting to rename a builtin identifier.

Fixes golang/go#32992

Change-Id: I7fb0f9cc9499e5afdfb14805c49c820e4da3b601
Reviewed-on: https://go-review.googlesource.com/c/tools/+/185246
Run-TryBot: Suzy Mueller <suzmue@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
diff --git a/internal/lsp/source/rename.go b/internal/lsp/source/rename.go
index 885b990..0b72a1d 100644
--- a/internal/lsp/source/rename.go
+++ b/internal/lsp/source/rename.go
@@ -46,10 +46,14 @@
 		return nil, fmt.Errorf("invalid identifier to rename: %q", i.Name)
 	}
 
-	// Do not rename identifiers declared in another package.
 	if i.pkg == nil || i.pkg.IsIllTyped() {
 		return nil, fmt.Errorf("package for %s is ill typed", i.File.URI())
 	}
+	// Do not rename builtin identifiers.
+	if i.decl.obj.Parent() == types.Universe {
+		return nil, fmt.Errorf("cannot rename builtin %q", i.Name)
+	}
+	// Do not rename identifiers declared in another package.
 	if i.pkg.GetTypes() != i.decl.obj.Pkg() {
 		return nil, fmt.Errorf("failed to rename because %q is declared in package %q", i.Name, i.decl.obj.Pkg().Name())
 	}
diff --git a/internal/lsp/testdata/rename/b/b.go b/internal/lsp/testdata/rename/b/b.go
new file mode 100644
index 0000000..c6f7f31
--- /dev/null
+++ b/internal/lsp/testdata/rename/b/b.go
@@ -0,0 +1,3 @@
+package b
+
+var c int //@rename("int", "uint")
diff --git a/internal/lsp/testdata/rename/b/b.go.golden b/internal/lsp/testdata/rename/b/b.go.golden
new file mode 100644
index 0000000..5fd037a
--- /dev/null
+++ b/internal/lsp/testdata/rename/b/b.go.golden
@@ -0,0 +1,2 @@
+-- uint-rename --
+cannot rename builtin "int"
diff --git a/internal/lsp/tests/tests.go b/internal/lsp/tests/tests.go
index aa5fd60..196026f 100644
--- a/internal/lsp/tests/tests.go
+++ b/internal/lsp/tests/tests.go
@@ -34,7 +34,7 @@
 	ExpectedTypeDefinitionsCount   = 2
 	ExpectedHighlightsCount        = 2
 	ExpectedReferencesCount        = 4
-	ExpectedRenamesCount           = 12
+	ExpectedRenamesCount           = 13
 	ExpectedSymbolsCount           = 1
 	ExpectedSignaturesCount        = 21
 	ExpectedLinksCount             = 2