Добавление к ответу Джастина:
У меня есть следующее в моей конфигурации слизи, которая должна перейти к файлу и строке из трассировки стека clojure.
К сожалению, я должен признать, что на самом деле он не работает для меня на данный момент - функция не может найти правильный файл - но, насколько я могу судить, это можно исправить, изменив project-root
определяется или изменением структуры моих проектов в файловой системе (у меня просто не было времени или желания изучать ее).
Это поднимает хороший вопрос, хотя в большинстве подобных случаев немного сложно определить корень проекта в общем и портативном виде. В этом случае мы используем каталог src
, но это, вероятно, не подходит для ваших проектов на python.
Таким образом, после того, как Джастин остановился, вы сможете воспользоваться некоторыми советами из функции, приведенной ниже, и проанализировать имя файла и номера строк из ошибки тестового примера, создать ссылку на номер строки и использовать compilation-parse-errors-filename-function
и propertize
, чтобы сделать строку в буфере 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. Кажется, это из превосходного стартового набора Emacs Фила Хейгельберга (техномантии).