diff --git a/.scalafmt.conf b/.scalafmt.conf index 1e73a3f50..aa2599535 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.7.7" +version = "3.7.8" project.git = true align.preset = none align.stripMargin = true diff --git a/modules/core/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/ScalaUnpickler.scala b/modules/core/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/ScalaUnpickler.scala index cd09eba5e..b61a5fc6d 100644 --- a/modules/core/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/ScalaUnpickler.scala +++ b/modules/core/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/ScalaUnpickler.scala @@ -56,7 +56,6 @@ abstract class ScalaUnpickler(scalaVersion: ScalaVersion, testMode: Boolean) ext // TODO in Scala 3 we should be able to find the symbol of a local class using TASTy Query else if (isLocalClass(method.declaringType)) Some(formatJava(method)) else if (scalaVersion.isScala2 && isNestedClass(method.declaringType)) Some(formatJava(method)) - else if (isDefaultValue(method)) Some(formatJava(method)) else try formatScala(method) catch { diff --git a/modules/tests/src/test/scala/ch/epfl/scala/debugadapter/ScalaStackTraceTests.scala b/modules/tests/src/test/scala/ch/epfl/scala/debugadapter/ScalaStackTraceTests.scala index e9fc15190..237209cfc 100644 --- a/modules/tests/src/test/scala/ch/epfl/scala/debugadapter/ScalaStackTraceTests.scala +++ b/modules/tests/src/test/scala/ch/epfl/scala/debugadapter/ScalaStackTraceTests.scala @@ -184,6 +184,38 @@ class ScalaStackTraceTests extends DebugTestSuite { } + test("should show the correct stack trace when using default values") { + val source = + """|package example + |def m1(y : Int)(z : Int , x: Int = m2(y)): Int = { + | x * 2 + |} + | + |def m2(t : Int ) : Int = { + | t*2 + |} + | + |object Main { + | def main(args: Array[String]): Unit = { + | println(m1(2)(3)) + | } + |} + |""".stripMargin + implicit val debuggee: TestingDebuggee = TestingDebuggee.mainClass(source, "example.Main", scalaVersion) + + check( + Breakpoint( + 7, + List( + "example.m2(t: Int): Int", + "example.m1.(y: Int): Int", + "Main.main(args: Array[String]): Unit" + ) + ) + ) + + } + test("correct stacktrace with a lazy val") { val source = """|package example @@ -216,7 +248,6 @@ class ScalaStackTraceTests extends DebugTestSuite { ) ) ) - } } diff --git a/modules/unpickler/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3Unpickler.scala b/modules/unpickler/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3Unpickler.scala index b2aadf2fa..fa2264494 100644 --- a/modules/unpickler/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3Unpickler.scala +++ b/modules/unpickler/src/main/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3Unpickler.scala @@ -182,7 +182,11 @@ class Scala3Unpickler( case owner: ClassSymbol if isPackageObject(owner.name) => formatSymbol(owner.owner) case owner: TermOrTypeSymbol => formatSymbol(owner) case owner: PackageSymbol => "" - if prefix.isEmpty then sym.name.toString else s"$prefix.${sym.name}" + val symName = sym.name match + case DefaultGetterName(termName, num) => s"${termName.toString()}." + case _ => sym.name.toString() + + if prefix.isEmpty then symName else s"$prefix.${symName}" private def isPackageObject(name: Name): Boolean = name.toString == "package" || name.toString.endsWith("$package") diff --git a/modules/unpickler/src/test/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3UnpicklerTests.scala b/modules/unpickler/src/test/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3UnpicklerTests.scala index 3b03b2c3a..654e0826e 100644 --- a/modules/unpickler/src/test/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3UnpicklerTests.scala +++ b/modules/unpickler/src/test/scala/ch/epfl/scala/debugadapter/internal/stacktrace/Scala3UnpicklerTests.scala @@ -335,10 +335,14 @@ abstract class Scala3UnpicklerTests(val scalaVersion: ScalaVersion) extends FunS val debuggee = TestingDebuggee.mainClass(source, "example.Main", scalaVersion) val unpickler = getUnpickler(debuggee) - unpickler.assertFormat("example.A", "java.lang.String m$default$1()", "A.m$default$1: String") - unpickler.assertFormat("example.A", "int m$default$2()", "A.m$default$2: Int") - unpickler.assertFormat("example.A$", "java.lang.String $lessinit$greater$default$1()", "A.$default$1: String") - unpickler.assertFormat("example.A$", "int $lessinit$greater$default$2()", "A.$default$2: Int") + unpickler.assertFormat("example.A", "java.lang.String m$default$1()", "A.m.: String") + unpickler.assertFormat("example.A", "int m$default$2()", "A.m.: Int") + unpickler.assertFormat( + "example.A$", + "java.lang.String $lessinit$greater$default$1()", + "A..: String" + ) + unpickler.assertFormat("example.A$", "int $lessinit$greater$default$2()", "A..: Int") } test("matches on return types") { diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 594120c2a..6ab78a693 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -34,7 +34,7 @@ object Dependencies { val scalaParallelCollection = "org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.4" val scalaCollectionCompat = "org.scala-lang.modules" %% "scala-collection-compat" % "2.11.0" val sbtTestAgent = "org.scala-sbt" % "test-agent" % "1.9.1" - val scalaMeta = ("org.scalameta" %% "parsers" % "4.8.2").cross(CrossVersion.for3Use2_13) + val scalaMeta = ("org.scalameta" %% "parsers" % "4.8.3").cross(CrossVersion.for3Use2_13) // test dependencies val munit = "org.scalameta" %% "munit" % "1.0.0-M8"