如何在交互式Haskell-mode中加载带正确依赖的测试文件?
解决haskell-mode加载测试文件依赖失败的问题
- 动态适配测试文件的启动参数
通过在haskell-mode钩子中添加函数,自动识别当前文件是否在test目录,调整stack ghci的启动参数:
(defun my-haskell-set-test-target () (when (string-match-p "/test/" (buffer-file-name)) (setq haskell-process-args-ghci '("test")))) (add-hook 'haskell-mode-hook #'my-haskell-set-test-target)
添加这段配置后,打开test目录下的文件时,haskell-mode会用stack ghci test启动REPL,此时再用C-c C-l加载文件就能获取到测试依赖(比如Test.Hspec)。
- 手动切换目标并重启REPL
如果需要在主代码和测试代码之间频繁切换,可以绑定快捷键手动切换目标:
(defun my-haskell-switch-to-test-target () (interactive) (setq haskell-process-args-ghci '("test")) (haskell-process-restart)) (defun my-haskell-switch-to-main-target () (interactive) (setq haskell-process-args-ghci '()) (haskell-process-restart)) (global-set-key (kbd "C-c C-t") #'my-haskell-switch-to-test-target) (global-set-key (kbd "C-c C-m") #'my-haskell-switch-to-main-target)
按下C-c C-t会切换到测试目标并重启REPL,C-c C-m切回主目标。
- 全局设置测试目标(不推荐除非主要处理测试)
如果日常大部分工作都在测试代码上,可以直接全局设置ghci启动参数:
(setq haskell-process-args-ghci '("test"))
但这样主目录的文件加载时会缺少主目标的依赖,仅适合长期专注测试开发的场景。
内容的提问来源于stack exchange,提问作者user2506946
相关产品推荐
相关产品推荐

