Executar automaticamente org-lint através do flycheck

12

Tenho vários arquivos de modo organizacional que publico em HTML para uma base de conhecimento; às vezes, a publicação falha devido a um link quebrado ou algo assim, e é difícil encontrar o problema.

Recentemente, tenho usado o org-lint para encontrar os problemas. Existe uma maneira de executar isso automaticamente através do flycheck?

map7
fonte
11
por que não executá-lo via org-export-before-processing-hook? Eu acho que para usar o flycheck, você precisa de um programa externo para aprender. Parece que é possível escrever funções elisp no flycheck-define-generic-checker que funcionaria com org-lint e faria o que você deseja no flycheck.
precisa
Talvez executá-lo antes da exportação seja bom o suficiente? Se você verificar cada vez que salvar, seria muito caro.
Xji
@JohnKitchin: Programas externos são comuns, mas não são necessários, embora neste caso o programa externo natural a ser executado seja o próprio emacs :)
Clément

Respostas:

6

Tentei restringir o fiapo a um verificador com (org-lint '(link-to-local-file)), no entanto, a análise ainda vai induzir um atraso perceptível. Talvez limitar o linter à subárvore atual ou usar a asyncbiblioteca possa melhorar o desempenho. De qualquer forma, abaixo está uma configuração bastante simples 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
fonte
11
Eu recebo esse erro ao usar este código; Erro ao verificar a sintaxe automaticamente: (função void org-lint-link-to-local-file). Eu tive que mudar essa linha para (org-lint '(link para o arquivo local)) e funciona. Graças
map7