2015-12-02 14:23:39 +00:00
|
|
|
#+TITLE: Purescript layer
|
2015-06-10 16:44:30 +00:00
|
|
|
|
2019-05-07 08:53:56 +00:00
|
|
|
#+TAGS: general|js|layer|multi-paradigm|programming
|
2019-05-05 17:26:40 +00:00
|
|
|
|
2015-06-10 16:44:30 +00:00
|
|
|
[[file:img/purescript-logo.png]]
|
|
|
|
|
2019-05-07 20:05:06 +00:00
|
|
|
* Table of Contents :TOC_5_gh:noexport:
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#description][Description]]
|
2017-11-29 19:47:06 +00:00
|
|
|
- [[#features][Features:]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#install][Install]]
|
|
|
|
- [[#configuration][Configuration]]
|
|
|
|
- [[#add-import-on-completion][Add import on completion]]
|
2019-01-19 14:20:59 +00:00
|
|
|
- [[#node-modules][Node Modules]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#error-popup][Error popup]]
|
2020-10-23 16:57:47 +00:00
|
|
|
- [[#lsp][LSP]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#key-bindings][Key bindings]]
|
|
|
|
- [[#purescript][Purescript]]
|
|
|
|
- [[#imports][Imports]]
|
|
|
|
- [[#psc-ide][psc-ide]]
|
|
|
|
- [[#repl][REPL]]
|
2015-06-10 16:44:30 +00:00
|
|
|
|
|
|
|
* Description
|
2017-11-29 19:47:06 +00:00
|
|
|
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
|
2015-06-10 16:44:30 +00:00
|
|
|
|
|
|
|
* Install
|
2016-01-06 05:21:55 +00:00
|
|
|
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
|
2016-07-05 03:33:43 +00:00
|
|
|
add =purescript= to the existing =dotspacemacs-configuration-layers= list in
|
|
|
|
this file.
|
2015-06-10 16:44:30 +00:00
|
|
|
|
2019-05-26 20:58:52 +00:00
|
|
|
You'll also need to make sure the PureScript compiler and its associated
|
2016-06-22 11:56:44 +00:00
|
|
|
binaries (psc-ide-server, psci,...) are on your path. Installation instructions
|
2017-07-04 10:09:53 +00:00
|
|
|
can be found [[https://github.com/purescript/documentation/blob/master/guides/Getting-Started.md][here]].
|
2015-12-08 22:50:15 +00:00
|
|
|
|
2016-07-05 03:33:43 +00:00
|
|
|
* Configuration
|
|
|
|
** Add import on completion
|
|
|
|
Set =purescript-add-import-on-completion= to nil to make =psc-ide= stop adding
|
2017-11-29 19:47:06 +00:00
|
|
|
imports on completion. Default value is =t=.
|
2016-07-05 03:33:43 +00:00
|
|
|
|
2019-01-19 14:20:59 +00:00
|
|
|
** 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
|
|
|
|
|
2016-07-05 03:33:43 +00:00
|
|
|
** 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.
|
|
|
|
|
2020-10-23 16:57:47 +00:00
|
|
|
** 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:
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
(purescript :variables
|
|
|
|
purescript-backend 'lsp)
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
For this to work you will also need to install
|
|
|
|
the lsp server and separate dependencies with below
|
|
|
|
command:
|
|
|
|
|
|
|
|
#+BEGIN_SRC sh
|
|
|
|
npm i -g purescript-language-server
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
2015-06-10 16:44:30 +00:00
|
|
|
* Key bindings
|
|
|
|
** Purescript
|
|
|
|
*** Imports
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-06-12 01:23:07 +00:00
|
|
|
|-------------+---------------------------------------------------------------|
|
|
|
|
| ~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 |
|
2015-06-10 16:44:30 +00:00
|
|
|
|
2015-12-08 22:50:15 +00:00
|
|
|
*** psc-ide
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2016-06-22 11:56:44 +00:00
|
|
|
|---------------+---------------------------------------------------------------------------|
|
|
|
|
| ~SPC m m s~ | Start psc-ide-server |
|
2019-03-22 20:59:03 +00:00
|
|
|
| ~SPC m m q~ | Quit the current psc-ide-server |
|
2016-06-22 11:56:44 +00:00
|
|
|
| ~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 |
|
2019-03-22 20:59:03 +00:00
|
|
|
| ~SPC m m c~ | Casesplits on the identifier at the current cursor position |
|
2016-06-22 11:56:44 +00:00
|
|
|
| ~SPC m m L~ | Load a specific module (This is mostly used for troubleshooting) |
|
2019-03-22 20:59:03 +00:00
|
|
|
| ~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 |
|
|
|
|
|
2015-06-10 16:44:30 +00:00
|
|
|
** REPL
|
2015-06-10 21:16:01 +00:00
|
|
|
[[https://github.com/ardumont/emacs-psci][psci]] provides a very basic REPL for purescript. The following key
|
2015-06-10 16:44:30 +00:00
|
|
|
bindings are available:
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-06-12 01:23:07 +00:00
|
|
|
|-------------+----------------------------------------------------------------------------------|
|
|
|
|
| ~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 |
|