瀏覽代碼

org-lint: Add checker for empty headlines with tags

* lisp/org-lint.el (org-lint--checkers): Add checker.
(org-lint-empty-headline-with-tags): New function.

* testing/lisp/test-org-lint.el (test-org-lint/empty-headline-with-tags):
  New test.
Nicolas Goaziou 8 年之前
父節點
當前提交
013c0af8b0
共有 2 個文件被更改,包括 28 次插入1 次删除
  1. 16 1
      lisp/org-lint.el
  2. 12 0
      testing/lisp/test-org-lint.el

+ 16 - 1
lisp/org-lint.el

@@ -97,6 +97,7 @@
 ;;   - indented diary-sexps
 ;;   - obsolete QUOTE section
 ;;   - obsolete "file+application" link
+;;   - blank headlines with tags
 
 
 ;;; Code:
@@ -278,7 +279,12 @@
    (make-org-lint-checker
     :name 'file-application
     :description "Report obsolete \"file+application\" link"
-    :categories '(link obsolete)))
+    :categories '(link obsolete))
+   (make-org-lint-checker
+    :name 'empty-headline-with-tags
+    :description "Report ambiguous empty headlines with tags"
+    :categories '(headline)
+    :trust 'low))
   "List of all available checkers.")
 
 (defun org-lint--collect-duplicates
@@ -1014,6 +1020,15 @@ Use \"export %s\" instead"
 			   reports))))))))))))
     reports))
 
+(defun org-lint-empty-headline-with-tags (ast)
+  (org-element-map ast '(headline inlinetask)
+    (lambda (h)
+      (let ((title (org-element-property :raw-value h)))
+	(and (string-match-p "\\`:[[:alnum:]_@#%:]+:\\'" title)
+	     (list (org-element-property :begin h)
+		   (format "Headline containing only tags is ambiguous: %S"
+			   title)))))))
+
 
 ;;; Reports UI
 

+ 12 - 0
testing/lisp/test-org-lint.el

@@ -475,5 +475,17 @@ SCHEDULED: <2012-03-29 thu.>"
 #+end_src"
      (org-lint '(wrong-header-value)))))
 
+(ert-deftest test-org-lint/empty-headline-with-tags ()
+  "Test `org-lint-empty-headline-with-tags' checker."
+  (should
+   (org-test-with-temp-text "* :tag:"
+     (org-lint '(empty-headline-with-tags))))
+  (should
+   (org-test-with-temp-text "*   :tag: "
+     (org-lint '(empty-headline-with-tags))))
+  (should-not
+   (org-test-with-temp-text "* notag: "
+     (org-lint '(empty-headline-with-tags)))))
+
 (provide 'test-org-lint)
 ;;; test-org-lint.el ends here