Skip to main content

Scala Extension

The following section contains Scala-specific extensions to the build server protocol.

BSP version

2.2.0

BSP Server remote interface

BuildTargetScalacOptions: request

The build target scalac options request is sent from the client to the server to query for the list of compiler options necessary to compile in a given list of targets.

  • method: buildTarget/scalacOptions
  • params: ScalacOptionsParams
  • result: ScalacOptionsResult

ScalacOptionsParams

export interface ScalacOptionsParams {
targets: BuildTargetIdentifier[];
}

ScalacOptionsResult

export interface ScalacOptionsResult {
items: ScalacOptionsItem[];
}

ScalacOptionsItem

export interface ScalacOptionsItem {
target: BuildTargetIdentifier;

/** Additional arguments to the compiler.
* For example, -deprecation. */
options: string[];

/** The dependency classpath for this target, must be
* identical to what is passed as arguments to
* the -classpath flag in the command line interface
* of scalac.
* Deprecated: When the jvmCompileClasspath capability is supported, this might be empty and the buildTarget/jvmCompileClasspath endpoint should be used instead. */
classpath: string[];

/** The output directory for classfiles produced by this target */
classDirectory: string;
}

BuildTargetScalaTestClasses: request

Deprecated: Use buildTarget/jvmTestEnvironment instead

The Scala build target test classes request is sent from the client to the server to query for the list of fully qualified names of test classes in a given list of targets.

This method can for example be used by a client to:

  • Show a list of the discovered classes that can be tested.
  • Attach a "Run test suite" button above the definition of a test suite via textDocument/codeLens.

(To render the code lens, the language server needs to map the fully qualified names of the test targets to the defining source file via textDocument/definition. Then, once users click on the button, the language server can pass the fully qualified name of the test class as an argument to the buildTarget/test request.)

This request may trigger a compilation on the selected build targets. The server is free to send any number of build/task*, build/publishDiagnostics and build/logMessage notifications during compilation before completing the response.

The client will get a originId field in ScalaTestClassesResult if the originId field in the ScalaTestClassesParams is defined.

  • method: buildTarget/scalaTestClasses
  • params: ScalaTestClassesParams
  • result: ScalaTestClassesResult

ScalaTestClassesParams

export interface ScalaTestClassesParams {
targets: BuildTargetIdentifier[];

/** An optional number uniquely identifying a client request. */
originId?: string;
}

ScalaTestClassesResult

export interface ScalaTestClassesResult {
/** An optional id of the request that triggered this result. */
items: ScalaTestClassesItem[];
}

ScalaTestClassesItem

export interface ScalaTestClassesItem {
/** The build target that contains the test classes. */
target: BuildTargetIdentifier;

/** Name of the the framework to which classes belong.
* It's optional in order to maintain compatibility, however it is expected
* from the newer implementations to not leave that field unspecified. */
framework?: string;

/** The fully qualified names of the test classes in this target */
classes: string[];
}

BuildTargetScalaMainClasses: request

Deprecated: Use buildTarget/jvmRunEnvironment instead

The build target main classes request is sent from the client to the server to query for the list of main classes that can be fed as arguments to buildTarget/run. This method can be used for the same use cases than the Scala Test Classes Request enables. This request may trigger a compilation on the selected build targets. The server is free to send any number of build/taskStart, build/taskProgress, build/taskFinish, build/publishDiagnostics and build/logMessage notifications during compilation before completing the response. The client will get a originId field in ScalaMainClassesResult if the originId field in the ScalaMainClassesParams is defined.

  • method: buildTarget/scalaMainClasses
  • params: ScalaMainClassesParams
  • result: ScalaMainClassesResult

ScalaMainClassesParams

export interface ScalaMainClassesParams {
targets: BuildTargetIdentifier[];

/** An optional number uniquely identifying a client request. */
originId?: string;
}

ScalaMainClassesResult

export interface ScalaMainClassesResult {
items: ScalaMainClassesItem[];

/** An optional id of the request that triggered this result. */
originId?: string;
}

ScalaMainClassesItem

export interface ScalaMainClassesItem {
/** The build target that contains the test classes. */
target: BuildTargetIdentifier;

/** The main class item. */
classes: ScalaMainClass[];
}

ScalaMainClass

export interface ScalaMainClass {
/** The main class to run. */
className: string;

/** The user arguments to the main entrypoint.
* Deprecated: Use `buildTarget/run` params instead */
arguments: string[];

/** The jvm options for the application. */
jvmOptions: string[];

/** The environment variables for the application.
* Deprecated: Use `buildTarget/run` params instead */
environmentVariables?: string[];
}

