添加到贾斯汀的答案:
我的 slime 配置中有以下内容,它应该从 clojure 堆栈跟踪跳转到文件和行。
不幸的是,我必须承认它目前实际上对我不起作用-该功能无法找到正确的文件-但据我所知,这应该可以通过更改project-root
定义方式或更改我在文件系统上的项目结构(我只是没有时间或意愿去研究它)。
不过,它确实提出了一个很好的观点,在大多数这样的功能中,以通用和可移植的方式找出项目根有点棘手。在这种情况下,我们依赖于一个src
目录,但这可能不适合您的 python 项目。
因此,从 Justin 停止的地方开始,您应该能够从下面的函数中获取一些提示,并从测试用例错误中解析文件名和行号,创建指向行号的链接,并使用compilation-parse-errors-filename-function
andpropertize
来制作gud
缓冲区中的一行链接。
如果您确实让它工作,请为您自己的问题添加答案。我想很多人会觉得它很有用。
(defun slime-jump-to-trace (&optional on)
"Jump to the file/line that the current stack trace line references.
Only works with files in your project root's src/, not in dependencies."
(interactive)
(save-excursion
(beginning-of-line)
(search-forward-regexp "[0-9]: \\([^$(]+\\).*?\\([0-9]*\\))")
(let ((line (string-to-number (match-string 2)))
(ns-path (split-string (match-string 1) "\\."))
(project-root (locate-dominating-file default-directory "src/")))
(find-file (format "%s/src/%s.clj" project-root
(mapconcat 'identity ns-path "/")))
(goto-line line))))
我还应该提到我从网络上的某个地方复制了这个函数,但我不记得 URL。它似乎来自 Phil Hagelberg 的(technomancy)优秀的 Emacs 入门套件。