From d68748648b03905612a28cdc59f9c07e75290611 Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Fri, 7 Mar 2025 12:04:13 -0500 Subject: [PATCH] improve error messages when no main classes can be found --- .../internal/metals/WorkspaceLspService.scala | 16 +++++++++++++--- .../metals/debug/DiscoveryFailures.scala | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/metals/src/main/scala/scala/meta/internal/metals/WorkspaceLspService.scala b/metals/src/main/scala/scala/meta/internal/metals/WorkspaceLspService.scala index c22d39d91e4..868d46c20dc 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/WorkspaceLspService.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/WorkspaceLspService.scala @@ -882,10 +882,20 @@ class WorkspaceLspService( } }(_ => true) .flatMap { mains => - mains.headOption.fold( + mains.fold( Future.failed[DebugSessionParams]( - DiscoveryFailures - .NoMainClassFoundException(unresolvedParams.mainClass) + Option(unresolvedParams.buildTarget) + .map(buildTarget => + DiscoveryFailures + .ClassNotFoundInBuildTargetException( + unresolvedParams.mainClass, + buildTarget, + ) + ) + .getOrElse( + DiscoveryFailures + .NoMainClassFoundException(unresolvedParams.mainClass) + ) ) )(Future.successful(_)) } diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/DiscoveryFailures.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/DiscoveryFailures.scala index 4e2c9d7ca63..b9ffd4fbb84 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/DiscoveryFailures.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/DiscoveryFailures.scala @@ -21,13 +21,13 @@ object DiscoveryFailures { className: String, buildTarget: String, ) extends Exception( - s"Class '$className' not found in build target '${buildTarget}'" + s"Main class '$className' not found in build target '${buildTarget}' (not considering dependencies)" ) case class NoMainClassFoundException( className: String ) extends Exception( - s"Class '$className' not found in any build target" + s"Main class '$className' not found in any build target (not considering dependencies)" ) case class BuildTargetNotFoundForPathException(path: AbsolutePath)