;;; org-flymake.el --- Org support for flymake.el -*- lexical-binding: t; -*- ;; ;; Copyright (C) 2018 Free Software Foundation, Inc. ;; ;; This file is a part of GNU Emcas. ;; ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see . ;; ;; ;;; Commentary: ;; This file implements support for flymake.el in org mode buffers. ;; To enable it permanently in all org buffers, add this to your Emacs ;; configuration file: ;; ;; (add-hook 'org-mode-hook #'org-flymake-setup) ;; ;; Flymake supports multiple backends. Currently we use `org-lint' only. ;;; Code: (eval-when-compile (require 'cl-lib)) (require 'org-lint) (require 'seq) (defun org-flymake-org-lint-backend (report-fn &rest _args) "A Flymake backend for `org-lint'. Calls REPORT-FN directly." (let* ((report (org-lint--generate-reports (current-buffer) org-lint--checkers)) (report (mapcar (lambda (c) (seq-into (nth 0 (cdr c)) 'list)) report))) (funcall report-fn (cl-loop for (line _trust description _checkers) in report for (beg . end) = (flymake-diag-region (current-buffer) (string-to-number line)) collect (flymake-make-diagnostic (current-buffer) beg end :note description))) report)) ;;;###autoload (defun org-flymake-setup () "Add `org-flymake' to `flymake-diagnostic-functions'." (if (< emacs-major-version 26) (user-error "Org-flymake requires Emacs 26.1 or greater") (add-hook 'flymake-diagnostic-functions #'org-flymake-org-lint-backend nil t) (flymake-mode))) (provide 'org-flymake) ;;; org-flymake.el ends here