Emacs Haskell Mode中如何查看代码错误信息?
Emacs Haskell-mode边缘栏问号标记:查看错误信息与自动化处理
查看问号对应的错误/警告内容
这些边缘栏标记来自haskell-process-load-file触发的haskell-mode原生编译反馈,和LSP、Flycheck无关,可用以下方法查看详情:
- 将光标定位到带标记的行,按下
C-c C-d C-d(display-local-help命令),会弹出对应错误/警告的工具提示;也可以用C-h .触发相同功能。 - 切换到
*Haskell*缓冲区(快捷键C-x b *Haskell*),这里保存了haskell-process-load-file的完整编译输出,能找到对应行的详细信息。 - 直接调用
haskell-show-error-at-point命令(可自行绑定快捷键,比如C-c C-e),快速显示光标位置的错误详情。
程序化处理错误(以自动移除未使用导入为例)
要解析错误信息并自动处理,可基于haskell-mode提供的函数实现:
- 提取编译反馈:
haskell-process-get-error-messages函数会返回当前会话的所有错误/警告列表,每个条目包含类型、位置、内容三个元素。 - 筛选未使用导入:遍历列表,识别出类型为
Warning且内容包含Unused import的条目,提取其行位置。 - 自动删除导入行:编写Elisp函数实现批量移除,示例代码:
(defun haskell-remove-unused-imports () (interactive) (let ((errors (haskell-process-get-error-messages))) (dolist (err errors) (when (and (string= (nth 0 err) "Warning") (string-match-p "Unused import" (nth 2 err))) (goto-char (nth 1 err)) (kill-whole-line)))))
将函数绑定到快捷键(比如(global-set-key (kbd "C-c C-r") 'haskell-remove-unused-imports)),执行即可自动清理未使用的导入。
补充说明
你禁用LSP和Flycheck后问题依旧,确认这些标记来自haskell-mode自身的编译流程,无需再排查这两个工具的干扰。
内容的提问来源于stack exchange,提问作者user3416536
相关产品推荐
相关产品推荐

