Skip to content

Commit

Permalink
ask if should import
Browse files Browse the repository at this point in the history
  • Loading branch information
kasiaMarek committed Feb 16, 2024
1 parent 4c59ad7 commit dcb090a
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import scala.concurrent.ExecutionContext
import scala.concurrent.Future

import scala.meta.internal.builds.Digest.Status
import scala.meta.internal.metals.AutoImportBuildKind
import scala.meta.internal.metals.BuildInfo
import scala.meta.internal.metals.Confirmation
import scala.meta.internal.metals.Messages._
Expand Down Expand Up @@ -133,9 +132,7 @@ final class BloopInstall(
scribe.info(s"skipping build import with status '${result.name}'")
Future.successful(result)
case _ =>
if (
userConfig().automaticImportBuild == AutoImportBuildKind.Initial || userConfig().automaticImportBuild == AutoImportBuildKind.All
) {
if (userConfig().shouldAutoImportNewProject) {
runUnconditionally(buildTool, isImportInProcess)
} else {
scribe.debug("Awaiting user response...")
Expand Down
25 changes: 25 additions & 0 deletions metals/src/main/scala/scala/meta/internal/metals/Messages.scala
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,31 @@ object Messages {
}
}

object GenerateBspAndConnect {
def yes = new MessageActionItem("Connect")

def notNow: MessageActionItem = Messages.notNow

def params(
buildToolName: String,
buildServerName: String,
): ShowMessageRequestParams = {
val params = new ShowMessageRequestParams()
params.setMessage(
s"New $buildToolName workspace detected, would you like connect to $buildServerName build server?"
)
params.setType(MessageType.Info)
params.setActions(
List(
yes,
notNow,
dontShowAgain,
).asJava
)
params
}
}

object MainClass {
val message = "Multiple main classes found. Which would you like to run?"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2126,14 +2126,28 @@ class MetalsLspService(
.flatMap(_ => quickConnectToBuildServer())
case Some(BuildTool.Found(buildTool: BuildServerProvider, _))
if !buildTool.isBspGenerated(folder) =>
tables.buildServers.chooseServer(buildTool.buildServerName)
buildTool
.generateBspConfig(
folder,
args => bspConfigGenerator.runUnconditionally(buildTool, args),
statusBar,
)
.flatMap(_ => quickConnectToBuildServer())
val notification = tables.dismissedNotifications.ImportChanges
if (userConfig.shouldAutoImportNewProject) {
generateBspAndConnect(buildTool)
} else if (notification.isDismissed) {
Future.successful(BuildChange.None)
} else {
scribe.debug("Awaiting user response...")
languageClient
.showMessageRequest(
Messages.GenerateBspAndConnect
.params(buildTool.executableName, buildTool.buildServerName)
)
.asScala
.flatMap { item =>
if (item == Messages.dontShowAgain) {
notification.dismissForever()
Future.successful(BuildChange.None)
} else if (item == Messages.GenerateBspAndConnect.yes) {
generateBspAndConnect(buildTool)
} else Future.successful(BuildChange.None)
}
}
case Some(BuildTool.Found(buildTool, _))
if !chosenBuildServer.exists(
_ == buildTool.buildServerName
Expand All @@ -2157,6 +2171,19 @@ class MetalsLspService(
}
}

def generateBspAndConnect(
buildTool: BuildServerProvider
): Future[BuildChange] = {
tables.buildServers.chooseServer(buildTool.buildServerName)
buildTool
.generateBspConfig(
folder,
args => bspConfigGenerator.runUnconditionally(buildTool, args),
statusBar,
)
.flatMap(_ => quickConnectToBuildServer())
}

/**
* If there is no auto-connectable build server and no supported build tool is found
* we assume it's a scala-cli project.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ case class UserConfiguration(
preferredBuildServes: List[String] = Nil,
) {

def shouldAutoImportNewProject: Boolean =
automaticImportBuild != AutoImportBuildKind.Off

def currentBloopVersion: String =
bloopVersion.getOrElse(BuildInfo.bloopVersion)

Expand Down
17 changes: 13 additions & 4 deletions tests/slow/src/test/scala/tests/PreferredBuildServer.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package tests

import scala.meta.internal.metals.Messages
import scala.meta.internal.metals.UserConfiguration
import scala.meta.internal.metals.{BuildInfo => V}

Expand All @@ -10,6 +11,15 @@ class PreferredBuildServer extends BaseLspSuite("preferred-build-server") {
test("start-sbt-when-preferred-no-bsp") {
cleanWorkspace()

val importMessage =
Messages.GenerateBspAndConnect.params("sbt", "sbt").getMessage()

client.showMessageRequestHandler = msg => {
if (msg.getMessage() == importMessage)
Some(Messages.GenerateBspAndConnect.notNow)
else None
}

val fileLayout =
s"""|/project/build.properties
|sbt.version=${V.sbtVersion}
Expand All @@ -28,12 +38,11 @@ class PreferredBuildServer extends BaseLspSuite("preferred-build-server") {
for {
_ <- server.initialize()
_ <- server.initialized()
_ <- server.server.buildServerPromise.future
_ = assertNoDiff(
server.server.tables.buildServers.selectedServer().get,
"sbt",
client.workspaceMessageRequests,
importMessage,
)
_ = assert(server.server.bspSession.exists(_.main.isSbt))
_ = assert(server.server.bspSession.isEmpty)
} yield ()
}

Expand Down

0 comments on commit dcb090a

Please sign in to comment.