From 538670f66e81eff5ccdda5122d100145d7e9bfb5 Mon Sep 17 00:00:00 2001 From: Kosyrev Serge <_deepfire@feelingofgreen.ru> Date: Sat, 18 Jul 2015 11:09:19 +0300 Subject: [PATCH 1/3] haskell-process-load-complete: remove duplication --- haskell-load.el | 55 +++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/haskell-load.el b/haskell-load.el index 119e21b0e..c23034cd1 100644 --- a/haskell-load.el +++ b/haskell-load.el @@ -85,40 +85,27 @@ actual Emacs buffer of the module being loaded." (when (get-buffer (format "*%s:splices*" (haskell-session-name session))) (with-current-buffer (haskell-interactive-mode-splices-buffer session) (erase-buffer))) - (cond ((haskell-process-consume process "Ok, modules loaded: \\(.+\\)\\.$") - (let* ((modules (haskell-process-extract-modules buffer)) - (cursor (haskell-process-response-cursor process))) - (haskell-process-set-response-cursor process 0) - (let ((warning-count 0)) - (while (haskell-process-errors-warnings session process buffer) - (setq warning-count (1+ warning-count))) - (haskell-process-set-response-cursor process cursor) - (if (and (not reload) - haskell-process-reload-with-fbytecode) - (haskell-process-reload-with-fbytecode process module-buffer) - (haskell-process-import-modules process (car modules))) - (haskell-mode-message-line - (if reload "Reloaded OK." "OK.")) - (when cont - (condition-case e - (funcall cont t) - (error (message "%S" e)) - (quit nil)))))) - ((haskell-process-consume process "Failed, modules loaded: \\(.+\\)\\.$") - (let* ((modules (haskell-process-extract-modules buffer)) - (cursor (haskell-process-response-cursor process))) - (haskell-process-set-response-cursor process 0) - (while (haskell-process-errors-warnings session process buffer)) - (haskell-process-set-response-cursor process cursor) - (if (and (not reload) haskell-process-reload-with-fbytecode) - (haskell-process-reload-with-fbytecode process module-buffer) - (haskell-process-import-modules process (car modules))) - (haskell-interactive-mode-compile-error session "Compilation failed.") - (when cont - (condition-case e - (funcall cont nil) - (error (message "%S" e)) - (quit nil))))))) + (let* ((ok (cond ((haskell-process-consume process "Ok, modules loaded: \\(.+\\)\\.$") t) + ((haskell-process-consume process "Failed, modules loaded: \\(.+\\)\\.$") nil))) + (modules (haskell-process-extract-modules buffer)) + (cursor (haskell-process-response-cursor process)) + (warning-count 0)) + (haskell-process-set-response-cursor process 0) + (while (haskell-process-errors-warnings session process buffer) + (setq warning-count (1+ warning-count))) + (haskell-process-set-response-cursor process cursor) + (if (and (not reload) + haskell-process-reload-with-fbytecode) + (haskell-process-reload-with-fbytecode process module-buffer) + (haskell-process-import-modules process (car modules))) + (if ok + (haskell-mode-message-line (if reload "Reloaded OK." "OK.")) + (haskell-interactive-mode-compile-error session "Compilation failed.")) + (when cont + (condition-case e + (funcall cont ok) + (error (message "%S" e)) + (quit nil))))) (defun haskell-process-suggest-imports (session file modules ident) "Given a list of MODULES, suggest adding them to the import section." From 786bcf38d79a891fda305783a2ea5b529770f61d Mon Sep 17 00:00:00 2001 From: Kosyrev Serge <_deepfire@feelingofgreen.ru> Date: Sat, 18 Jul 2015 11:10:27 +0300 Subject: [PATCH 2/3] haskell-process-load-complete: err on failure to match --- haskell-load.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/haskell-load.el b/haskell-load.el index c23034cd1..442c856e6 100644 --- a/haskell-load.el +++ b/haskell-load.el @@ -86,7 +86,8 @@ actual Emacs buffer of the module being loaded." (with-current-buffer (haskell-interactive-mode-splices-buffer session) (erase-buffer))) (let* ((ok (cond ((haskell-process-consume process "Ok, modules loaded: \\(.+\\)\\.$") t) - ((haskell-process-consume process "Failed, modules loaded: \\(.+\\)\\.$") nil))) + ((haskell-process-consume process "Failed, modules loaded: \\(.+\\)\\.$") nil) + (t (error (message "Unexpected response from haskell process."))))) (modules (haskell-process-extract-modules buffer)) (cursor (haskell-process-response-cursor process)) (warning-count 0)) From a674181e9e63e884d4d030f0762add6e8c45c0b9 Mon Sep 17 00:00:00 2001 From: Kosyrev Serge <_deepfire@feelingofgreen.ru> Date: Sat, 18 Jul 2015 11:11:54 +0300 Subject: [PATCH 3/3] haskell-process-errors-warnings: pass the module buffer --- haskell-load.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/haskell-load.el b/haskell-load.el index 442c856e6..4ba8c4c43 100644 --- a/haskell-load.el +++ b/haskell-load.el @@ -92,7 +92,7 @@ actual Emacs buffer of the module being loaded." (cursor (haskell-process-response-cursor process)) (warning-count 0)) (haskell-process-set-response-cursor process 0) - (while (haskell-process-errors-warnings session process buffer) + (while (haskell-process-errors-warnings module-buffer session process buffer) (setq warning-count (1+ warning-count))) (haskell-process-set-response-cursor process cursor) (if (and (not reload) @@ -220,8 +220,9 @@ actual Emacs buffer of the module being loaded." (session (haskell-process-session process)) (message-count 0) (cursor (haskell-process-response-cursor process))) + ;; XXX: what the hell about the rampant code duplication? (haskell-process-set-response-cursor process 0) - (while (haskell-process-errors-warnings session process response) + (while (haskell-process-errors-warnings nil session process response) (setq message-count (1+ message-count))) (haskell-process-set-response-cursor process cursor) (let ((msg (format "Complete: cabal %s (%s compiler messages)" @@ -264,7 +265,7 @@ actual Emacs buffer of the module being loaded." (modules (split-string modules-string ", "))) (cons modules modules-string))) -(defun haskell-process-errors-warnings (session process buffer &optional return-only) +(defun haskell-process-errors-warnings (module-buffer session process buffer &optional return-only) "Trigger handling type errors or warnings. Either prints the messages in the interactive buffer or if CONT is specified, passes the error onto that."