fix: Add temporary workaround for Intero + GHC 8.4 bug
Adds a workaround for commercialhaskell/intero#569 by adding a function that disables the offending GHCi flag in the Intero REPL, and advising the `intero-repl` and `intero-repl-load` commands to always execute it. I did not manage to locate a common entrypoint to the REPL, but it's probably not worth spending more time on as this will be fixed properly in a future GHC release.
This commit is contained in:
parent
0cf7af4403
commit
bab9f15a33
1 changed files with 28 additions and 0 deletions
|
@ -231,4 +231,32 @@ Including indent-buffer, which should not be called automatically on save."
|
||||||
(inferior-erlang
|
(inferior-erlang
|
||||||
(format "nix-shell --command erl %s" (cdr (project-current)))))
|
(format "nix-shell --command erl %s" (cdr (project-current)))))
|
||||||
|
|
||||||
|
(defun intero-fix-ghci-panic ()
|
||||||
|
"Disable deferring of out of scope variable errors, which
|
||||||
|
triggers a bug in the interactive Emacs REPL printing a panic
|
||||||
|
under certain conditions."
|
||||||
|
|
||||||
|
(interactive)
|
||||||
|
(let* ((root (intero-project-root))
|
||||||
|
(package-name (intero-package-name))
|
||||||
|
(backend-buffer (intero-buffer 'backend))
|
||||||
|
(name (format "*intero:%s:%s:repl*"
|
||||||
|
(file-name-nondirectory root)
|
||||||
|
package-name))
|
||||||
|
(setting ":set -fno-defer-out-of-scope-variables\n"))
|
||||||
|
(when (get-buffer name)
|
||||||
|
(with-current-buffer (get-buffer name)
|
||||||
|
(goto-char (point-max))
|
||||||
|
(let ((process (get-buffer-process (current-buffer))))
|
||||||
|
(when process (process-send-string process setting)))))))
|
||||||
|
|
||||||
|
;; Brute-force fix: Ensure the setting is injected every time the REPL
|
||||||
|
;; is selected.
|
||||||
|
;;
|
||||||
|
;; Upstream issue: https://github.com/commercialhaskell/intero/issues/569
|
||||||
|
(advice-add 'intero-repl :before (lambda (&rest r) (intero-fix-ghci-panic))
|
||||||
|
'((name . intero-panic-fix)))
|
||||||
|
(advice-add 'intero-repl-load :before (lambda (&rest r) (intero-fix-ghci-panic))
|
||||||
|
'((name . intero-panic-fix)))
|
||||||
|
|
||||||
(provide 'functions)
|
(provide 'functions)
|
||||||
|
|
Loading…
Add table
Reference in a new issue