$ cabal install cabal-fmt
$ ...
$ cabal-fmt --inplace example.cabal
Turns this...
cabal-version: 2.4
name: cabal-fmt
version: 0
-- An example formatter
executable cabal-fmt
default-language: Haskell2010
hs-source-dirs: src
main-is: CabalFmt.hs
-- build depends will be in
-- a nice tabular format
build-depends: base >=4.11 && <4.13, pretty >=1.1.3.6 && <1.2, bytestring, Cabal ^>=2.5, containers ^>=0.5.11.0 || ^>=0.6.0.1
-- extensions will be sorted
other-extensions:
DeriveFunctor FlexibleContexts ExistentialQuantification OverloadedStrings
RankNTypes
...into this:
cabal-version: 2.4
name: cabal-fmt
version: 0
-- An example formatter
executable cabal-fmt
default-language: Haskell2010
hs-source-dirs: src
main-is: CabalFmt.hs
-- build depends will be in
-- a nice tabular format
build-depends:
, base >=4.11 && <4.13
, bytestring
, Cabal ^>=2.5
, containers ^>=0.5.11.0 || ^>=0.6.0.1
, pretty >=1.1.3.6 && <1.2
-- extensions will be sorted
other-extensions:
DeriveFunctor
ExistentialQuantification
FlexibleContexts
OverloadedStrings
RankNTypes
If you have cabal-fmt
in your $PATH
, you can auto-format .cabal
files in
your project by putting this in the project directory's .dir-locals.el
:
((haskell-cabal-mode
(eval .
(add-hook 'before-save-hook
(lambda () (haskell-mode-buffer-apply-command "cabal-fmt")) nil t))))
There are currently two options, both requiring cabal-fmt
to be in your $PATH
:
vim-cabalfmt
, a standalone pluginneoformat
, a general formatter withcabal-fmt
support