spacemacs/layers/+lang/purescript/README.org
Jason Walker 0becb67c21 Improve purescript keybinding discoverability & ergonomics.
Added prefix titles and removed some useless nesting.
2019-04-03 11:42:56 +02:00

97 lines
4.7 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Purescript layer
[[file:img/purescript-logo.png]]
* Table of Contents :TOC_4_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#configuration][Configuration]]
- [[#add-import-on-completion][Add import on completion]]
- [[#node-modules][Node Modules]]
- [[#error-popup][Error popup]]
- [[#key-bindings][Key bindings]]
- [[#purescript][Purescript]]
- [[#imports][Imports]]
- [[#psc-ide][psc-ide]]
- [[#repl][REPL]]
* Description
This layer provides basic Purescript editing support for spacemacs.
** Features:
- Syntax highlighting through [[https://github.com/dysinger/purescript-mode][purescript-mode]]
- Automatic insert of imports through [[https://github.com/epost/psc-ide-emacs][psc-ide-emacs]]
- REPL through [[https://github.com/ardumont/emacs-psci][psci]]
- Syntax checking through flycheck
- Autocompletion through company
* 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.
Youll 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 [[https://github.com/purescript/documentation/blob/master/guides/Getting-Started.md][here]].
* Configuration
** 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=.
** 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 [[https://stackoverflow.com/questions/9679932#comment33532258_9683472][introduces a security risk]]:
#+BEGIN_SRC elisp
(setq-default dotspacemacs-configuration-layers
'((purescript :variables node-add-modules-path t)))
#+END_SRC
** 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.
* Key bindings
** Purescript
*** 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 |
*** 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 |
** REPL
[[https://github.com/ardumont/emacs-psci][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 |