Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Integrating Developer Experiences -- Build Serv...

Integrating Developer Experiences -- Build Server Protocol and beyond

IDEs - Integrated Development Environments - traditionally provide out of the box support for many of the tasks that go into making working software out of source code. But increasingly, developers expect to be able to use any one of a variety of special-purpose tools for each task. This shifts the focus of the IDE from "Integrated" to "Integrating" external tools into a coherent experience.

Especially in the Scala ecosystem, we have an increasing number of build tools to choose from. I have been focusing on integrating sbt and other new tools with the IntelliJ Scala plugin and will talk about challenges involved and how the Build Server Protocol makes it possible for IntelliJ to interface with any build tool.

Justin Kaeser

September 21, 2019
Tweet

Other Decks in Programming

Transcript

  1. @ebenwert Integrating Developer Experiences Integrating Developer Experiences Build Server Protocol

    and beyond … Justin Kaeser @ebenwert IntelliJ Scala Team JetBrains @IntelliJScala
  2. @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
  3. @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…
  4. @ebenwert Integrating Developer Experiences Build T ools in Scala lots

    of choices little coherence “But I just want to use my favorite frontend!”
  5. @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
  6. @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
  7. @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
  8. @ebenwert Integrating Developer Experiences Server Discovery connection file specify how

    to start local bsp server communication via stdin/stdout
  9. @ebenwert Integrating Developer Experiences Lifecycle client → server: build/initialize server

    → client: build/initialized client → server: build/shutdown client → server: build/exit
  10. @ebenwert Integrating Developer Experiences Diagnostics notifications from server to client

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

    client inform about task progress 
 (compile, test, …)
  12. @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
  13. @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
  14. @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
  15. @ebenwert Integrating Developer Experiences Links BSP specification bsp4j / bsp4s

    libraries and testkit Integrating Developer Experiences blog post