Configurable syntax formatter for PureScript.
npm install pursfmtConfigurable syntax formatter for PureScript.
``sh`
npm install --save-dev pursfmt
Do not install it globally, so that different PureScript projects can use
different versions of pursfmt.
Also available for Nix via
Nixpkgs 22.11+
and Easy PureScript Nix
You can use pursfmt to format files in place or via stdin / stdout
(which is useful for editor integration):
##### Formatting a collection of files in place:
`sh`
pursfmt format-in-place "src/*/.purs"
##### Using STDIN to format a file:
`sh`
pursfmt format < MyFile.purs
You can also use pursfmt to verify whether files have already been formatted.format-in-place
This is often useful to verify, in continuous integration,
that all project files are formatted according to the configuration.
Files that would be changed by running are listed out.
##### Verifying files are formatted
`sh`
pursfmt check "src/*/.purs"
All files are formatted.
You can see all configuration that pursfmt accepts using the --help flag
for the command you are using:
`sh`
pursfmt format-in-place --help
Some common options include:
- --indent to set the number of spaces used in indentation,--arrow-first
which defaults to 2 spaces
- or --arrow-last to control whether type signatures
put arrows first on the line or last on the line (purty-style),
which defaults to arrow-first.
You can generate a .pursfmt.yaml using the generate-config command.
For example:
`sh`
pursfmt generate-config --indent 2 --width 80 --arrow-last
If a .pursfmt.yaml file is found, it will be used in lieu of CLI arguments.
To support correct operator precedence without having to parse your entire
source tree (potentially for a single file), pursfmt uses a pre-bakedpursfmt
operator precedence table. By default, ships with a table builtgenerate-operators
from the core and contrib organizations. If you need support for more
operators, you can generate your own table using the
command.
`sh`
spago sources | xargs pursfmt generate-operators > .pursfmtoperators
$ pursfmt generate-config --arrow-first --unicode-never --operators .pursfmtoperators
Spacemacs' Purescript layer
supports formatting using pursfmt out of the box.
You can run the formatter manually with either M-x spacemacs/purescript-formatSPC m =
or with the shortcut .
To enable automatic formatting of the buffer on save,
enable purescript-fmt-on-save in your spacemacs config:
`elisp`
(setq-default dotspacemacs-configuration-layers '(
(purescript :variables
purescript-fmt-on-save t)))
#### via ALE
Add to your other fixers .vimrc or $XDG_CONFIG_HOME/neovim/init.vim
`viml`
let b:ale_fixers = { 'purescript': [ 'pursfmt' ] }
" suggested to fix on save
let g:ale_fix_on_save = 1
#### via Neoformat
Add to your .vimrc or $XDG_CONFIG_HOME/neovim/init.vim
`viml`
let g:neoformat_enabled_purescript = ['pursfmt']
#### via PureScript IDE
The PureScript IDE plugin for VS Code supports pursfmt as a built-in formatter in versions after 0.25.1. Choose pursfmt from the list of supported formatters in the settings, or add this to your settings.json:
`json`
"purescript.formatter": "pursfmt"
For local development pointing to the output directory:
`sh`
npm run build
$ ./bin/index.dev.js --help
For a local production build pointing to the bundle directory:
`sh`
npm run bundle
$ ./bin/index.js --help
If you would like to use your local build of pursfmt in your editor,bin/index.js
use path to instead of the pursfmt binary in your settings.pursfmt format
For example, instead of setting the format command to ,$PURSFMT_DIR/bin/index.js format
set it to where $PURSFMT_DIR is the location
of your checkout of this repository.
To accept snapshot tests:
`sh`
npm run test -- -a "--accept"
`sh``
npm run generate-default-operators
This project was originally forked from
purescript-tidy.