branch: externals/org
commit 36c254ae3042390996705c4724548f5bc5ddb1da
Author: Ihor Radchenko <yanta...@posteo.net>
Commit: Ihor Radchenko <yanta...@posteo.net>

    org-lint: Add checkers for square brackets inside link description
    
    * lisp/org-lint.el (org-lint-confusing-brackets):
    (org-lint-brackets-inside-description):
    (trailing-bracket-after-link):
    (unclosed-brackets-in-link-description): New checkers testing for
    trailing extra "]" after links and for unmatched opening "[" inside
    link description.
---
 lisp/org-lint.el | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/lisp/org-lint.el b/lisp/org-lint.el
index 3742108956..58b2c43ed3 100644
--- a/lisp/org-lint.el
+++ b/lisp/org-lint.el
@@ -586,6 +586,30 @@ Use :header-args: instead"
             (list (org-element-begin link)
                   (format "Unknown ID \"%s\"" id)))))))
 
+(defun org-lint-confusing-brackets (ast)
+  (org-element-map ast 'link
+    (lambda (link)
+      (org-with-wide-buffer
+       (when (eq (char-after (org-element-end link)) ?\])
+         (list (org-element-begin link)
+              (format "Trailing ']' after link end")))))))
+
+(defun org-lint-brackets-inside-description (ast)
+  (org-element-map ast 'link
+    (lambda (link)
+      (when (org-element-contents-begin link)
+        (org-with-point-at link
+          (goto-char (org-element-contents-begin link))
+          (let ((count 0))
+            (while (re-search-forward (rx (or ?\] ?\[)) 
(org-element-contents-end link) t)
+              (if (equal (match-string 0) "[") (cl-incf count) (cl-decf 
count)))
+            (when (> count 0)
+              (list (org-element-begin link)
+                   (format "No closing ']' matches '[' in link description: %s"
+                            (buffer-substring-no-properties
+                             (org-element-contents-begin link)
+                             (org-element-contents-end link)))))))))))
+
 (defun org-lint-special-property-in-properties-drawer (ast)
   (org-element-map ast 'node-property
     (lambda (p)
@@ -1489,6 +1513,16 @@ AST is the buffer parse tree."
   #'org-lint-invalid-id-link
   :categories '(link))
 
+(org-lint-add-checker 'trailing-bracket-after-link
+  "Report potentially confused trailing ']' after link."
+  #'org-lint-confusing-brackets
+  :categories '(link) :trust 'low)
+
+(org-lint-add-checker 'unclosed-brackets-in-link-description
+  "Report potentially confused trailing ']' after link."
+  #'org-lint-brackets-inside-description
+  :categories '(link) :trust 'low)
+
 (org-lint-add-checker 'link-to-local-file
   "Report links to non-existent local files"
   #'org-lint-link-to-local-file

Reply via email to