diff --git a/internal/lsp/source/rename.go b/internal/lsp/source/rename.go
index f2169e5..59b6171 100644
--- a/internal/lsp/source/rename.go
+++ b/internal/lsp/source/rename.go
@@ -60,6 +60,7 @@
 	}
 
 	r := renamer{
+		ctx:          ctx,
 		fset:         i.File.FileSet(),
 		pkg:          i.pkg,
 		refs:         refs,
@@ -78,11 +79,11 @@
 		return nil, fmt.Errorf(r.errors)
 	}
 
-	return r.update(ctx)
+	return r.update()
 }
 
 // Rename all references to the identifier.
-func (r *renamer) update(ctx context.Context) (map[span.URI][]TextEdit, error) {
+func (r *renamer) update() (map[span.URI][]TextEdit, error) {
 	result := make(map[span.URI][]TextEdit)
 
 	docRegexp, err := regexp.Compile(`\b` + r.from + `\b`)
@@ -99,9 +100,10 @@
 			Span:    refSpan,
 			NewText: r.to,
 		}
+
 		result[refSpan.URI()] = append(result[refSpan.URI()], edit)
 
-		if !ref.isDeclaration { // not a declaration
+		if !ref.isDeclaration || ref.ident == nil { // done if it it is a use or does not have an identifier
 			continue
 		}
 
diff --git a/internal/lsp/testdata/rename/a/random.go.golden b/internal/lsp/testdata/rename/a/random.go.golden
index 806b4d7..bd07e97 100644
--- a/internal/lsp/testdata/rename/a/random.go.golden
+++ b/internal/lsp/testdata/rename/a/random.go.golden
@@ -1,6 +1,8 @@
 -- GetSum-rename --
 package a
 
+import "fmt"
+
 func Random() int {
 	y := 6 + 7
 	return y
@@ -23,9 +25,24 @@
 	_ = p.GetSum() //@rename("Sum", "GetSum")
 }
 
+func sw() {
+	var x interface{}
+
+	switch y := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y) //@rename("y", "y3")
+	}
+}
+
 -- myX-rename --
 package a
 
+import "fmt"
+
 func Random() int {
 	y := 6 + 7
 	return y
@@ -48,9 +65,24 @@
 	_ = p.Sum() //@rename("Sum", "GetSum")
 }
 
+func sw() {
+	var x interface{}
+
+	switch y := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y) //@rename("y", "y3")
+	}
+}
+
 -- pos-rename --
 package a
 
+import "fmt"
+
 func Random() int {
 	y := 6 + 7
 	return y
@@ -73,9 +105,24 @@
 	_ = pos.Sum() //@rename("Sum", "GetSum")
 }
 
+func sw() {
+	var x interface{}
+
+	switch y := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y) //@rename("y", "y3")
+	}
+}
+
 -- z-rename --
 package a
 
+import "fmt"
+
 func Random() int {
 	y := 6 + 7
 	return y
@@ -98,3 +145,216 @@
 	_ = p.Sum() //@rename("Sum", "GetSum")
 }
 
