According to its website, the Ensime project has been shut down since 2019. We have been supporting both Ensime and Metals for [a year and a half](https://github.com/syl20bnr/spacemacs/pull/12234#issuecomment-524916394). Ensime's GitHub repositories, including its Emacs integration, are archived. Meanwhile, Metals has been developed actively, regularly releasing new versions. It has stabilized significantly, and supports an increasingly full set of features. Scala 3 is just around the corner, and the community is poised to make the transition smoothly and relatively quickly. Metals supports it already, whereas of course Ensime does not and never will. In fact, Scala 2 has had several import minor versions released since Ensime died. Now that it's 2021, it's time to cut the baggage we are carrying around for Ensime. |
||
---|---|---|
.. | ||
img | ||
config.el | ||
funcs.el | ||
layers.el | ||
packages.el | ||
README.org |
Scala layer
- Description
- Layer Installation
- Backends
- Scalastyle
- Enable Debug Adapter Protocol (DAP)
- Automatically insert asterisk in multiline comments
- Enable GTags as a fallback navigation utility
- Key bindings
with
Description
This layer adds support for the Scala language to Spacemacs.
Features:
- Syntax highlighting
- Support for language backend using LSP and Metals
- Debugging support via
dap
- Auto-completion
- Treeview support for viewing project structure and triggering compilation
- Syntax-checking
- Refactoring
- Incremental compilation
- Style linting
- Optional GGTags search
Layer Installation
To use this configuration layer, add it to your ~/.spacemacs
. You will need to
add scala
to the existing dotspacemacs-configuration-layers
list in this
file.
- To turn off the Metals tree view side bar, set
scala-auto-treeview
tonil
. - To display SBT in a small buffer at the bottom of the frame, set the
scala-sbt-window-position
layer variable tobottom
.
Backends
The only currently supported language backend is scala-metals
. Support for
Ensime has been dropped as that project has been dead for some time.
Metals
Currently, you must manually install the Metals server. It is possible to do so
via coursier; the latest version can be built using the following commands,
where 0.9.8
can be replaced with the current version of Metals:
./coursier bootstrap \
--java-opt -Xss4m \
--java-opt -Xms100m \
--java-opt -Dmetals.client=emacs \
org.scalameta:metals_2.12:0.9.8 \
-r bintray:scalacenter/releases \
-r sonatype:snapshots \
-o /usr/local/bin/metals-emacs -f
You will then have the common LSP key bindings; see LSP#key-bindings for more details.
Scalastyle
Scalastyle provides style-checking and linting. The Emacs functionality is provided by Flycheck.
To use scalastyle, it must be present as an executable in your PATH
.
- macOS users:
brew install scalastyle
- Linux, please see http://www.scalastyle.org/command-line.html
To test if scalastyle
executable is in your path, run scalastyle
in a new
terminal, it should output something like:
$ scalastyle
scalastyle 0.8.0
Usage: scalastyle [options] <source directory>
...
Finally, enable the syntax-checking
layer and set the flycheck-scalastylerc
variable to a valid location.
(setq-default flycheck-scalastylerc "/usr/local/etc/scalastyle_config.xml")
See the flycheck documentation and scalastyle configuration for up-to-date configuration instructions.
Use Java doc-style
To enable java-doc-style
, set the variable scala-indent:use-javadoc-style
to
t
(setq-default dotspacemacs-configuration-layers '(
(scala :variables scala-indent:use-javadoc-style t)))
Enable Debug Adapter Protocol (DAP)
The metals backend enables integration with the DAP layer for debugging support.
Automatically insert asterisk in multiline comments
To insert a leading asterisk in multiline comments automatically, set the
variable scala-auto-insert-asterisk-in-comments
to t
.
(setq-default dotspacemacs-configuration-layers '(
(scala :variables scala-auto-insert-asterisk-in-comments t)))
Enable GTags as a fallback navigation utility
To enable gtags when in scala-mode
set the variable scala-enable-gtags
to t
.
(setq-default dotspacemacs-configuration-layers '(
(scala :variables scala-enable-gtags t)))
Key bindings
Additional major mode keybindings are populated by LSP and DAP.
sbt
Key binding | Description |
---|---|
SPC m b . |
sbt transient state |
SPC m b b |
sbt command |