Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created...
Transcript of Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created...
![Page 1: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/1.jpg)
1
Build ServerBuild ServerProtocol and newProtocol and new
IDEAsIDEAs
![Page 2: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/2.jpg)
2
Justin Justin @ebenwert@ebenwert
Build tools engineer at I work on the IntelliJ sbt integrationI believe in tools before rules
Obsession: build tools complaints in Gitter
Jetbrains
![Page 3: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/3.jpg)
3
Jorge Jorge @jvican@jvican
Devtools for ~2.5 years at I co-maintain Scala's incremental compiler (Zinc)I work on build tools and build serversscalac, compiler plugins and infrastructure
Obsession: developer productivity
Scala Center
![Page 4: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/4.jpg)
4
AgendaAgenda1. The BSP IDEA2. The BSP protocol3. The BSP integrations
![Page 5: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/5.jpg)
5
GoalGoal1. Explain why BSP solves a real problem2. Share our �ndings with the audience
![Page 6: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/6.jpg)
6
How BSP came upHow BSP came up......
![Page 7: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/7.jpg)
7
Use case (I)Use case (I)Language serversLanguage servers
![Page 8: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/8.jpg)
8
Use case (II)Use case (II)EditorsEditors
![Page 9: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/9.jpg)
9
Build toolsBuild toolsAs the ultimate source of truthAs the ultimate source of truth
![Page 10: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/10.jpg)
10
100100 combinations! combinations!
![Page 11: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/11.jpg)
11
BSPBSP (Build Server Protocol) is an (Build Server Protocol) is anattempt to formalize theattempt to formalize the
communication between communication between languagelanguageserver/editorsserver/editors and and build toolsbuild tools..
![Page 12: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/12.jpg)
12
««LSPLSP creates the opportunity to reduce creates the opportunity to reducethe m-times-n complexity problem ofthe m-times-n complexity problem of
providing a high level of support for providing a high level of support for anyanyprogramming languageprogramming language in any editor, in any editor,IDE, or client endpoint to a simpler m-IDE, or client endpoint to a simpler m-
plus-n problem.» plus-n problem.» -- https://langserver.org/-- https://langserver.org/
![Page 13: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/13.jpg)
12
13
««BSPBSP creates the opportunity to reduce creates the opportunity to reducethe m-times-n complexity problem ofthe m-times-n complexity problem of
providing a high level of support for providing a high level of support for anyanybuild toolbuild tool in any editor, IDE, or client in any editor, IDE, or client
endpoint to a simpler m-plus-n problem.» endpoint to a simpler m-plus-n problem.» -- Justin and Jorge-- Justin and Jorge
![Page 14: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/14.jpg)
13
14
«Bejeezus, I just want bloody fast and«Bejeezus, I just want bloody fast andcorrect compiles for my team.» correct compiles for my team.» -- Sam Halliday, serious devtools engineer-- Sam Halliday, serious devtools engineer
![Page 15: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/15.jpg)
15
Developer productivity engineersDeveloper productivity engineerswant solutions that arewant solutions that are
1. Extensible2. Easy to maintain3. And ideally
1. Build tool independent2. Editor independent
![Page 16: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/16.jpg)
16
--- a/nothing.properties--- a/nothing.properties +++ b/bsp.properties+++ b/bsp.properties - build.tool.specific=true- build.tool.specific=true - one.time.effort=false- one.time.effort=false - shared.code=false- shared.code=false - robust=false- robust=false - easier.to.maintain=false- easier.to.maintain=false - easier.to.test=false- easier.to.test=false + build.tool.specific=false+ build.tool.specific=false + one.time.effort=true+ one.time.effort=true + shared.code=true+ shared.code=true + robust=true+ robust=true + easier.to.maintain=true+ easier.to.maintain=true + easier.to.test=true+ easier.to.test=true
![Page 17: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/17.jpg)
16
17
BSP ProtocolBSP Protocol
![Page 18: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/18.jpg)
18
Fundamentals IFundamentals I1. JSON-RPC-based protocol2. It has the notion of
Request/ResponseBidirectional noti�cations
![Page 19: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/19.jpg)
19
Fundamentals IIFundamentals II1. Modelled after LSP
Speci�cation follows same formatClient-driven designIt reuses some LSP methods, e.g.window/logMessagetextDocument/publishDiagnostics$/cancelRequest
2. Aims to be implementable alongisde LSP
![Page 20: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/20.jpg)
20
Server lifetimeServer lifetimeFiring up BSP serverFiring up BSP serverstdinstdin//stdoutstdoutTCP/UDP connections.TCP/UDP connections.Unix Sockets/Windows pipesUnix Sockets/Windows pipes
Initializing BSP connectionInitializing BSP connectionSimilar to TCP 3-way handshakeSimilar to TCP 3-way handshake
Shutting down the BSP serverShutting down the BSP server
![Page 21: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/21.jpg)
21
Server lifetimeServer lifetimeRequestRequest
Client Serverbuild/initialize
trait InitializeBuildParams { def rootUri: URI def capabilities: BuildClientCapabilities } trait BuildClientCapabilities { def languageIds: List[String] }
![Page 22: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/22.jpg)
22
Server lifetimeServer lifetimeResponseResponse
Server Clientresponse back
trait InitializeBuildResult { capabilities: BuildServerCapabilities } trait BuildServerCapabilities { compileProvider: Boolean testProvider: Boolean textDocumentBuildTargetsProvider: Boolean dependencySourcesProvider: Boolean buildTargetChangedProvider: Boolean }
![Page 23: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/23.jpg)
23
Server lifetimeServer lifetimeNotificationNotification
Client Serverbuild/initialized
trait InitializedBuildParams {}
![Page 24: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/24.jpg)
24
Server lifetimeServer lifetime
Client Serverbuild/shutdown
Client Serverbuild/exit
![Page 25: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/25.jpg)
25
Core data structureCore data structureA common notion of what a target is A common notion of what a target is
across different build tools and language serversacross different build tools and language servers
trait BuildTarget { def id: BuildTargetIdentifier def displayName: Option[String] def languageIds: List[String] def data: Option[Json] } trait URI { def uri: String } trait BuildTargetIdentifier { def uri: URI }
Build tool module Build target IDE module
![Page 26: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/26.jpg)
26
workspace/buildTargetsworkspace/buildTargetsClient => Server
trait WorkspaceBuildTargetsParams {}
Server => Clienttrait WorkspaceBuildTargetsResult { def targets: List[BuildTarget] }
![Page 27: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/27.jpg)
27
buildTarget/dependencySourcesbuildTarget/dependencySourcesClient => Server
trait DependencySourcesParams { def targets: List[BuildTargetIdentifier] }
Server => Clienttrait DependencySourcesResult { def items: List[DependencySourcesItem] } trait DependencySourcesItem { def target: BuildTargetIdentifier def sources: List[URI] }
![Page 28: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/28.jpg)
28
buildTarget/compilebuildTarget/compileClient => Server
trait CompileParams { def targets: List[BuildTargetIdentifier] def arguments: List[Json] }
Server => Clienttrait CompileReport { def items: List[CompileReportItem] } trait CompileReportItem { def target: BuildTargetIdentifier def errors: Long def warnings: Long def time: Option[Long] def linesOfCode: Option[Long] }
![Page 29: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/29.jpg)
29
buildTarget/testbuildTarget/testClient => Server
trait TestParams { def targets: List[BuildTargetIdentifier] def arguments: List[Json] }
Server => Clienttrait TestReport { def items: List[TestReportItem] } trait TestReportItem { def target: BuildTargetIdentifier def compileReport: Option[CompileReportItem] def passed: Long def failed: Long def ignored: Long def time: Option[Long] }
![Page 30: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/30.jpg)
30
Other BSP methodsOther BSP methodsNot covered in this presentation,Not covered in this presentation,
but present in the spec.but present in the spec.
buildTarget/didChangebuildTarget/dependencyResourcesbuildTarget/textDocumentstextDocument/buildTargets
![Page 31: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/31.jpg)
31
So... is BSP language agnostic?So... is BSP language agnostic?
Yes!Yes!
![Page 32: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/32.jpg)
32
Scala extension
BSP Core
Java extension Rust extension Javascript extension ...
Meet language extensionsMeet language extensionsExtensions formalize language-specific metadata, like:Extensions formalize language-specific metadata, like:
Which standard library to use.Which platform a language runs on.Which compilation �ags are enabled.
![Page 33: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/33.jpg)
33
Scala extensionScala extensiontrait ScalaBuildTarget { def scalaOrganization: String def scalaCompiler: String def scalaVersion: String def scalaBinaryVersion: String def platform: ScalaPlatform } object ScalaPlatform { val JVM = 1 val JS = 2 val Native = 3 }
![Page 34: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/34.jpg)
34
buildTarget/scalacOptionsbuildTarget/scalacOptionsClient => Server
trait ScalacOptionsParams { def targets: List[BuildTargetIdentifier] }
Server => Clienttrait ScalacOptionsResult { def items: List[ScalcOptionItem] } trait ScalacOptionsItem { def target: BuildTargetIdentifier def options: List[String] def classpath: List[String] def classDirectory: String }
![Page 35: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/35.jpg)
35
buildTarget/scalaTestClassesbuildTarget/scalaTestClassesClient => Server
trait ScalaTestClassesParams { def targets: List[BuildTargetIdentifier] }
Server => Clienttrait ScalaTestClassesResult { def items: List[ScalaTestClassesItem] } trait ScalaTestClassesItem { def target: BuildTargetIdentifier def classes: List[String] }
![Page 36: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/36.jpg)
36
On the roadmapOn the roadmapAdd BSP method for �le watching.Add compile progress noti�cations.Add BSP buildTarget/run.Enable remote compilation.
How do we handle repository state?Pass in diffs like LSP does.Relay repo synchronization to third-party.
![Page 37: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/37.jpg)
37
On the roadmapOn the roadmapOn the lookout for feedback
Formal proposal to STP-WG
Scala/Scala.js-based client integrations:vimvscodesublime/atom
scalacenter/bsp
![Page 38: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/38.jpg)
38
IntelliJ integrationIntelliJ integration
![Page 39: Build Server Protocol and new IDEAsChat on Bloop's Gitter. Chat on intellij-scala's Gitter. Created Date: 6/13/2018 9:35:56 AM ...](https://reader036.fdocuments.in/reader036/viewer/2022081402/6056961df163fb37e26ad186/html5/thumbnails/39.jpg)
39
Thanks.Thanks.Do you want to learn more?
Come talk to us!Help improve the spec in
scalacenter/bspChat on Bloop's Gitter.Chat on intellij-scala's Gitter.