refactor!(haskell): remove dante support
BREAKING CHANGE: Now that haskell-language-server is mature there is little reason not to pick it over dante.
This commit is contained in:
parent
6f2e05ea76
commit
a20cd88e8e
8 changed files with 9 additions and 75 deletions
|
@ -172,7 +172,7 @@ following properties:
|
||||||
:path [STRING] path to category root directory
|
:path [STRING] path to category root directory
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
(doom-module-set :lang 'haskell :flags '(+dante))"
|
(doom-module-set :lang 'haskell :flags '(+lsp))"
|
||||||
(puthash (cons category module) plist doom-modules))
|
(puthash (cons category module) plist doom-modules))
|
||||||
|
|
||||||
(defun doom-module-path (category module &optional file)
|
(defun doom-module-path (category module &optional file)
|
||||||
|
|
|
@ -117,7 +117,7 @@ Modules that bring support for a language or group of languages to Emacs.
|
||||||
+ [[file:../modules/lang/fstar/README.org][fstar]] - F* support
|
+ [[file:../modules/lang/fstar/README.org][fstar]] - F* support
|
||||||
+ [[file:../modules/lang/gdscript/README.org][gdscript]] =+lsp= - TODO
|
+ [[file:../modules/lang/gdscript/README.org][gdscript]] =+lsp= - TODO
|
||||||
+ [[file:../modules/lang/go/README.org][go]] =+lsp= - TODO
|
+ [[file:../modules/lang/go/README.org][go]] =+lsp= - TODO
|
||||||
+ [[file:../modules/lang/haskell/README.org][haskell]] =+dante +lsp= - TODO
|
+ [[file:../modules/lang/haskell/README.org][haskell]] =+lsp= - TODO
|
||||||
+ hy - TODO
|
+ hy - TODO
|
||||||
+ [[file:../modules/lang/idris/README.org][idris]] - TODO
|
+ [[file:../modules/lang/idris/README.org][idris]] - TODO
|
||||||
+ java =+meghanada +eclim +lsp= - TODO
|
+ java =+meghanada +eclim +lsp= - TODO
|
||||||
|
|
|
@ -132,7 +132,7 @@
|
||||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||||
;;gdscript ; the language you waited for
|
;;gdscript ; the language you waited for
|
||||||
;;(go +lsp) ; the hipster dialect
|
;;(go +lsp) ; the hipster dialect
|
||||||
;;(haskell +dante) ; a language that's lazier than I am
|
;;(haskell +lsp) ; a language that's lazier than I am
|
||||||
;;hy ; readability of scheme w/ speed of python
|
;;hy ; readability of scheme w/ speed of python
|
||||||
;;idris ; a language you can depend on
|
;;idris ; a language you can depend on
|
||||||
;;json ; At least it ain't XML
|
;;json ; At least it ain't XML
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
;;; lang/haskell/+dante.el -*- lexical-binding: t; -*-
|
|
||||||
;;;###if (featurep! +dante)
|
|
||||||
|
|
||||||
(use-package! dante
|
|
||||||
:hook (haskell-mode-local-vars . dante-mode)
|
|
||||||
:init
|
|
||||||
(setq dante-load-flags '(;; defaults:
|
|
||||||
"+c"
|
|
||||||
"-Wwarn=missing-home-modules"
|
|
||||||
"-fno-diagnostics-show-caret"
|
|
||||||
;; necessary to make attrap-attrap useful:
|
|
||||||
"-Wall"
|
|
||||||
;; necessary to make company completion useful:
|
|
||||||
"-fdefer-typed-holes"
|
|
||||||
"-fdefer-type-errors"))
|
|
||||||
:config
|
|
||||||
(when (featurep! :checkers syntax)
|
|
||||||
(flycheck-add-next-checker 'haskell-dante '(warning . haskell-hlint)))
|
|
||||||
|
|
||||||
(set-company-backend! 'dante-mode #'dante-company)
|
|
||||||
|
|
||||||
(defadvice! +haskell--restore-modified-state-a (fn &rest args)
|
|
||||||
"Marks the buffer as falsely modified.
|
|
||||||
Dante quietly saves the current buffer (without triggering save hooks) before
|
|
||||||
invoking flycheck, unexpectedly leaving the buffer in an unmodified state. This
|
|
||||||
is annoying if we depend on save hooks to do work on the buffer (like
|
|
||||||
reformatting)."
|
|
||||||
:around #'dante-async-load-current-buffer
|
|
||||||
(let ((modified-p (buffer-modified-p)))
|
|
||||||
(apply fn args)
|
|
||||||
(if modified-p (set-buffer-modified-p t))))
|
|
||||||
|
|
||||||
(when (featurep 'evil)
|
|
||||||
(add-hook 'dante-mode-hook #'evil-normalize-keymaps))
|
|
||||||
(map! :map dante-mode-map
|
|
||||||
:localleader
|
|
||||||
"t" #'dante-type-at
|
|
||||||
"i" #'dante-info
|
|
||||||
"l" #'haskell-process-load-file
|
|
||||||
"e" #'dante-eval-block
|
|
||||||
"a" #'attrap-attrap))
|
|
|
@ -18,15 +18,13 @@
|
||||||
- [[#troubleshooting][Troubleshooting]]
|
- [[#troubleshooting][Troubleshooting]]
|
||||||
|
|
||||||
* Description
|
* Description
|
||||||
This module adds [[https://www.haskell.org/][Haskell]] support, powered by either [[https://github.com/jyp/dante][dante]] (the default) or LSP
|
This module adds [[https://www.haskell.org/][Haskell]] support, powered by LSP
|
||||||
(haskell-language-server).
|
(haskell-language-server).
|
||||||
|
|
||||||
+ Code completion (~company-ghc~)
|
+ Code completion (~company-ghc~)
|
||||||
+ Look up documentation (~hoogle~)
|
+ Look up documentation (~hoogle~)
|
||||||
+ eldoc support (~dante~)
|
|
||||||
+ REPL (~ghci~)
|
+ REPL (~ghci~)
|
||||||
+ Syntax-checking (~flycheck~)
|
+ Syntax-checking (~flycheck~)
|
||||||
+ Code navigation (~dante~)
|
|
||||||
+ [[https://github.com/hlissner/doom-snippets/tree/master/haskell-mode][Snippets]]
|
+ [[https://github.com/hlissner/doom-snippets/tree/master/haskell-mode][Snippets]]
|
||||||
|
|
||||||
** External resources
|
** External resources
|
||||||
|
@ -38,31 +36,19 @@ Here are a few resources I've found indispensable in my Haskell adventures:
|
||||||
+ [[https://docs.haskellstack.org/en/stable/README/][The Haskell Tool Stack docs]]
|
+ [[https://docs.haskellstack.org/en/stable/README/][The Haskell Tool Stack docs]]
|
||||||
|
|
||||||
** Module Flags
|
** Module Flags
|
||||||
+ =+dante= Enables dante; a fork of intero aimed at lightweightedness. It
|
|
||||||
doesn't depend on =stack=, supports both ~cabal~-only and ~stack~ projects,
|
|
||||||
but lacks eldoc support.
|
|
||||||
+ =+lsp= Enables LSP support with haskell-language-server (requires the ~:tools lsp~ module).
|
+ =+lsp= Enables LSP support with haskell-language-server (requires the ~:tools lsp~ module).
|
||||||
|
|
||||||
** Plugins
|
** Plugins
|
||||||
+ [[https://github.com/haskell/haskell-mode][haskell-mode]]
|
+ [[https://github.com/haskell/haskell-mode][haskell-mode]]
|
||||||
+ =+dante=
|
|
||||||
+ [[https://github.com/jyp/dante][dante]]
|
|
||||||
+ [[https://github.com/jyp/attrap][attrap]]
|
|
||||||
+ =+lsp=
|
+ =+lsp=
|
||||||
+ [[https://github.com/emacs-lsp/lsp-haskell][lsp-haskell]]
|
+ [[https://github.com/emacs-lsp/lsp-haskell][lsp-haskell]]
|
||||||
|
|
||||||
* Prerequisites
|
* Prerequisites
|
||||||
Depending on whether you use Dante or haskell-language-server, your
|
|
||||||
dependencies will differ:
|
|
||||||
|
|
||||||
+ Dante users need =cabal=, =ghc= and =ghc-mod=
|
|
||||||
+ LSP users need the =haskell-language-server= LSP server
|
+ LSP users need the =haskell-language-server= LSP server
|
||||||
+ All users will need the =hoogle= package
|
+ All users will need the =hoogle= package
|
||||||
|
|
||||||
** Cabal
|
** Cabal
|
||||||
To use Dante, you need =cabal= (the haskell package builder) and =ghci= (the
|
|
||||||
compiler, syntax checker & repl):
|
|
||||||
|
|
||||||
*** MacOS
|
*** MacOS
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
brew install cabal-install ghc
|
brew install cabal-install ghc
|
||||||
|
@ -112,12 +98,6 @@ stack setup
|
||||||
** Haskell packages
|
** Haskell packages
|
||||||
You'll need to install the following packages using ~stack~ or ~cabal~:
|
You'll need to install the following packages using ~stack~ or ~cabal~:
|
||||||
|
|
||||||
+ (Dante users) =ghc-mod=
|
|
||||||
#+BEGIN_SRC sh
|
|
||||||
stack install ghc-mod
|
|
||||||
# or
|
|
||||||
cabal install ghc-mod
|
|
||||||
#+END_SRC
|
|
||||||
+ =hoogle=
|
+ =hoogle=
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
cabal update
|
cabal update
|
||||||
|
|
|
@ -46,5 +46,4 @@
|
||||||
;;
|
;;
|
||||||
;;; Backends
|
;;; Backends
|
||||||
|
|
||||||
(cond ((featurep! +dante) (load! "+dante"))
|
(when (featurep! +lsp) (load! "+lsp"))
|
||||||
((featurep! +lsp) (load! "+lsp")))
|
|
||||||
|
|
|
@ -5,8 +5,7 @@
|
||||||
(featurep! :tools lsp))
|
(featurep! :tools lsp))
|
||||||
"This module requires (:tools lsp)")
|
"This module requires (:tools lsp)")
|
||||||
|
|
||||||
(when (featurep! +dante)
|
|
||||||
(unless (executable-find "cabal")
|
(unless (executable-find "cabal")
|
||||||
(warn! "Couldn't find cabal, haskell-mode may have issues"))
|
(warn! "Couldn't find cabal, haskell-mode may have issues"))
|
||||||
(unless (executable-find "hlint")
|
(unless (executable-find "hlint")
|
||||||
(warn! "Couldn't find hlint. Flycheck may have issues in haskell-mode")))
|
(warn! "Couldn't find hlint. Flycheck may have issues in haskell-mode"))
|
||||||
|
|
|
@ -3,9 +3,6 @@
|
||||||
|
|
||||||
(package! haskell-mode :pin "98ba3922360199d5260d47f417f096730ad057c5")
|
(package! haskell-mode :pin "98ba3922360199d5260d47f417f096730ad057c5")
|
||||||
|
|
||||||
(when (featurep! +dante)
|
|
||||||
(package! dante :pin "8741419333fb85ed2c1d71f5902688f5201b0a40")
|
|
||||||
(package! attrap :pin "a5bc695af27349ae6fe4541a581e6fd449d2a026"))
|
|
||||||
(when (and (featurep! +lsp)
|
(when (and (featurep! +lsp)
|
||||||
(not (featurep! :tools lsp +eglot)))
|
(not (featurep! :tools lsp +eglot)))
|
||||||
(package! lsp-haskell :pin "4e62cf897dd9e9fcef25c6e8e483490a07a5d439"))
|
(package! lsp-haskell :pin "4e62cf897dd9e9fcef25c6e8e483490a07a5d439"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue