LSP: Language Server Protocol The Language Server Protocol defines the protocol used between an editor or an IDE and a language server that provides language features like auto complete, go to definition, find all references, etc.
Editors/IDEs supporting the LSP ● IntelliJ ● Eclipse IDE ● VS code ● Atom ● Sublime Text 3 ● vim8/neovim ● Emacs See ls.org and ms.lsp for the latest on adoption.
Metals Works with: vs-code, atom, vim, Sublime text 3, Emacs. Uses BSP to communicate LS and build tools. “Our goal in Metals is to support code navigation with as low CPU and memory overhead as possible without sacrificing rich functionality.”
Metals v0.7.6 - Thorium ● Automatic import build for Gradle, Maven and Mill ● Auto-fill option to case classes and functions ● Code completions on keywords ● Deduce values for named parameters completion ● Compilation explorer ● Add support for Scala 2.13 and JDK 11 ● Coming soon: rename symbols, find definition, DAP, worksheets and much more!
SemanticDB ● Portable semantic APIs ● Data schema for semantic information about code. ● Relevant for developer tools. ● Protobuf, JSON, SQL. ● Do not require a running compiler.
Bloop ● sbt, Maven, Gradle and Mill. ● IntelliJ and Metals (VS Code, Sublime, vim and Atom) ● Provides fast compile, test and run ● Has a built-in command-line tool ● Integrates with most JVM build tools ● Supports JVM, Scala.js and Scala Native
Bloop (v1.3.2) ● Compiling deduplication ● Compiling isolation ● Zipkin tracing support ● Use Ammonite by default in bloop console ● Support for Scala 2.13.x, JDK 9 & 11 ● Improvements in build tools support
Mill ● Build tools as Pure functional programs ● Fast and Flexible ● Targets with caching ● Inspectale cache graph ● Commands ● Can act as a build server ● Play framework and Bloop support ● Support for Dotty
Seed ● Builds are describe in a TOML file ● Handles dependency resolution via coursier ● Generates configurations for Bloop and Intellij ● BSP server integration using ZIO ● Cross-platform support (JVM, JS, LLVM) ● Cross-compile modular projects made easy
Pants ● Source based dependency tool ● Aims to large code bases ● Monorepo environments ● Fast ● Scalable ● dependency inference from source-code imports