diff --git a/presentation-compiler/src/main/dotty/tools/pc/completions/OverrideCompletions.scala b/presentation-compiler/src/main/dotty/tools/pc/completions/OverrideCompletions.scala index 807f959a2406..f01a1e9b8cd8 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/completions/OverrideCompletions.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/completions/OverrideCompletions.scala @@ -511,10 +511,10 @@ object OverrideCompletions: Context ): Option[Int] = defn match - case td: TypeDef if text.charAt(td.rhs.span.end) == ':' => + case td: TypeDef if (td.rhs.span.end < text.length) && text.charAt(td.rhs.span.end) == ':' => Some(td.rhs.span.end) case TypeDef(_, temp : Template) => - temp.parentsOrDerived.lastOption.map(_.span.end).filter(text.charAt(_) == ':') + temp.parentsOrDerived.lastOption.map(_.span.end).filter(idx => text.length > idx && text.charAt(idx) == ':') case _ => None private def fallbackFromParent(parent: Tree, name: String)(using Context) = diff --git a/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala index 2df69cc85af2..a566ca35d3bc 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala @@ -75,39 +75,59 @@ class AutoImplementAbstractMembersSuite extends BaseCodeActionSuite: |""".stripMargin ) - @Test def `empty-lines-between-members` = + @Test def `no-new-line` = checkEdit( """|package a - | - |object A { - | trait Base { - | def foo(x: Int): Int - | def bar(x: String): String - | } - | class <> extends Base { - | - | def bar(x: String): String = ??? - | - | } - |} - |""".stripMargin, + | + |trait X: + | def foo: Unit + | + |class <> extends X""".stripMargin, """|package a | - |object A { - | trait Base { - | def foo(x: Int): Int - | def bar(x: String): String - | } - | class Concrete extends Base { - | + |trait X: + | def foo: Unit | - | override def foo(x: Int): Int = ??? + |class Y extends X { | - | def bar(x: String): String = ??? + | override def foo: Unit = ??? | - | } - |} - |""".stripMargin + |}""".stripMargin, + ) + + @Test def `empty-lines-between-members` = + checkEdit( + """|package a + | + |object A { + | trait Base { + | def foo(x: Int): Int + | def bar(x: String): String + | } + | class <> extends Base { + | + | def bar(x: String): String = ??? + | + | } + |} + |""".stripMargin, + """|package a + | + |object A { + | trait Base { + | def foo(x: Int): Int + | def bar(x: String): String + | } + | class Concrete extends Base { + | + | + | override def foo(x: Int): Int = ??? + | + | def bar(x: String): String = ??? + | + | } + |} + |""".stripMargin ) @Test def `objectdef` =