More consistent treesit-forward-sexp around comments (bug#72525)
authorYuan Fu <casouri@gmail.com>
Tue, 27 Aug 2024 02:43:00 +0000 (19:43 -0700)
committerYuan Fu <casouri@gmail.com>
Tue, 27 Aug 2024 02:45:33 +0000 (19:45 -0700)
* lisp/treesit.el (treesit-forward-sexp): Check if point is strictly
inside a comment or string, only then use the default forward-sexp
function; otherwise use tree-sitter's forward-sexp routine.

lisp/treesit.el

index 0b0a04af11813ce0038bd6c7590279a2249690b9..3ac8575aad4db3c55b7b35a75f4cb7b3859fe912 100644 (file)
@@ -2254,8 +2254,15 @@ What constitutes as text and source code sexp is determined
 by `text' and `sexp' in `treesit-thing-settings'."
   (interactive "^p")
   (let ((arg (or arg 1))
-        (pred (or treesit-sexp-type-regexp 'sexp)))
-    (or (when (treesit-node-match-p (treesit-node-at (point)) 'text t)
+        (pred (or treesit-sexp-type-regexp 'sexp))
+        (node-at-point
+         (treesit-node-at (point) (treesit-language-at (point)))))
+    (or (when (and node-at-point
+                   ;; Make sure point is strictly inside node.
+                   (< (treesit-node-start node-at-point)
+                      (point)
+                      (treesit-node-end node-at-point))
+                   (treesit-node-match-p node-at-point 'text t))
           (forward-sexp-default-function arg)
           t)
         (if (> arg 0)