spacemacs/layers/+lang/purescript/README.org
Anupam Jain 9ceeec0aea Add flag to allow adding node_modules/.bin path to exec-path.
This is needed to get psc-ide working without installing purescript
globally.
2019-01-20 15:55:31 +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
=psc-ide= command are available under ~SPC m m~:
| Key binding | Description |
|---------------+---------------------------------------------------------------------------|
| ~SPC m m s~ | Start psc-ide-server |
| ~SPC m m l~ | Load definitions for the modules inside your project |
| ~SPC m h t~ | Show type at point |
| ~SPC m g g~ | Goto definition for identifier at point |
| ~SPC m m b~ | Rebuilds the current file and displays any warnings or errors |
| ~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 m t~ | Add a new clause for the function signature at point |
| ~SPC m m c s~ | Casesplits on the identifier at the current cursor position |
| ~SPC m m q~ | Quit the current psc-ide-server |
| ~SPC m m L~ | Load a specific module (This is mostly used for troubleshooting) |
** 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 |