From e1d12f55bffb0992830d6692d79dd4baf74c6359 Mon Sep 17 00:00:00 2001 From: Luigi Frunzio Date: Thu, 20 May 2021 20:44:02 +0200 Subject: [PATCH 1/2] Add message when trying to attach a session and the buildTarget is not defined. --- .../scala/scala/meta/internal/metals/Messages.scala | 7 +++++++ .../meta/internal/metals/debug/DebugProvider.scala | 11 +++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/metals/src/main/scala/scala/meta/internal/metals/Messages.scala b/metals/src/main/scala/scala/meta/internal/metals/Messages.scala index 253c581c5ab..c3202c55de9 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/Messages.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/Messages.scala @@ -487,6 +487,13 @@ object Messages { show = true ) + def DebugInvalidBuildTargetConf(): MessageParams = { + new MessageParams( + MessageType.Error, + s"Debugger configuration is missing 'buildTarget' param." + ) + } + object DebugClassNotFound { def invalidTargetClass(cls: String, target: String): MessageParams = { diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala index faeac2535d9..066b095beea 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala @@ -393,8 +393,8 @@ class DebugProvider( def resolveAttachRemoteParams( params: DebugUnresolvedAttachRemoteParams - ): Future[b.DebugSessionParams] = - buildTargets.findByDisplayName(params.buildTarget) match { + )(implicit ec: ExecutionContext): Future[b.DebugSessionParams] = { + val result = buildTargets.findByDisplayName(params.buildTarget) match { case Some(target) => Future.successful( new b.DebugSessionParams( @@ -406,6 +406,9 @@ class DebugProvider( case None => Future.failed(new ju.NoSuchElementException(params.buildTarget)) } + result.failed.foreach(reportErrors) + result + } private val reportErrors: PartialFunction[Throwable, Unit] = { case _ if buildClient.buildHasErrors => @@ -440,6 +443,10 @@ class DebugProvider( languageClient.showMessage( Messages.errorMessageParams(e.getMessage()) ) + case _: ju.NoSuchElementException => + languageClient.showMessage( + Messages.DebugInvalidBuildTargetConf() + ) case e: NoTestsFoundException => languageClient.showMessage( Messages.errorMessageParams(e.getMessage()) From 033a93dd4a1509dade966d7f9433fd2aaca23c8f Mon Sep 17 00:00:00 2001 From: Luigi Frunzio Date: Fri, 21 May 2021 10:28:30 +0200 Subject: [PATCH 2/2] use custom exception --- .../main/scala/scala/meta/internal/metals/Messages.scala | 7 ------- .../internal/metals/debug/BuildTargetClassesFinder.scala | 3 +++ .../scala/meta/internal/metals/debug/DebugProvider.scala | 6 +++--- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/metals/src/main/scala/scala/meta/internal/metals/Messages.scala b/metals/src/main/scala/scala/meta/internal/metals/Messages.scala index c3202c55de9..253c581c5ab 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/Messages.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/Messages.scala @@ -487,13 +487,6 @@ object Messages { show = true ) - def DebugInvalidBuildTargetConf(): MessageParams = { - new MessageParams( - MessageType.Error, - s"Debugger configuration is missing 'buildTarget' param." - ) - } - object DebugClassNotFound { def invalidTargetClass(cls: String, target: String): MessageParams = { diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala index d191c498d84..6b90138d189 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala @@ -143,6 +143,9 @@ class BuildTargetClassesFinder( case class BuildTargetNotFoundException(buildTargetName: String) extends Exception(s"Build target not found: $buildTargetName") +case class BuildTargetUndefinedException() + extends Exception("Debugger configuration is missing 'buildTarget' param.") + case class ClassNotFoundInBuildTargetException( className: String, buildTarget: b.BuildTarget diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala index 066b095beea..1eb8fa44431 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala @@ -404,7 +404,7 @@ class DebugProvider( ) ) case None => - Future.failed(new ju.NoSuchElementException(params.buildTarget)) + Future.failed(BuildTargetUndefinedException()) } result.failed.foreach(reportErrors) result @@ -443,9 +443,9 @@ class DebugProvider( languageClient.showMessage( Messages.errorMessageParams(e.getMessage()) ) - case _: ju.NoSuchElementException => + case e: BuildTargetUndefinedException => languageClient.showMessage( - Messages.DebugInvalidBuildTargetConf() + Messages.errorMessageParams(e.getMessage()) ) case e: NoTestsFoundException => languageClient.showMessage(