]> git.eshelyaron.com Git - emacs.git/commitdiff
; * lisp/treesit.el (treesit-defun-at-point): Guard against nil.
authorYuan Fu <casouri@gmail.com>
Sun, 25 Dec 2022 00:40:00 +0000 (16:40 -0800)
committerYuan Fu <casouri@gmail.com>
Sun, 25 Dec 2022 02:43:03 +0000 (18:43 -0800)
lisp/treesit.el

index 355c6b6b99aae903711c4e7f12089a13965fef9e..09483acaa7db7515072ddb8b9b2a76820fb7785b 100644 (file)
@@ -1690,7 +1690,9 @@ previous and next sibling defuns around POS, and PARENT is the
 parent defun surrounding POS.  All of three could be nil if no
 sound defun exists.
 
-REGEXP and PRED are the same as in `treesit-defun-type-regexp'."
+REGEXP and PRED are the same as in `treesit-defun-type-regexp'.
+
+Assumes `treesit-defun-type-regexp' is set."
   (let* ((node (treesit-node-at pos))
          ;; NODE-BEFORE/AFTER = NODE when POS is completely in NODE,
          ;; but if not, that means point could be in between two
@@ -1876,26 +1878,30 @@ function is called recursively."
 
 ;; TODO: In corporate into thing-at-point.
 (defun treesit-defun-at-point ()
-  "Return the defun at point or nil if none is found.
+  "Return the defun node at point or nil if none is found.
 
 Respects `treesit-defun-tactic': return the top-level defun if it
 is `top-level', return the immediate parent defun if it is
-`nested'."
-  (pcase-let* ((`(,regexp . ,pred)
-                (if (consp treesit-defun-type-regexp)
-                    treesit-defun-type-regexp
-                  (cons treesit-defun-type-regexp nil)))
-               (`(,_ ,next ,parent)
-                (treesit--defuns-around (point) regexp pred))
-               ;; If point is at the beginning of a defun, we
-               ;; prioritize that defun over the parent in nested
-               ;; mode.
-               (node (or (and (eq (treesit-node-start next) (point))
-                              next)
-                         parent)))
-    (if (eq treesit-defun-tactic 'top-level)
-        (treesit--top-level-defun node regexp pred)
-      node)))
+`nested'.
+
+Return nil if `treesit-defun-type-regexp' is not set."
+  (when treesit-defun-type-regexp
+    (pcase-let* ((`(,regexp . ,pred)
+                  (if (consp treesit-defun-type-regexp)
+                      treesit-defun-type-regexp
+                    (cons treesit-defun-type-regexp nil)))
+                 (`(,_ ,next ,parent)
+                  (treesit--defuns-around (point) regexp pred))
+                 ;; If point is at the beginning of a defun, we
+                 ;; prioritize that defun over the parent in nested
+                 ;; mode.
+                 (node (or (and (eq (treesit-node-start next) (point))
+                                next)
+                           parent)))
+      (if (eq treesit-defun-tactic 'top-level)
+          (treesit--top-level-defun node regexp pred)
+        node))))
+
 (defun treesit-defun-name (node)
   "Return the defun name of NODE.