BuildTargetData kinds

ScalaBuildTarget

This structure is embedded in the data?: BuildTargetData field, when the dataKind field contains "scala".

ScalaBuildTarget

ScalaBuildTarget is a basic data structure that contains scala-specific metadata for compiling a target containing Scala sources.

export interface ScalaBuildTarget {
/** The Scala organization that is used for a target. */
scalaOrganization: string;

/** The scala version to compile this target */
scalaVersion: string;

/** The binary version of scalaVersion.
* For example, 2.12 if scalaVersion is 2.12.4. */
scalaBinaryVersion: string;

/** The target platform for this target */
platform: ScalaPlatform;

/** A sequence of Scala jars such as scala-library, scala-compiler and scala-reflect. */
jars: URI[];

/** The jvm build target describing jdk to be used */
jvmBuildTarget?: JvmBuildTarget;
}

ScalaPlatform

export enum ScalaPlatform {
Jvm = 1,

Js = 2,

Native = 3,
}

DebugSessionParamsData kinds

ScalaAttachRemote

This structure is embedded in the data?: DebugSessionParamsData field, when the dataKind field contains "scala-attach-remote".

ScalaAttachRemote

The debug session will connect to a running process. The DAP client will send the port of the running process later.

export interface ScalaAttachRemote {}

ScalaMainClass

This structure is embedded in the data?: DebugSessionParamsData field, when the dataKind field contains "scala-main-class".

DiagnosticData kinds

ScalaDiagnostic

This structure is embedded in the data?: DiagnosticData field, when the dataKind field contains "scala".

ScalaDiagnostic

ScalaDiagnostic is a data structure that contains Scala-specific metadata generated by Scala compilation.

export interface ScalaDiagnostic {
/** Actions (also known as quick fixes) that are able to either fix or address
* the issue that is causing this diagnostic. */
actions?: ScalaAction[];
}

ScalaAction

A Scala action represents a change that can be performed in code. See also LSP: Code Action Request.

Note: In LSP, CodeAction appears only as a response to a textDocument/codeAction request, whereas ScalaAction is intended to be returned as Diagnostics.data.actions.

export interface ScalaAction {
/** A short, human-readable, title for this code action. */
title: string;

/** A description that may be shown to the user client side to explain the action. */
description?: string;

/** The workspace edit this code action performs. */
edit?: ScalaWorkspaceEdit;
}

ScalaWorkspaceEdit

A workspace edit represents changes to many resources managed in the workspace.

export interface ScalaWorkspaceEdit {
changes: ScalaTextEdit[];
}

ScalaTextEdit

A textual edit applicable to a text document.

export interface ScalaTextEdit {
/** The range of the text document to be manipulated. To insert
* text into a document create a range where start === end. */
range: Range;

/** The string to be inserted. For delete operations use an
* empty string. */
newText: string;
}

RunParamsData kinds

ScalaMainClass

This structure is embedded in the data?: RunParamsData field, when the dataKind field contains "scala-main-class".

TestParamsData kinds

ScalaTestParams

This structure is embedded in the data?: TestParamsData field, when the dataKind field contains "scala-test".

ScalaTestParams

ScalaTestParams contains scala-specific metadata for testing Scala targets.

export interface ScalaTestParams {
/** The test classes to be run in this test execution.
* It is the result of `buildTarget/scalaTestClasses`. */
testClasses?: ScalaTestClassesItem[];

/** The JVM options to run tests with. They replace any options
* that are defined by the build server if defined. */
jvmOptions?: string[];
}

ScalaTestSuiteClasses

This structure is embedded in the data?: TestParamsData field, when the dataKind field contains "scala-test-suites".

ScalaTestSuiteClasses

Each element of this array is a fully qualified class name.

export type ScalaTestSuiteClasses = string[];

ScalaTestSuites

This structure is embedded in the data?: TestParamsData field, when the dataKind field contains "scala-test-suites-selection".

ScalaTestSuites

export interface ScalaTestSuites {
/** The fully qualified names of the test classes in this target and the tests in this test classes */
suites: ScalaTestSuiteSelection[];

/** Additional jvmOptions which will be passed to the forked JVM */
jvmOptions: string[];

/** Enviroment variables should be an array of strings in format KEY=VALUE
* Deprecated: Use `buildTarget/test` params instead */
environmentVariables: string[];
}

ScalaTestSuiteSelection

export interface ScalaTestSuiteSelection {
/** Fully qualified name of the test suite class */
className: string;

/** List of tests which should be run within this test suite.
* Empty collection means that all of them are supposed to be executed. */
tests: string[];
}