Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/purescript-emacs/psc-ide-emacs
Emacs integration for PureScript's psc-ide tool.
https://github.com/purescript-emacs/psc-ide-emacs
emacs emacs-mode ide purescript
Last synced: 2 months ago
JSON representation
Emacs integration for PureScript's psc-ide tool.
- Host: GitHub
- URL: https://github.com/purescript-emacs/psc-ide-emacs
- Owner: purescript-emacs
- License: gpl-3.0
- Created: 2015-09-03T16:26:16.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-01-13T12:24:00.000Z (about 1 year ago)
- Last Synced: 2024-08-05T06:06:37.002Z (6 months ago)
- Topics: emacs, emacs-mode, ide, purescript
- Language: Emacs Lisp
- Size: 308 KB
- Stars: 131
- Watchers: 6
- Forks: 31
- Open Issues: 15
-
Metadata Files:
- Readme: README.org
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[[http://melpa.org/#/psc-ide][file:http://melpa.org/packages/psc-ide-badge.svg]]
* psc-ide-emacs
Emacs integration for [[https://github.com/purescript/purescript/tree/master/psc-ide][psc-ide]]
** Installation
The package is available on [[http://melpa.org/#/psc-ide][MELPA]]. Please read the MELPA's [[http://melpa.org/#/getting-started][Getting Started]] guide
for more information. Once you have MELPA configured install psc-ide-emacs
via =package.el=:#+BEGIN_SRC elisp
M-x package-install RET psc-ide RET
#+END_SRC** Configuration
Add the following to your =~/.emacs=:
#+BEGIN_SRC elisp
(require 'psc-ide)
(add-hook 'purescript-mode-hook
(lambda ()
(psc-ide-mode)
(company-mode)
(flycheck-mode)
(turn-on-purescript-indentation)))
#+END_SRCIf you want to use the psc-ide server that is relative to your ~npm bin~
directory, e.g. ~./node_modules/.bin/purs~, add this line to your
config:#+BEGIN_SRC elisp
(setq psc-ide-use-npm-bin t)
#+END_SRCIf you would like to use a custom codegen target for your rebuild. (default
is "js")There is a `psc-ide-codegen` option that can be set globally in your user config:
#+BEGIN_SRC elisp
(setq psc-ide-codegen '("corefn"))
#+END_SRCor in specific files by addind this to the top of file:
#+BEGIN_SRC elisp
-- -*- psc-ide-codegen: ("corefn") -*-
#+END_SRC** Usage
*** Start the Server ~C-c C-s~
*** Load all the modules ~C-c C-l~
This isn't usually necessary, as the start server command sends a load all
command after starting the server.
*** Get completions from the modules you imported while you type (through ~company-mode~)
[[http://i.imgur.com/8WnRh0s.gif]]*** Get completions from all modules in your project with ~company-complete~
This was bound to ~C-SPC~ in earlier versions but was too intrusive for
usual emacs users so you'll have to bind it to a key of choice.eg. ~(global-set-key (kbd "C-SPC") 'company-complete)~
[[http://i.imgur.com/LR69MdN.gif]]
*** Show type for identifier under cursor ~C-c C-t~
[[http://i.imgur.com/A8cXe9t.gif]]Prepending the universal argument expands type synonyms in the displayed
type.For example:
~C-c C-t~ might return ~getName :: Person -> String~If ~Person~ is a type synonym for a record you can use the universal
argument to inspect that record:~C-u C-c C-t~ will then return ~getName :: { name :: String, age :: Int } ->
String~*** Go to definition =M-.=
You can use M-, to jump back to where you came from . If your sourcefiles
are not captured by the default globs you can add a ~.dir-locals.el~ file to
the root of your project, like so:#+BEGIN_SRC elisp
((purescript-mode
. ((psc-ide-source-globs
. ("src/**/*.purs" "test/**/*.purs" "examples/**/*.purs")))))
#+END_SRC
Modify the globs accordingly and don't worry about dependency
globs for bower, psc-package or spago projects. The plugin picks
these up by default. Check the doc-string for
`psc-ide-source-globs` for some advanced options.*** Add an import for the identifier under cursor ~C-c C-i~
If the import is ambiguous you will get a selection of modules, from which
you can choose the identifier you want.[[http://i.imgur.com/VBXDvPg.gif]]
*** Add an import on completion (turned on by default)
Can be turned off with:
#+BEGIN_SRC elisp
(customize-set-variable 'psc-ide-add-import-on-completion nil)
#+END_SRC[[http://i.imgur.com/r6rl2lT.gif]]
*** Case Split the given type under cursor ~C-c C-c~
[[http://i.imgur.com/hTnHxhK.gif]]
*** Add a clause for the function definition under cursor ~C-c C-a~
[[http://i.imgur.com/VNeC3z8.gif]]*** Rebuild the current module and get quick error reporting ~C-c C-b~
If you set ~(customize-set-variable 'psc-ide-rebuild-on-save t)~ psc-ide will
try to rebuild your module on every save.[[http://i.imgur.com/c0L6C4B.gif]]
*** Flycheck Support
**** Ignore certain errors or warnings
This is determined by the variable ~psc-ide-flycheck-ignored-error-codes~. It can be configured
with ~customize-option~ or similar methods.**** Insert suggestion from error ~C-c M-s~
When the cursor is placed over an error that includes suggestion information, use ~C-c M-s~ to
apply the suggestion.*** Keybindings
| Key | Function |
|-------------+--------------------------------------|
| ~C-c C-s~ | ~psc-ide-server-start~ |
| ~C-c C-q~ | ~psc-ide-server-quit~ |
| ~C-c C-t~ | ~psc-ide-show-type~ |
| ~C-c C-i~ | ~psc-ide-add-import~ |
| ~C-c C-a~ | ~psc-ide-add-clause~ |
| ~C-c C-c~ | ~psc-ide-case-split~ |
| ~C-c C-l~ | ~psc-ide-load-all~ |
| ~C-c C-b~ | ~psc-ide-rebuild~ |
| ~C-c C-S-l~ | ~psc-ide-load-module~ |
| ~C-c M-s~ | ~psc-ide-flycheck-insert-suggestion~ |