Exécutez automatiquement org-lint via flycheck

12

J'ai un tas de fichiers en mode org que je publie en HTML pour une base de connaissances, parfois la publication se bloque en raison d'un lien cassé ou quelque chose et il est difficile de trouver le problème.

J'ai récemment utilisé org-lint pour trouver les problèmes. Existe-t-il un moyen de l'exécuter automatiquement via le contrôle de vol?

map7
la source
1
pourquoi ne pas l'exécuter via org-export-before-processing-hook? Je pense que pour utiliser flycheck, vous avez besoin d'un programme externe pour le peluchage. Il semble qu'il soit possible d'écrire des fonctions elisp dans flycheck-define-generic-checker qui fonctionneraient avec org-lint et feraient ce que vous voulez dans flycheck.
John Kitchin
Peut-être que l'exécuter avant d'exporter serait suffisant? Si vous vérifiez chaque fois que vous enregistrez, ce serait trop cher.
xji
@JohnKitchin: Les programmes externes sont communs mais pas nécessaires, bien que dans ce cas le programme externe naturel à exécuter serait emacs lui-même :)
Clément

Réponses:

6

J'ai essayé de restreindre les peluches à un seul vérificateur (org-lint '(link-to-local-file)), mais l'analyse va toujours induire un retard notable. Peut-être que limiter le linter à la sous-arborescence actuelle ou utiliser la asyncbibliothèque peut améliorer les performances. Quoi qu'il en soit, ci-dessous est une configuration de contrôle de vol assez simple pour 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
la source
1
J'obtiens cette erreur lors de l'utilisation de ce code; Erreur lors de la vérification automatique de la syntaxe: (fonction void org-lint-link-to-local-file). J'ai dû changer cette ligne en (org-lint '(lien vers un fichier local)) et cela fonctionne. Merci
map7