summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuan Fu <casouri@gmail.com>2022-12-24 16:40:00 -0800
committerYuan Fu <casouri@gmail.com>2022-12-24 18:43:03 -0800
commit6253184afc2e53c6782a41ec1b59779449152172 (patch)
tree7d0b9507521707dd035b48b140f5d044d1f9eb40
parentf8e219ebfaa286f4e7240640799020bb5b6e07b3 (diff)
downloademacs-6253184afc2.tar.gz
; * lisp/treesit.el (treesit-defun-at-point): Guard against nil.
-rw-r--r--lisp/treesit.el42
1 files changed, 24 insertions, 18 deletions
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 355c6b6b99a..09483acaa7d 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -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.