From f981b9886e55ee04b58de3a19a4955ec72def9b5 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Tue, 17 Jul 2018 23:43:08 +0200 Subject: [PATCH 01/10] Add haskell keybindings --- modules/lang/haskell/config.el | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 3facd2086..581c03f84 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -17,6 +17,26 @@ (set-repl-handler! '(haskell-mode haskell-cabal-mode literate-haskell-mode) #'+haskell-repl-buffer) (add-to-list 'completion-ignored-extensions ".hi") + (map! :map haskell-mode-map + :localleader + :n "p" #'hindent-reformat-buffer + :v "p" #'hindent-reformat-region + (:when (featurep! +intero) + :desc "type" :n "t" #'intero-type-at + :desc "info" :n "i" #'intero-info + :desc "load" :n "l" #'intero-repl-load + :desc "eval line" :n "e" #'intero-repl-eval-region + :desc "eval region" :v "e" #'intero-repl-eval-region + :desc "apply suggestions" :n "a" #'intero-apply-suggestions) + (:when (featurep! +dante) + :n "n" "b" #'haskell-process-cabal-build + :desc "goto cabal file" :n "c" #'haskell-cabal-visit-file + :desc "type" :n "t" #'dante-type-at + :desc "info" :n "i" #'dante-info + :desc "load" :n "l" #'haskell-process-load-or-reload + :desc "eval command block >>>" :n "e" #'dante-eval-block + :desc "repair at point" :n "a" #'attrap-attrap) + (when (featurep! :feature syntax-checker) (after! flycheck (dolist (checker (delq nil (list (if (featurep! +intero) 'intero) From c233b84520bfc37f6a47d064b35eb20a179cf718 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Tue, 17 Jul 2018 23:43:27 +0200 Subject: [PATCH 02/10] Add attrap-attrap --- modules/lang/haskell/+dante.el | 13 +++++++++++++ modules/lang/haskell/packages.el | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/lang/haskell/+dante.el b/modules/lang/haskell/+dante.el index 51a9e3be4..510bd7373 100644 --- a/modules/lang/haskell/+dante.el +++ b/modules/lang/haskell/+dante.el @@ -2,4 +2,17 @@ ;;;###if (featurep! +dante) (def-package! dante + :init + (setq dante-load-flags '(;; defaults: + "+c" + "-Wwarn=missing-home-modules" + "-fno-diagnostics-show-caret" + ;; neccessary to make attrap-attrap useful: + "-Wall" + ;; necessary to make company completion useful: + "-fdefer-typed-holes" + "-fdefer-type-errors")) :hook (haskell-mode . dante-mode)) + +(def-package! attrap + :commands (attrap-attrap)) diff --git a/modules/lang/haskell/packages.el b/modules/lang/haskell/packages.el index 5c822bd9c..c5a0e418a 100644 --- a/modules/lang/haskell/packages.el +++ b/modules/lang/haskell/packages.el @@ -5,6 +5,7 @@ (package! hindent) (cond ((featurep! +dante) - (package! dante)) + (package! dante) + (package! attrap)) ((package! intero))) From 1f9fcd5c10fc2c697ef592ef1f3bc98dcef2d573 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Wed, 18 Jul 2018 08:50:55 +0200 Subject: [PATCH 03/10] Lazily load bindings properly --- modules/lang/haskell/config.el | 47 +++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 3068602db..74cdc15cb 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -10,31 +10,38 @@ (def-package! hindent :hook (haskell-mode . hindent-mode)) +(after! haskell-mode + (map! :map haskell-mode-map + :localleader + :n "p" #'hindent-reformat-buffer + :v "p" #'hindent-reformat-region)) + +(after! intero-mode + (map! :map intero-mode-map + :localleader + :n "t" #'intero-type-at + :n "i" #'intero-info + :n "l" #'intero-repl-load + :n "e" #'intero-repl-eval-region + :v "e" #'intero-repl-eval-region + :n "a" #'intero-apply-suggestions)) + +(after! dante-mode + (map! :map dante-mode-map + :localleader + :n "n" "b" #'haskell-process-cabal-build + :n "c" #'haskell-cabal-visit-file + :n "t" #'dante-type-at + :n "i" #'dante-info + :n "l" #'haskell-process-load-or-reload + :n "e" #'dante-eval-block + :n "a" #'attrap-attrap)) + (after! haskell-mode (add-hook 'haskell-mode-hook #'interactive-haskell-mode) (set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag) (set-file-template! 'haskell-mode :trigger #'haskell-auto-insert-module-template :project t) (set-repl-handler! '(haskell-mode haskell-cabal-mode literate-haskell-mode) #'+haskell-repl-buffer) - (map! :map haskell-mode-map - :localleader - :n "p" #'hindent-reformat-buffer - :v "p" #'hindent-reformat-region - (:when (featurep! +intero) - :desc "type" :n "t" #'intero-type-at - :desc "info" :n "i" #'intero-info - :desc "load" :n "l" #'intero-repl-load - :desc "eval line" :n "e" #'intero-repl-eval-region - :desc "eval region" :v "e" #'intero-repl-eval-region - :desc "apply suggestions" :n "a" #'intero-apply-suggestions) - (:when (featurep! +dante) - :n "n" "b" #'haskell-process-cabal-build - :desc "goto cabal file" :n "c" #'haskell-cabal-visit-file - :desc "type" :n "t" #'dante-type-at - :desc "info" :n "i" #'dante-info - :desc "load" :n "l" #'haskell-process-load-or-reload - :desc "eval command block >>>" :n "e" #'dante-eval-block - :desc "repair at point" :n "a" #'attrap-attrap)) - (add-to-list 'completion-ignored-extensions ".hi")) From 6334af8a84a90738291865e43c73b0f32b009c3a Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Wed, 18 Jul 2018 08:59:07 +0200 Subject: [PATCH 04/10] Fix typo --- modules/lang/haskell/config.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 74cdc15cb..9044a466a 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -29,7 +29,7 @@ (after! dante-mode (map! :map dante-mode-map :localleader - :n "n" "b" #'haskell-process-cabal-build + :n "b" #'haskell-process-cabal-build :n "c" #'haskell-cabal-visit-file :n "t" #'dante-type-at :n "i" #'dante-info From b0a754391a8102f86d474f9de6fd9ef0d687804b Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Wed, 18 Jul 2018 09:11:48 +0200 Subject: [PATCH 05/10] Added `stack build` support for intero users --- modules/lang/haskell/+intero.el | 1 + modules/lang/haskell/config.el | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/lang/haskell/+intero.el b/modules/lang/haskell/+intero.el index 87d9ab65c..4838759ce 100644 --- a/modules/lang/haskell/+intero.el +++ b/modules/lang/haskell/+intero.el @@ -13,6 +13,7 @@ This is necessary because `intero-mode' doesn't do its own error checks." (message "Couldn't find stack. Refusing to enable intero-mode.")))) (add-hook 'haskell-mode-hook #'+haskell|init-intero) :config + (setq haskell-compile-cabal-build-command "stack build --fast") (set-lookup-handlers! 'intero-mode :definition #'intero-goto-definition) (when (featurep! :feature syntax-checker) (flycheck-add-next-checker 'intero '(warning . haskell-hlint)))) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 9044a466a..7cde919c7 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -13,6 +13,9 @@ (after! haskell-mode (map! :map haskell-mode-map :localleader + ;; this is set to use cabal for dante users and stack for intero users: + :n "b" #'haskell-process-cabal-build + :n "c" #'haskell-cabal-visit-file :n "p" #'hindent-reformat-buffer :v "p" #'hindent-reformat-region)) @@ -29,8 +32,6 @@ (after! dante-mode (map! :map dante-mode-map :localleader - :n "b" #'haskell-process-cabal-build - :n "c" #'haskell-cabal-visit-file :n "t" #'dante-type-at :n "i" #'dante-info :n "l" #'haskell-process-load-or-reload From dc68d7aad8cf8452df5f48a9a6b7efd77ebb33b4 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Thu, 19 Jul 2018 11:02:26 +0200 Subject: [PATCH 06/10] Moved intero map --- modules/lang/haskell/+intero.el | 10 +++++++++- modules/lang/haskell/config.el | 10 ---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/modules/lang/haskell/+intero.el b/modules/lang/haskell/+intero.el index 4838759ce..b92a20c2a 100644 --- a/modules/lang/haskell/+intero.el +++ b/modules/lang/haskell/+intero.el @@ -16,4 +16,12 @@ This is necessary because `intero-mode' doesn't do its own error checks." (setq haskell-compile-cabal-build-command "stack build --fast") (set-lookup-handlers! 'intero-mode :definition #'intero-goto-definition) (when (featurep! :feature syntax-checker) - (flycheck-add-next-checker 'intero '(warning . haskell-hlint)))) + (flycheck-add-next-checker 'intero '(warning . haskell-hlint))) + + (map! :map intero-mode-map + :localleader + :n "t" #'intero-type-at + :n "i" #'intero-info + :n "l" #'intero-repl-load + :nv "e" #'intero-repl-eval-region + :n "a" #'intero-apply-suggestions)) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 7cde919c7..8eb910dd2 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -19,16 +19,6 @@ :n "p" #'hindent-reformat-buffer :v "p" #'hindent-reformat-region)) -(after! intero-mode - (map! :map intero-mode-map - :localleader - :n "t" #'intero-type-at - :n "i" #'intero-info - :n "l" #'intero-repl-load - :n "e" #'intero-repl-eval-region - :v "e" #'intero-repl-eval-region - :n "a" #'intero-apply-suggestions)) - (after! dante-mode (map! :map dante-mode-map :localleader From 406e8f31f6d86c4f33fd6ed16dcddd56c7a9e718 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Thu, 19 Jul 2018 11:03:16 +0200 Subject: [PATCH 07/10] Move dante mode map --- modules/lang/haskell/+dante.el | 10 +++++++++- modules/lang/haskell/config.el | 9 --------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/lang/haskell/+dante.el b/modules/lang/haskell/+dante.el index ee876fc80..5a7a06b28 100644 --- a/modules/lang/haskell/+dante.el +++ b/modules/lang/haskell/+dante.el @@ -18,4 +18,12 @@ :hook (haskell-mode . dante-mode) :config (when (featurep! :feature syntax-checker) - (flycheck-add-next-checker 'haskell-dante '(warning . haskell-hlint)))) + (flycheck-add-next-checker 'haskell-dante '(warning . haskell-hlint))) + + (map! :map dante-mode-map + :localleader + :n "t" #'dante-type-at + :n "i" #'dante-info + :n "l" #'haskell-process-load-or-reload + :n "e" #'dante-eval-block + :n "a" #'attrap-attrap)) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 8eb910dd2..9aba2d82c 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -19,15 +19,6 @@ :n "p" #'hindent-reformat-buffer :v "p" #'hindent-reformat-region)) -(after! dante-mode - (map! :map dante-mode-map - :localleader - :n "t" #'dante-type-at - :n "i" #'dante-info - :n "l" #'haskell-process-load-or-reload - :n "e" #'dante-eval-block - :n "a" #'attrap-attrap)) - (after! haskell-mode (add-hook 'haskell-mode-hook #'interactive-haskell-mode) (set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag) From 9d4c9c33066bc4f50d3b0913699bed52ca4569b0 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Thu, 19 Jul 2018 11:04:17 +0200 Subject: [PATCH 08/10] Move haskell-mode bindings --- modules/lang/haskell/config.el | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index 9aba2d82c..968299eaf 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -11,6 +11,13 @@ :hook (haskell-mode . hindent-mode)) (after! haskell-mode + (add-hook 'haskell-mode-hook #'interactive-haskell-mode) + (set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag) + (set-file-template! 'haskell-mode :trigger #'haskell-auto-insert-module-template :project t) + (set-repl-handler! '(haskell-mode haskell-cabal-mode literate-haskell-mode) #'+haskell-repl-buffer) + + (add-to-list 'completion-ignored-extensions ".hi") + (map! :map haskell-mode-map :localleader ;; this is set to use cabal for dante users and stack for intero users: @@ -19,11 +26,3 @@ :n "p" #'hindent-reformat-buffer :v "p" #'hindent-reformat-region)) -(after! haskell-mode - (add-hook 'haskell-mode-hook #'interactive-haskell-mode) - (set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag) - (set-file-template! 'haskell-mode :trigger #'haskell-auto-insert-module-template :project t) - (set-repl-handler! '(haskell-mode haskell-cabal-mode literate-haskell-mode) #'+haskell-repl-buffer) - - (add-to-list 'completion-ignored-extensions ".hi")) - From c51b088c6e1725aeccc3006d3b002ec63c93c536 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Thu, 19 Jul 2018 11:04:48 +0200 Subject: [PATCH 09/10] Remove attrap def-package --- modules/lang/haskell/+dante.el | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/lang/haskell/+dante.el b/modules/lang/haskell/+dante.el index 5a7a06b28..c6919c8db 100644 --- a/modules/lang/haskell/+dante.el +++ b/modules/lang/haskell/+dante.el @@ -1,9 +1,6 @@ ;;; lang/haskell/+dante.el -*- lexical-binding: t; -*- ;;;###if (featurep! +dante) -(def-package! attrap - :commands (attrap-attrap)) - (def-package! dante :init (setq dante-load-flags '(;; defaults: From 96ecadf9e6522aa76ff32ea185801083ac3e4467 Mon Sep 17 00:00:00 2001 From: Patrick Elliott Date: Thu, 19 Jul 2018 11:05:31 +0200 Subject: [PATCH 10/10] Re-order blocks --- modules/lang/haskell/+dante.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/lang/haskell/+dante.el b/modules/lang/haskell/+dante.el index c6919c8db..dcc4b7e97 100644 --- a/modules/lang/haskell/+dante.el +++ b/modules/lang/haskell/+dante.el @@ -2,6 +2,7 @@ ;;;###if (featurep! +dante) (def-package! dante + :hook (haskell-mode . dante-mode) :init (setq dante-load-flags '(;; defaults: "+c" @@ -12,7 +13,6 @@ ;; necessary to make company completion useful: "-fdefer-typed-holes" "-fdefer-type-errors")) - :hook (haskell-mode . dante-mode) :config (when (featurep! :feature syntax-checker) (flycheck-add-next-checker 'haskell-dante '(warning . haskell-hlint)))