Добавление к ответу Джастина:
У меня есть следующее в моей конфигурации слизи, которая должна перейти к файлу и строке из трассировки стека 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 Фила Хагельберга (техномантия).
person
liwp
schedule
19.01.2010