Подсветка всех ошибок компиляции в emacs

494
Kirill

Есть ли хороший способ выделить все ошибки компиляции в emacs, особенно в режиме haskell?

Функция next-error( C-x `) выделяет только одну ошибку, но она не устанавливает match-dataошибку, по крайней мере haskell-mode, вместе со своей haskell-interactive-mode-next-error. Еще менее услужливо, он вызывает (error "No more errors")последнюю ошибку, так что я думаю, что, возможно, она вызывается только в интерактивном режиме.

Я сделал следующее, чтобы создать оверлеи при каждой ошибке компиляции, но это действительно неуклюже и ненадежно. next-error-functionдолжен быть определен режимом компиляции ( haskell-interaction-modeв моем случае); по возвращении данные о совпадении указывают на некоторую строку. Я использую переменную, compilation-highlight-overlayчтобы получить оверлей, который создает следующая ошибка.

(let (buf (just-started t) errors overlays) ;; Ask next-error to create all the highlighting overlays, save ;; their locations, then delete them, use the locations to ;; create our own overlays. (ignore-errors (when (setq buf (next-error-find-buffer)) (save-match-data (save-excursion (dotimes (max-iter 10) (with-current-buffer buf (funcall next-error-function 1 just-started) (setq just-started nil) (let* ((o compilation-highlight-overlay) (start (overlay-start o)) (end (overlay-end o))) ;; (message "Found (%s,%s)" start end) (push (cons start end) errors) (push o overlays)))))))) (mapc 'delete-overlay overlays) (dolist (err errors) (let ((o (make-overlay (car err) (cdr err)))) (overlay-put o 'category 'error-highlight)))) 

Есть ли какой-то канонический способ сделать это?

1

1 ответ на вопрос

1
m2ym

It is very difficult to exploit next-error-function to find all errors, because it is implemented in very imperative fashion.

I have started a tiny project called complation-highlight-el that enables us to see more than one error at the same time.

https://github.com/m2ym/compilation-highlight-el

Still experimental stage, feel free to submit issues.

Похожие вопросы