Resaltando todos los errores de compilación en emacs

Resaltando todos los errores de compilación en emacs

¿Existe una buena manera de resaltar todos los errores de compilación en emacs, específicamente en modo haskell?

La función next-error( C-x `) resalta solo un error, pero no establece match-datael error, al menos en haskell-mode, con su haskell-interactive-mode-next-error. Aún menos útil, llama (error "No more errors")en el último error, por lo que creo que tal vez solo deba llamarse de forma interactiva.

Hice lo siguiente para crear superposiciones resaltadas en cada error de compilación, pero es realmente complicado y poco confiable. next-error-functionse supone que está definido por el modo de compilación ( haskell-interaction-modeen mi caso); al regresar, los datos coincidentes parecen apuntar a alguna cadena. Utilizo la variable compilation-highlight-overlaypara obtener la superposición que crea el siguiente 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))))

¿Existe algún tipo de forma canónica de hacer esto?

Respuesta1

Es muy difícil explotarlo next-error-functionpara encontrar todos los errores, porque se implementa de manera muy imperativa.

Comencé un pequeño proyecto llamado complation-highlight-elque nos permite ver más de un error al mismo tiempo.

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

Aún en etapa experimental, no dude en enviar problemas.

información relacionada