+func sw() {
+	var x interface{}
+
+	switch y := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y) //@rename("y", "y3")
+	}
+}
+
+-- y0-rename --
+package a
+
+import "fmt"
+
+func Random() int {
+	y := 6 + 7
+	return y
+}
+
+func Random2(y int) int { //@rename("y", "z")
+	return y
+}
+
+type Pos struct {
+	x, y int
+}
+
+func (p *Pos) Sum() int {
+	return p.x + p.y //@rename("x", "myX")
+}
+
+func _() {
+	var p Pos   //@rename("p", "pos")
+	_ = p.Sum() //@rename("Sum", "GetSum")
+}
+
+func sw() {
+	var x interface{}
+
+	switch y0 := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y0) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y0) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y0) //@rename("y", "y3")
+	}
+}
+
+-- y1-rename --
+package a
+
+import "fmt"
+
+func Random() int {
+	y := 6 + 7
+	return y
+}
+
+func Random2(y int) int { //@rename("y", "z")
+	return y
+}
+
+type Pos struct {
+	x, y int
+}
+
+func (p *Pos) Sum() int {
+	return p.x + p.y //@rename("x", "myX")
+}
+
+func _() {
+	var p Pos   //@rename("p", "pos")
+	_ = p.Sum() //@rename("Sum", "GetSum")
+}
+
+func sw() {
+	var x interface{}
+
+	switch y1 := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y1) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y1) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y1) //@rename("y", "y3")
+	}
+}
+
+-- y2-rename --
+package a
+
+import "fmt"
+
+func Random() int {
+	y := 6 + 7
+	return y
+}
+
+func Random2(y int) int { //@rename("y", "z")
+	return y
+}
+
+type Pos struct {
+	x, y int
+}
+
+func (p *Pos) Sum() int {
+	return p.x + p.y //@rename("x", "myX")
+}
+
+func _() {
+	var p Pos   //@rename("p", "pos")
+	_ = p.Sum() //@rename("Sum", "GetSum")
+}
+
+func sw() {
+	var x interface{}
+
+	switch y2 := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y2) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y2) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y2) //@rename("y", "y3")
+	}
+}
+
+-- y3-rename --
+package a
+
+import "fmt"
+
+func Random() int {
+	y := 6 + 7
+	return y
+}
+
+func Random2(y int) int { //@rename("y", "z")
+	return y
+}
+
+type Pos struct {
+	x, y int
+}
+
+func (p *Pos) Sum() int {
+	return p.x + p.y //@rename("x", "myX")
+}
+
+func _() {
+	var p Pos   //@rename("p", "pos")
+	_ = p.Sum() //@rename("Sum", "GetSum")
+}
+
+func sw() {
+	var x interface{}
+
+	switch y3 := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y3) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y3) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y3) //@rename("y", "y3")
+	}
+}
+
+-- format-rename --
+package a
+
+import format "fmt"
+
+func Random() int {
+	y := 6 + 7
+	return y
+}
+
+func Random2(y int) int { //@rename("y", "z")
+	return y
+}
+
+type Pos struct {
+	x, y int
+}
+
+func (p *Pos) Sum() int {
+	return p.x + p.y //@rename("x", "myX")
+}
+
+func _() {
+	var p Pos   //@rename("p", "pos")
+	_ = p.Sum() //@rename("Sum", "GetSum")
+}
+
+func sw() {
+	var x interface{}
+
+	switch y := x.(type) { //@rename("y", "y0")
+	case int:
+		format.Printf("%d", y) //@rename("y", "y1")
+	case string:
+		format.Printf("%s", y) //@rename("y", "y2")
+	default:
+		format.Printf("%v", y) //@rename("y", "y3")
+	}
+}
+
diff --git a/internal/lsp/testdata/rename/a/random.go.in b/internal/lsp/testdata/rename/a/random.go.in
index d4347f8..c1c0fc5 100644
--- a/internal/lsp/testdata/rename/a/random.go.in
+++ b/internal/lsp/testdata/rename/a/random.go.in
@@ -1,5 +1,7 @@
 package a
 
+import "fmt"
+
 func Random() int {
 	y := 6 + 7
 	return y
@@ -21,3 +23,16 @@
 	var p Pos   //@rename("p", "pos")
 	_ = p.Sum() //@rename("Sum", "GetSum")
 }
+
+func sw() {
+	var x interface{}
+
+	switch y := x.(type) { //@rename("y", "y0")
+	case int:
+		fmt.Printf("%d", y) //@rename("y", "y1")
+	case string:
+		fmt.Printf("%s", y) //@rename("y", "y2")
+	default:
+		fmt.Printf("%v", y) //@rename("y", "y3")
+	}
+}
diff --git a/internal/lsp/tests/tests.go b/internal/lsp/tests/tests.go
index 34a581b..f0fdb48 100644
--- a/internal/lsp/tests/tests.go
+++ b/internal/lsp/tests/tests.go
@@ -34,7 +34,7 @@
 	ExpectedTypeDefinitionsCount   = 2
 	ExpectedHighlightsCount        = 2
 	ExpectedReferencesCount        = 2
-	ExpectedRenamesCount           = 4
+	ExpectedRenamesCount           = 8
 	ExpectedSymbolsCount           = 1
 	ExpectedSignaturesCount        = 20
 	ExpectedLinksCount             = 2
