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