Existe uma boa maneira de destacar todos os erros de compilação no emacs, especificamente no modo haskell?
A função next-error
( C-x `) destaca apenas um único erro, mas não define match-data
o erro, pelo menos em haskell-mode
, com seu haskell-interactive-mode-next-error
. Ainda menos útil, ele chama (error "No more errors")
no último erro, então acho que talvez deva ser chamado apenas de forma interativa.
Fiz o seguinte para criar sobreposições de destaque a cada erro de compilação, mas é muito desajeitado e não confiável. next-error-function
deve ser definido pelo modo de compilação ( haskell-interaction-mode
no meu caso); no retorno, match-data parece apontar para alguma string. Eu uso a variável compilation-highlight-overlay
para obter a sobreposição criada pelo próximo erro.
(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))))
Existe algum tipo de maneira canônica de fazer isso?
Responder1
É muito difícil explorar next-error-function
para encontrar todos os erros, porque é implementado de forma muito imperativa.
Iniciei um pequeno projeto chamado complation-highlight-el
que nos permite ver mais de um erro ao mesmo tempo.
https://github.com/m2ym/compilation-highlight-el
Ainda em fase experimental, fique à vontade para enviar problemas.