Purescript layer
Table of ContentsClose
1. Description
This layer provides basic Purescript editing support for spacemacs.
1.1. Features:
- Syntax highlighting through purescript-mode
- Automatic insert of imports through psc-ide-emacs
- REPL through psci
- Syntax checking through flycheck
- Autocompletion through company
2. Install
To use this configuration layer, add it to your ~/.spacemacs
. You will need to
add purescript
to the existing dotspacemacs-configuration-layers
list in
this file.
You'll also need to make sure the PureScript compiler and its associated binaries (psc-ide-server, psci,…) are on your path. Installation instructions can be found here.
3. Configuration
3.1. Formatting
The following formatting tools are currently supported:
purs-tidy
(default): [ https://github.com/natefaubion/purescript-tidy ][Purs-tidy]]
You can choose the formatting tool by setting purescript-fmt-tool
variable in your purescript
config section:
(setq-default dotspacemacs-configuration-layers '( (purescript :variables purescript-fmt-tool 'purs-tidy)))
You can run the formatter manually with either `M-x spacemacs/purescript-format` or with the shortcut `SPC m =`.
To enable automatic formatting of the buffer on save, enable purescript-fmt-on-save
variable in your purescript
config section:
(setq-default dotspacemacs-configuration-layers '( (purescript :variables purescript-fmt-on-save t)))
3.2. Add import on completion
Set purescript-add-import-on-completion
to nil to make psc-ide
stop adding
imports on completion. Default value is t
.
3.3. Node Modules
If you would like node_modules/.bin
to be automatically added to the buffer
local exec_path
, e.g. to support project local purs/pulp installations, set the
node-add-modules-path
variable in the purescript
config section. Note that
doing this introduces a security risk:
(setq-default dotspacemacs-configuration-layers '((purescript :variables node-add-modules-path t)))
3.4. Error popup
If you set purescript-enable-rebuild-on-save
to non-nil, you will get a popup
buffer showing you your current warnings/errors one at a time. This is primarily
meant as an alternative to using flycheck. Default value is nil.
3.5. LSP
For proper IDE support this backend should be used. It is based on an external server which will be started automatically by emacs, once an purescript file is opened. The key bindings are the same for all lsp modes so if you are already familiar with one you should be able to work the same in all modes.
To set explicitly do the following in your dotfile:
(purescript :variables purescript-backend 'lsp)
For this to work you will also need to install the lsp server and separate dependencies with below command:
npm i -g purescript-language-server
NOTE: Key bindings for LSP are defined in the LSP layer. Also it is advisable to have a look at the autocomplete layer for an optimal intellisense config for LSP.
4. Key bindings
4.1. Purescript
4.1.1. Imports
Key binding | Description |
---|---|
SPC m i = |
Format imports |
SPC m i \ |
Return to where you were editing before navigating to imports |
SPC m i a |
Align imports |
SPC m i n |
Navigate to the imports |
4.1.2. psc-ide
Key binding | Description |
---|---|
SPC m m s |
Start psc-ide-server |
SPC m m q |
Quit the current psc-ide-server |
SPC m m l |
Load definitions for the modules inside your project |
SPC m m b |
Rebuilds the current file and displays any warnings or errors |
SPC m m t |
Add a new clause for the function signature at point |
SPC m m c |
Casesplits on the identifier at the current cursor position |
SPC m m L |
Load a specific module (This is mostly used for troubleshooting) |
SPC m m i a |
Add an import for the identifier at the current cursor position |
SPC m m i s |
Inserts a suggestion for the warning/error at the current cursor position |
SPC m h t |
Show type at point |
SPC m g g |
Goto definition for identifier at point |
4.1.3. Formatting
Key binding | Description |
---|---|
SPC m = |
Format the buffer |
4.2. REPL
psci provides a very basic REPL for purescript. The following key bindings are available:
Key binding | Description |
---|---|
SPC m s b |
Equivalent of :m /path/to/current/module/file.purs - Load <file> for importing |
SPC m s i |
Launch a psci console buffer |
SPC m s m |
Equivalent of :i your.current.module.name - Import <module> for use in PSCI |
SPC m s p |
Load or reload files defined in the project file .psci |