Table of Contents

Purescript layer

Table of ContentsClose

purescript-logo.png

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:

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

Author: root

Created: 2024-04-03 Wed 19:39

Validate