7.7 KiB
Scala contribution layer for Spacemacs
Table of Contents
Description
This layer adds support for the Scala language using the excellent ENSIME client/server.
Layer Installation
Add this contribution to your ~/.spacemacs
.
(setq-default dotspacemacs-configuration-layers '(scala))
Ensime
ENSIME provides IDE-like features, such as refactoring, incremental compilation and project-wide type-checking.
ENSIME requires a configuration file at the root of each Scala project. It provides an SBT plugin to generate these files.
Installation
-
Configure the ENSIME sbt plugin by adding the following to
~/.sbt/0.13/plugins/plugins.sbt
:resolvers += Resolver.sonatypeRepo("snapshots") addSbtPlugin("org.ensime" % "ensime-sbt" % "0.1.5-SNAPSHOT")
-
Run
sbt
at the shell to download and install the plugin.
See the ENSIME quickstart guide for further information.
Usage
-
Create a
.ensime
file at the root of your Scala project usingsbt gen-ensime
at the shell. -
Run
M-x ensime
within Emacs to start an ENSIME session.
Each Scala project uses a dedicated ENSIME session, so you only need to run M-x ensime
once per project. Any Scala files you create or visit within the project
will automatically use ENSIME for the remainder of your editing session.
Scalastyle
Scalastyle provides style-checking and linting. The Emacs functionality is provided by Flycheck.
To use scalastyle,
- Download the scalastyle jar and put it somewhere sensible
- Customise the
flycheck-scalastyle-jar
variable and set it to the path of the jar.
See the flycheck documentation for up-to-date configuration instructions.
Key bindings
Ensime key bindings
Search
Key Binding | Description
--------------------|------------------------------------------------------------
SPC m / | incremental search using ensime-scalex
major mode
SPC m ? | incremental search in all live buffers
sbt
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m b c | compile command SPC m b C | clean command SPC m b i | switch to sbt shell SPC m b p | package command SPC m b r | run command
Typecheck
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m c t | type check the current file SPC m c T | type check all the open buffers
Debug
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m d b | set breakpoint SPC m d B | clear breakpoint SPC m d C | clear all breakpoints SPC m d c | continue SPC m d d | start a debug session SPC m d i | inspect value at point SPC m d l | list local variables SPC m d n | next SPC m d o | step out SPC m d q | quit SPC m d r | run SPC m d s | step SPC m d t | backtrace
Note These key bindings need a micro-state, PR welcome :-)
Errors
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m e e | print error at point SPC m e l | show all errors and warnings SPC m e s | switch to buffer containing the stack trace parser
Goto
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m g g | go to definition SPC m g i | go to implementation SPC m g t | go to test
Documentation, Inspect
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m h h | show documentation for symbol at point SPC m h u | show uses for symbol at point SPC m h t | print type at point SPC m i i | inspect type at point SPC m i I | inspect type in other frame SPC m i p | inspect project package
Server
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m n F | reload open files
SPC m n s | start ensime server
SPC m n S | regenerate the .ensime
and restart the ensime server
Refactoring
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m r f | format source
SPC m r d | get rid of an intermediate variable (ensime-refactor-inline-local
)
SPC m r D | get rid of an intermediate variable (ensime-undo-peek
)
SPC m r i | organize imports
SPC m r m | extract a range of code into a method
SPC m r r | rename a symbol project wide
SPC m r t | import type at point
SPC m r v | extract a range of code into a variable
SPC m z | expand/contract region
Tests
Key Binding | Description
----------------------|------------------------------------------------------------ SPC m t a | test command (sbt) SPC m t r | test quick command (sbt) SPC m t t | test only (sbt)
REPL
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m s a | ask for a file to be loaded in the REPL
SPC m s b | send buffer to the REPL
SPC m s B | send buffer to the REPL and focus the REPL buffer in insert state
SPC m s i | start or switch to the REPL inferior process
SPC m s r | send region to the REPL
SPC m s R | send region to the REPL and focus the REPL buffer in insert state