Secara otomatis menjalankan org-lint melalui flycheck

12

Saya memiliki banyak file mode-org yang saya terbitkan ke dalam HTML untuk basis pengetahuan, kadang-kadang penerbitan macet karena tautan yang rusak atau sesuatu dan sulit untuk menemukan masalahnya.

Saya baru-baru ini menggunakan org-lint untuk menemukan masalah. Apakah ada cara untuk menjalankan ini secara otomatis melalui flycheck?

map7
sumber
1
mengapa tidak menjalankannya melalui org-ekspor-sebelum-pemrosesan-kait? Saya pikir untuk menggunakan flycheck, Anda memerlukan program eksternal untuk linting. Sepertinya mungkin untuk menulis fungsi elisp di flycheck-define-generic-checker yang akan bekerja dengan org-lint dan melakukan apa yang Anda inginkan di flycheck.
John Kitchin
Mungkin menjalankannya sebelum Anda mengekspor cukup baik? Jika Anda memeriksa setiap kali Anda menyimpannya akan terlalu mahal.
xji
@JohnKitchin: Program eksternal adalah umum tetapi tidak diperlukan, meskipun dalam hal ini program eksternal alami untuk dijalankan adalah emacs sendiri :)
Clément

Jawaban:

6

Saya mencoba untuk membatasi linting ke satu checker (org-lint '(link-to-local-file)), tetapi parsing masih akan menyebabkan penundaan yang nyata. Mungkin membatasi linter ke subtree saat ini atau menggunakan asyncperpustakaan dapat meningkatkan kinerja. Bagaimanapun, di bawah ini adalah pengaturan flycheck yang agak sederhana untuk 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
sumber
1
Saya mendapatkan kesalahan ini saat menggunakan kode ini; Kesalahan saat memeriksa sintaksis secara otomatis: (void-function org-lint-link-to-local-file). Saya harus mengubah baris itu ke (org-lint '(tautan ke file lokal)) dan itu berfungsi. Terima kasih
map7