1

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

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

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

(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

Очень трудно использовать next-error-function find, чтобы найти все ошибки, потому что она реализована очень настоятельно.

Я запустил крошечный проект под названием complation-highlight-el который позволяет нам видеть более одной ошибки одновременно.

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

Все еще экспериментальный этап, не стесняйтесь задавать вопросы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .