diff --git a/lisp/org-lint.el b/lisp/org-lint.el index b734a37bf..89aed4bbb 100644 --- a/lisp/org-lint.el +++ b/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 diff --git a/testing/lisp/test-org-lint.el b/testing/lisp/test-org-lint.el index d27484860..3ae42c768 100644 --- a/testing/lisp/test-org-lint.el +++ b/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