spacemacs/contrib/lang/scala
Chris Barrett f03d09ffc3 Scala: Fix issue with ensime '.' command
The period character shows company completions. If completion candidates
are already being displayed, it will complete the current candidate
incorrectly.

Resolve by making '.' accept the current candidate when candidates are
being displayed.
2015-02-20 22:03:27 +13:00
..
img Add ensime logo in scala layer README 2015-02-17 21:59:50 -05:00
funcs.el Scala: Fix issue with ensime '.' command 2015-02-20 22:03:27 +13:00
packages.el Scala: Automatically start ensime 2015-02-20 22:03:27 +13:00
README.md Update wrong code snippets in READMEs 2015-02-17 22:36:12 -05:00

Scala contribution layer for Spacemacs

logo_scala logo_ensime

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

  1. 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")
    
  2. Run sbt at the shell to download and install the plugin.

See the ENSIME quickstart guide for further information.

Usage

  1. Create a .ensime file at the root of your Scala project using sbt gen-ensime at the shell.

  2. 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,

  1. Download the scalastyle jar and put it somewhere sensible
  2. 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

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