Führen Sie org-lint automatisch durch den Flycheck

12

Ich habe einen Haufen von Dateien im Organisationsmodus, die ich für eine Wissensdatenbank in HTML veröffentliche. Manchmal stürzt die Veröffentlichung aufgrund eines defekten Links oder Ähnlichem ab und es ist schwierig, das Problem zu finden.

Ich habe kürzlich org-lint verwendet, um die Probleme zu finden. Gibt es eine Möglichkeit, dies automatisch über den Flycheck auszuführen?

map7
quelle
1
Warum nicht über org-export-before-Processing-Hook ausführen? Ich denke, um Flycheck zu verwenden, benötigen Sie ein externes Programm zum Flusen. Es sieht so aus, als ob es möglich sein könnte, elisp-Funktionen in flycheck-define-generic-checker zu schreiben, die mit org-lint funktionieren und in flycheck tun, was Sie wollen.
John Kitchin
Vielleicht wäre es gut genug, es vor dem Export auszuführen? Wenn Sie jedes Mal überprüfen, wenn Sie speichern, wäre es zu teuer.
xji
@ JohnKitchin: Externe Programme sind üblich, werden aber nicht benötigt, obwohl in diesem Fall das natürliche externe Programm, das ausgeführt werden soll, Emacs selbst wäre :)
Clément

Antworten:

6

Ich habe versucht, das Flusen auf einen Prüfer mit zu beschränken (org-lint '(link-to-local-file)), aber das Parsen wird immer noch eine merkliche Verzögerung hervorrufen. Möglicherweise kann die Beschränkung des Linter auf den aktuellen Teilbaum oder die Verwendung der asyncBibliothek die Leistung verbessern. Im Folgenden finden Sie ein ziemlich einfaches Flycheck-Setup für 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
quelle
1
Ich erhalte diesen Fehler, wenn ich diesen Code verwende. Fehler beim automatischen Überprüfen der Syntax: (void-function org-lint-link-to-local-file). Ich musste diese Zeile in (org-lint '(Link-zu-lokaler-Datei)) ändern und es funktioniert. Danke
map7