Skip to content

Actionable diagnostics #1229

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Aug 19, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Use persistent logger to forward diagnostics to bsp
  • Loading branch information
lwronski committed Aug 3, 2022
commit 35a624cc4644723fd6bd972a69118ebf0f6981d2
2 changes: 1 addition & 1 deletion modules/build/src/main/scala/scala/build/bsp/BspImpl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ final class BspImpl(

if (actionableDiagnostics.getOrElse(false)) {
val projectOptions = options0Test.orElse(options0Main)
projectOptions.logActionableDiagnostics(logger)
projectOptions.logActionableDiagnostics(persistentLogger)
}

PreBuildProject(mainScope, testScope, persistentLogger.diagnostics)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ final case class VerbosityOptions(
verbose: Int @@ Counter = Tag.of(0),
@HelpMessage("Interactive mode")
@Name("i")
interactive: Option[Boolean] = None
interactive: Option[Boolean] = None,
@HelpMessage("Enable actionable diagnostics")
actions: Option[Boolean] = None
) {
// format: on

Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Bsp.scala
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ object Bsp extends ScalaCommand[BspOptions] {
CurrentParams.workspaceOpt = Some(inputs.workspace)
val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

BspThreads.withThreads { threads =>
val bsp = scala.build.bsp.Bsp.create(
Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Compile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ object Compile extends ScalaCommand[CompileOptions] {
val compilerMaker = options.shared.compilerMaker(threads)
val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

if (options.watch.watchMode) {
val watcher = Build.watch(
Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Doc.scala
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ object Doc extends ScalaCommand[DocOptions] {

val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

val builds =
Build.build(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ object Metabrowse extends ScalaCommand[MetabrowseOptions] {
val compilerMaker = options.shared.compilerMaker(threads)
val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

val builds =
Build.build(
Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ object Package extends ScalaCommand[PackageOptions] {
val cross = options.compileCross.cross.getOrElse(false)
val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

if (options.watch.watchMode) {
var expectedModifyEpochSecondOpt = Option.empty[Long]
Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Repl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ object Repl extends ScalaCommand[ReplOptions] {
val cross = options.compileCross.cross.getOrElse(false)
val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

if (inputs.isEmpty) {
val artifacts = initialBuildOptions.artifacts(logger, Scope.Main).orExit(logger)
Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Run.scala
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ object Run extends ScalaCommand[RunOptions] {

val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

if (options.watch.watchMode) {
var processOpt = Option.empty[(Process, CompletableFuture[_])]
Expand Down
3 changes: 2 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Test.scala
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ object Test extends ScalaCommand[TestOptions] {
val cross = options.compileCross.cross.getOrElse(false)
val configDb = ConfigDb.open(options.shared.directories.directories)
.orExit(logger)
val actionableDiagnostics = configDb.get(Keys.actions).getOrElse(None)
val actionableDiagnostics =
options.shared.logging.verbosityOptions.actions.orElse(configDb.get(Keys.actions).getOrElse(None))

def maybeTest(builds: Builds, allowExit: Boolean): Unit = {
val optionsKeys = builds.map.keys.toVector.map(_.optionsKey).distinct
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1140,6 +1140,48 @@ abstract class BspTestDefinitions(val scalaVersionOpt: Option[String])
}
}
}
test("bsp should report actionable diagnostic when enabled") {
val inputs = TestInputs(
Seq(
os.rel / "Hello.scala" ->
s"""//> using lib "com.lihaoyi::os-lib:0.7.8"
|
|object Hello extends App {
| println("Hello")
|}
|""".stripMargin
)
)
withBsp(inputs, Seq(".", "--actions")) {
(root, localClient, remoteServer) =>
async {
// prepare build
val buildTargetsResp = await(remoteServer.workspaceBuildTargets().asScala)
// build code
val targets = buildTargetsResp.getTargets.asScala.map(_.getId()).asJava
await(remoteServer.buildTargetCompile(new b.CompileParams(targets)).asScala)

val visibleDiagnostics =
localClient.diagnostics().takeWhile(!_.getReset).flatMap(_.getDiagnostics.asScala)

expect(visibleDiagnostics.nonEmpty)
expect(visibleDiagnostics.length == 1)

val updateActionableDiagnostic = visibleDiagnostics.head

checkDiagnostic(
diagnostic = updateActionableDiagnostic,
expectedMessage = "com.lihaoyi::os-lib:0.7.8 is outdated",
expectedSeverity = b.DiagnosticSeverity.WARNING,
expectedStartLine = 0,
expectedStartCharacter = 15,
expectedEndLine = 0,
expectedEndCharacter = 40,
strictlyCheckMessage = false
)
}
}
}
private def checkIfBloopProjectIsInitialised(
root: os.Path,
buildTargetsResp: b.WorkspaceBuildTargetsResult
Expand Down