From 07655f7ec712a8fd796ed69ce5895539910e1248 Mon Sep 17 00:00:00 2001 From: Suzy Mueller Date: Mon, 8 Jul 2019 16:41:40 -0700 Subject: [PATCH] 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 Run-TryBot: Rebecca Stambler TryBot-Result: Gobot Gobot Reviewed-by: Rebecca Stambler --- internal/lsp/source/rename.go | 6 +++++- internal/lsp/testdata/rename/b/b.go | 3 +++ internal/lsp/testdata/rename/b/b.go.golden | 2 ++ internal/lsp/tests/tests.go | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 internal/lsp/testdata/rename/b/b.go create mode 100644 internal/lsp/testdata/rename/b/b.go.golden diff --git a/internal/lsp/source/rename.go b/internal/lsp/source/rename.go index 885b9903..0b72a1d3 100644 --- a/internal/lsp/source/rename.go +++ b/internal/lsp/source/rename.go @@ -46,10 +46,14 @@ func (i *IdentifierInfo) Rename(ctx context.Context, newName string) (map[span.U 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 00000000..c6f7f31c --- /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 00000000..5fd037a2 --- /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 aa5fd607..196026f4 100644 --- a/internal/lsp/tests/tests.go +++ b/internal/lsp/tests/tests.go @@ -34,7 +34,7 @@ const ( ExpectedTypeDefinitionsCount = 2 ExpectedHighlightsCount = 2 ExpectedReferencesCount = 4 - ExpectedRenamesCount = 12 + ExpectedRenamesCount = 13 ExpectedSymbolsCount = 1 ExpectedSignaturesCount = 21 ExpectedLinksCount = 2