Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

@ebenwert Integrating Developer Experiences Integrating Developer Experiences Build Server Protocol and beyond … Justin Kaeser @ebenwert IntelliJ Scala Team JetBrains @IntelliJScala

Slide 4

Slide 4 text

@ebenwert Integrating Developer Experiences Return of the One- Job-T ool build tools, dependency managers, test frameworks … cross-platform, command line interface, programmable run in a variety of contexts

Slide 5

Slide 5 text

@ebenwert Integrating Developer Experiences Integration Issues … idiosyncratic configuration, APIs special-purpose integrations IntelliJ + ScalaTest/Specs IntelliJ + sbt IntelliJ + Akka, Play, Scalafmt, … likewise: bloop + sbt/Mill/ Maven…

Slide 6

Slide 6 text

@ebenwert Integrating Developer Experiences Build T ools in Scala lots of choices little coherence “But I just want to use my favorite frontend!”

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

@ebenwert Integrating Developer Experiences Language Server Protocol addresses major integration bottleneck: editor+compiler standard way for editor to communicate with language server works on file/folder level

Slide 9

Slide 9 text

@ebenwert Integrating Developer Experiences LSP + IDE Challenges LSP does not model structure of codebase no common concept of build/test/run IntelliJ-specific: LSP does not model syntax tree

Slide 10

Slide 10 text

@ebenwert Integrating Developer Experiences Emerging Wrath New Build Tool: Fury

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

@ebenwert Integrating Developer Experiences Build Server Protocol extends / complements LSP integrates build tools and IDEs / language servers abstracts project model into a few generic concepts common operations as requests with defined semantics

Slide 13

Slide 13 text

@ebenwert Integrating Developer Experiences client-server protocol, bidirectional client sends requests server sends notifications BSP Concepts

Slide 14

Slide 14 text

@ebenwert Integrating Developer Experiences Server Discovery connection file specify how to start local bsp server communication via stdin/stdout

Slide 15

Slide 15 text

@ebenwert Integrating Developer Experiences Lifecycle client → server: build/initialize server → client: build/initialized client → server: build/shutdown client → server: build/exit

Slide 16

Slide 16 text

@ebenwert Integrating Developer Experiences Build Structure workspace/buildTargets capabilities language-specific data dependencies buildTarget/sources source directories and files

Slide 17

Slide 17 text

@ebenwert Integrating Developer Experiences Build Actions buildTarget/compile buildTarget/test buildTarget/run

Slide 18

Slide 18 text

@ebenwert Integrating Developer Experiences Diagnostics notifications from server to client errors / warnings about specific file and code location analogous to LSP Diagnostics

Slide 19

Slide 19 text

@ebenwert Integrating Developer Experiences T asks notifications from server to client inform about task progress 
 (compile, test, …)

Slide 20

Slide 20 text

@ebenwert Integrating Developer Experiences IntelliJ Scala as BSP client

Slide 21

Slide 21 text

@ebenwert Integrating Developer Experiences Build T arget to Module IntelliJ modules don’t map exactly to build targets module owns source, no shared sources modules have compile/test scope, targets have types, not scopes

Slide 22

Slide 22 text

@ebenwert Integrating Developer Experiences BSP diagnostics and task progress shown in build toolwindow Compile Requests

Slide 23

Slide 23 text

@ebenwert Integrating Developer Experiences The BSP Ecosystem

Slide 24

Slide 24 text

@ebenwert Integrating Developer Experiences BSP Roadmap protocol v2.0 final is about done IntelliJ, Bloop, Fury, Mill building on v2.0 support in more build tools (sbt, Bazel?) more complete support in IntelliJ more languages project mapping robustness test, run requests

Slide 25

Slide 25 text

@ebenwert Integrating Developer Experiences … and beyond integrating more tools linting (external to build tool) remote building testing (fine-grained) ??? challenges are tools similar enough for protocol abstraction? adoption

Slide 26

Slide 26 text

@ebenwert Integrating Developer Experiences Links BSP specification bsp4j / bsp4s libraries and testkit Integrating Developer Experiences blog post

Slide 27

Slide 27 text

No content