Prechádzať zdrojové kódy

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.
Nicolas Goaziou 9 rokov pred
rodič
commit
e82f48a8eb
1 zmenil súbory, kde vykonal 58 pridanie a 1 odobranie
  1. 58 1
      lisp/org-lint.el

+ 58 - 1
lisp/org-lint.el

@@ -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