]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve treesit-search-forward-goto so it doens't stuck at EOF
authorYuan Fu <casouri@gmail.com>
Mon, 10 Oct 2022 18:14:35 +0000 (11:14 -0700)
committerYuan Fu <casouri@gmail.com>
Mon, 10 Oct 2022 18:14:35 +0000 (11:14 -0700)
* lisp/treesit.el (treesit-search-forward-goto): Handle the edge case.

lisp/treesit.el

index 34b501cfba8858fb7945dccb9f41cef92914190a..2bcfddb56b6b03a45508046d40da5421a8aa6e22 100644 (file)
@@ -826,6 +826,12 @@ or end of the matches node, it can be either \\='start or
 ALL, BACKWARD, and UP are the same as in `treesit-search-forward'."
   (let ((node (treesit-node-at (point)))
         (start (point)))
+    ;; Often the EOF (point-max) is a newline, and `treesit-node-at'
+    ;; will return nil at that point (which is fair).  But we need a
+    ;; node as the starting point to traverse the tree.  So we try to
+    ;; use the node before point.
+    (when (and (not node) (eq (point) (point-max)))
+      (setq node (treesit-node-at (max (1- (point)) (point-min)))))
     ;; When searching forward, it is possible for (point) < start,
     ;; because `treesit-search-forward' goes to parents.
     (while (and node (if backward