Ejecute automáticamente org-lint a través de flycheck

12

Tengo un montón de archivos de modo org que publico en HTML para una base de conocimiento, a veces la publicación falla debido a un enlace roto o algo y es difícil encontrar el problema.

Recientemente he estado usando org-lint para encontrar los problemas. ¿Hay alguna manera de ejecutar esto automáticamente a través de flycheck?

mapa7
fuente
1
¿por qué no ejecutarlo a través de org-export-before-processing-hook? Creo que para usar flycheck necesitas un programa externo para linting. Parece que podría ser posible escribir funciones elisp en flycheck-define-generic-checker que funcionaría con org-lint y haría lo que quiera en flycheck.
John Kitchin
¿Tal vez ejecutarlo antes de exportar sería lo suficientemente bueno? Si marca cada vez que ahorra, sería demasiado costoso.
xji
@JohnKitchin: los programas externos son comunes pero no necesarios, aunque en este caso el programa externo natural para ejecutar sería emacs en sí :)
Clément

Respuestas:

6

Traté de restringir la alineación a un corrector con (org-lint '(link-to-local-file)), sin embargo, el análisis todavía va a provocar un retraso notable. Quizás limitar el linter al subárbol actual o usar la asyncbiblioteca puede mejorar el rendimiento. De todos modos, a continuación se muestra una configuración de comprobación de vuelo bastante simple para org-lint:

(flycheck-define-generic-checker 'org-lint
  "Syntax checker for org-lint."
  :start 'flycheck-org-lint-start
  :modes '(org-mode))

(defun flycheck-org-lint-start (checker callback)
    (funcall
     callback 'finished
     (save-excursion
       (mapcar
        (lambda (err)
          (goto-char (car err))
          (flycheck-error-new-at
           (org-current-line) (1+ (current-column))
           'warning (cadr err) :checker checker))
        (org-lint-link-to-local-file (org-element-parse-buffer))))))

(add-to-list 'flycheck-checkers 'org-lint)
mutbuerger
fuente
1
Me sale este error cuando uso este código; Error al verificar la sintaxis automáticamente: (void-function org-lint-link-to-local-file). Tuve que cambiar esa línea a (org-lint '(link-to-local-file)) y funciona. Gracias
map7