Skip to content

Commit 59945af

Browse files
committed
IDE: Support rename on renamed self types
1 parent 0cd46a1 commit 59945af

File tree

3 files changed

+14
-12
lines changed

3 files changed

+14
-12
lines changed

compiler/src/dotty/tools/dotc/interactive/Interactive.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -696,7 +696,7 @@ object Interactive {
696696
case pkg: PackageDef if immediatelyEnclosesRenaming(toName, pkg) =>
697697
EmptyTree
698698
case template: Template if immediatelyEnclosesRenaming(toName, template) =>
699-
cpy.Template(template)(constr = DefDef(template.constr.symbol.asTerm), self = EmptyValDef, body = Nil)
699+
cpy.Template(template)(constr = DefDef(template.constr.symbol.asTerm), self = template.self, body = Nil)
700700
case block @ Block(stats, expr) if immediatelyEnclosesRenaming(toName, block) =>
701701
EmptyTree
702702
case other =>

language-server/src/dotty/tools/languageserver/DottyLanguageServer.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,10 @@ class DottyLanguageServer extends LanguageServer
367367
// Selected a reference that has been renamed
368368
case (nameTree: NameTree) :: rest if Interactive.isRenamed(nameTree) =>
369369
val enclosing = rest.find {
370-
// If we selected one of the parents of this Template for doing the renaming, then this
371-
// Template cannot immediately enclose the rename we're interesting in (the renaming
372-
// happening inside its body cannot be used on the parents).
373-
case template: Template if template.parents.exists(_.pos.contains(pos.pos)) =>
370+
// If we selected one of the parents or the selftype of this Template for doing the
371+
// renaming, then this Template cannot immediately enclose the rename we're interesting
372+
// in (the renaming happening inside its body cannot be used on the parents or selftype).
373+
case template: Template if template.parents.exists(_.pos.contains(pos.pos)) || template.self.pos.contains(pos.pos) =>
374374
false
375375
case tree =>
376376
Interactive.immediatelyEnclosesRenaming(nameTree.name, tree)

language-server/test/dotty/tools/languageserver/RenameTest.scala

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class RenameTest {
158158
code"""import A.{C => ${m1}Renamed${m2}}
159159
object O {
160160
import A.{C => ${m3}Renamed${m4}}
161-
class C2 extends ${m5}Renamed${m6} {
161+
class C2 extends ${m5}Renamed${m6} { self: ${m15}Renamed${m16} =>
162162
import A.{C => ${m7}Renamed${m8}}
163163
}
164164
123 match {
@@ -176,18 +176,20 @@ class RenameTest {
176176

177177
testRename(m1, Set(m1 to m2))
178178
testRename(m2, Set(m1 to m2))
179-
testRename(m3, Set(m3 to m4, m5 to m6, m9 to m10))
180-
testRename(m4, Set(m3 to m4, m5 to m6, m9 to m10))
181-
testRename(m5, Set(m3 to m4, m5 to m6, m9 to m10))
182-
testRename(m6, Set(m3 to m4, m5 to m6, m9 to m10))
179+
testRename(m3, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
180+
testRename(m4, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
181+
testRename(m5, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
182+
testRename(m6, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
183183
testRename(m7, Set(m7 to m8))
184184
testRename(m8, Set(m7 to m8))
185-
testRename(m9, Set(m3 to m4, m5 to m6, m9 to m10))
186-
testRename(m10, Set(m3 to m4, m5 to m6, m9 to m10))
185+
testRename(m9, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
186+
testRename(m10, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
187187
testRename(m11, Set(m11 to m12, m13 to m14))
188188
testRename(m12, Set(m11 to m12, m13 to m14))
189189
testRename(m13, Set(m11 to m12, m13 to m14))
190190
testRename(m14, Set(m11 to m12, m13 to m14))
191+
testRename(m15, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
192+
testRename(m16, Set(m3 to m4, m5 to m6, m9 to m10, m15 to m16))
191193
}
192194

193195
}

0 commit comments

Comments
 (0)