org-lint: Add checkers
* lisp/org-lint.el (org-lint-deprecated-export-blocks): (org-lint-missing-backend-in-export-block): (org-lint-obsolete-include-markup): New checkers.
This commit is contained in:
parent
9f5a1ad51e
commit
e82f48a8eb
|
@ -68,8 +68,10 @@
|
|||
;; - orphaned affiliated keywords
|
||||
;; - obsolete affiliated keywords
|
||||
;; - missing language in src blocks
|
||||
;; - missing back-end in export blocks
|
||||
;; - invalid Babel call blocks
|
||||
;; - NAME values with a colon
|
||||
;; - deprecated export block syntax
|
||||
;; - deprecated Babel header properties
|
||||
;; - wrong header arguments in src blocks
|
||||
;; - misuse of CATEGORY keyword
|
||||
|
@ -80,6 +82,7 @@
|
|||
;; - links to non-existent local files
|
||||
;; - SETUPFILE keywords with non-existent file parameter
|
||||
;; - INCLUDE keywords with wrong link parameter
|
||||
;; - obsolete markup in INCLUDE keyword
|
||||
;; - unknown items in OPTIONS keyword
|
||||
;; - spurious macro arguments or invalid macro templates
|
||||
;; - special properties in properties drawer
|
||||
|
@ -142,15 +145,24 @@
|
|||
:name 'obsolete-affiliated-keywords
|
||||
:description "Report obsolete affiliated keywords"
|
||||
:categories '(obsolete))
|
||||
(make-org-lint-checker
|
||||
:name 'deprecated-export-blocks
|
||||
:description "Report deprecated export block syntax"
|
||||
:categories '(obsolete export)
|
||||
:trust 'low)
|
||||
(make-org-lint-checker
|
||||
:name 'deprecated-header-syntax
|
||||
:description "Report deprecated Babel header syntax"
|
||||
:categories '(babel obsolete)
|
||||
:categories '(obsolete babel)
|
||||
:trust 'low)
|
||||
(make-org-lint-checker
|
||||
:name 'missing-language-in-src-block
|
||||
:description "Report missing language in src blocks"
|
||||
:categories '(babel))
|
||||
(make-org-lint-checker
|
||||
:name 'missing-backend-in-export-block
|
||||
:description "Report missing back-end in export blocks"
|
||||
:categories '(export))
|
||||
(make-org-lint-checker
|
||||
:name 'invalid-babel-call-block
|
||||
:description "Report invalid Babel call blocks"
|
||||
|
@ -202,6 +214,11 @@
|
|||
:description "Report INCLUDE keywords with misleading link parameter"
|
||||
:categories '(export)
|
||||
:trust 'low)
|
||||
(make-org-lint-checker
|
||||
:name 'obsolete-include-markup
|
||||
:description "Report obsolete markup in INCLUDE keyword"
|
||||
:categories '(obsolete export)
|
||||
:trust 'low)
|
||||
(make-org-lint-checker
|
||||
:name 'unknown-options-item
|
||||
:description "Report unknown items in OPTIONS keyword"
|
||||
|
@ -368,6 +385,20 @@ called with one argument, the key used for comparison."
|
|||
reports))))
|
||||
reports))
|
||||
|
||||
(defun org-lint-deprecated-export-blocks (ast)
|
||||
(let ((deprecated '("ASCII" "BEAMER" "HTML" "LATEX" "MAN" "MARKDOWN" "MD"
|
||||
"ODT" "ORG" "TEXINFO")))
|
||||
(org-element-map ast 'special-block
|
||||
(lambda (b)
|
||||
(let ((type (org-element-property :type b)))
|
||||
(when (member-ignore-case type deprecated)
|
||||
(list
|
||||
(org-element-property :post-affiliated b)
|
||||
(format
|
||||
"Deprecated syntax for export block. Use \"BEGIN_EXPORT %s\" \
|
||||
instead"
|
||||
type))))))))
|
||||
|
||||
(defun org-lint-deprecated-header-syntax (ast)
|
||||
(let* ((deprecated-babel-properties
|
||||
(mapcar (lambda (arg) (symbol-name (car arg)))
|
||||
|
@ -401,6 +432,13 @@ Use :header-args: instead"
|
|||
(list (org-element-property :post-affiliated b)
|
||||
"Missing language in source block")))))
|
||||
|
||||
(defun org-lint-missing-backend-in-export-block (ast)
|
||||
(org-element-map ast 'export-block
|
||||
(lambda (b)
|
||||
(unless (org-element-property :type b)
|
||||
(list (org-element-property :post-affiliated b)
|
||||
"Missing back-end in export block")))))
|
||||
|
||||
(defun org-lint-invalid-babel-call-block (ast)
|
||||
(org-element-map ast 'babel-call
|
||||
(lambda (b)
|
||||
|
@ -555,6 +593,25 @@ Use :header-args: instead"
|
|||
search))))
|
||||
(unless visiting (kill-buffer buffer))))))))))))
|
||||
|
||||
(defun org-lint-obsolete-include-markup (ast)
|
||||
(let ((regexp (format "\\`\\(?:\".+\"\\|\\S-+\\)[ \t]+%s"
|
||||
(regexp-opt
|
||||
'("ASCII" "BEAMER" "HTML" "LATEX" "MAN" "MARKDOWN" "MD"
|
||||
"ODT" "ORG" "TEXINFO")
|
||||
t))))
|
||||
(org-element-map ast 'keyword
|
||||
(lambda (k)
|
||||
(when (equal (org-element-property :key k) "INCLUDE")
|
||||
(let ((case-fold-search t)
|
||||
(value (org-element-property :value k)))
|
||||
(when (string-match regexp value)
|
||||
(let ((markup (match-string-no-properties 1 value)))
|
||||
(list (org-element-property :post-affiliated k)
|
||||
(format "Obsolete markup \"%s\" in INCLUDE keyword. \
|
||||
Use \"export %s\" instead"
|
||||
markup
|
||||
markup))))))))))
|
||||
|
||||
(defun org-lint-unknown-options-item (ast)
|
||||
(let ((allowed (delq nil
|
||||
(append
|
||||
|
|
Loading…
Reference in New Issue