; * lisp/treesit.el (treesit-defun-at-point): Guard against nil.
This commit is contained in:
parent
f8e219ebfa
commit
6253184afc
1 changed files with 24 additions and 18 deletions
|
@ -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
|
parent defun surrounding POS. All of three could be nil if no
|
||||||
sound defun exists.
|
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))
|
(let* ((node (treesit-node-at pos))
|
||||||
;; NODE-BEFORE/AFTER = NODE when POS is completely in NODE,
|
;; NODE-BEFORE/AFTER = NODE when POS is completely in NODE,
|
||||||
;; but if not, that means point could be in between two
|
;; 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.
|
;; TODO: In corporate into thing-at-point.
|
||||||
(defun treesit-defun-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
|
Respects `treesit-defun-tactic': return the top-level defun if it
|
||||||
is `top-level', return the immediate parent defun if it is
|
is `top-level', return the immediate parent defun if it is
|
||||||
`nested'."
|
`nested'.
|
||||||
(pcase-let* ((`(,regexp . ,pred)
|
|
||||||
(if (consp treesit-defun-type-regexp)
|
Return nil if `treesit-defun-type-regexp' is not set."
|
||||||
treesit-defun-type-regexp
|
(when treesit-defun-type-regexp
|
||||||
(cons treesit-defun-type-regexp nil)))
|
(pcase-let* ((`(,regexp . ,pred)
|
||||||
(`(,_ ,next ,parent)
|
(if (consp treesit-defun-type-regexp)
|
||||||
(treesit--defuns-around (point) regexp pred))
|
treesit-defun-type-regexp
|
||||||
;; If point is at the beginning of a defun, we
|
(cons treesit-defun-type-regexp nil)))
|
||||||
;; prioritize that defun over the parent in nested
|
(`(,_ ,next ,parent)
|
||||||
;; mode.
|
(treesit--defuns-around (point) regexp pred))
|
||||||
(node (or (and (eq (treesit-node-start next) (point))
|
;; If point is at the beginning of a defun, we
|
||||||
next)
|
;; prioritize that defun over the parent in nested
|
||||||
parent)))
|
;; mode.
|
||||||
(if (eq treesit-defun-tactic 'top-level)
|
(node (or (and (eq (treesit-node-start next) (point))
|
||||||
(treesit--top-level-defun node regexp pred)
|
next)
|
||||||
node)))
|
parent)))
|
||||||
|
(if (eq treesit-defun-tactic 'top-level)
|
||||||
|
(treesit--top-level-defun node regexp pred)
|
||||||
|
node))))
|
||||||
|
|
||||||
(defun treesit-defun-name (node)
|
(defun treesit-defun-name (node)
|
||||||
"Return the defun name of NODE.
|
"Return the defun name of NODE.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue