Skip to content

Commit 413462d

Browse files
committed
IDE: Support rename on renamed self types
1 parent 01b55f8 commit 413462d

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
@@ -365,10 +365,10 @@ class DottyLanguageServer extends LanguageServer
365365
// Selected a reference that has been renamed
366366
case (nameTree: NameTree) :: rest if Interactive.isRenamed(nameTree) =>
367367
val enclosing = rest.find {
368-
// If we selected one of the parents of this Template for doing the renaming, then this
369-
// Template cannot immediately enclose the rename we're interesting in (the renaming
370-
// happening inside its body cannot be used on the parents).
371-
case template: Template if template.parents.exists(_.pos.contains(pos.pos)) =>
368+
// If we selected one of the parents or the selftype of this Template for doing the
369+
// renaming, then this Template cannot immediately enclose the rename we're interesting
370+
// in (the renaming happening inside its body cannot be used on the parents or selftype).
371+
case template: Template if template.parents.exists(_.pos.contains(pos.pos)) || template.self.pos.contains(pos.pos) =>
372372
false
373373
case tree =>
374374
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)