]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix an issue when searching subtree backward (bug#67117)
authorDenis Zubarev <dvzubarev@yandex.ru>
Sat, 11 Nov 2023 22:42:42 +0000 (01:42 +0300)
committerYuan Fu <casouri@gmail.com>
Tue, 19 Dec 2023 02:25:26 +0000 (18:25 -0800)
* src/treesit.c (treesit_traverse_child_helper):
Do not call treesit_traverse_sibling_helper when the named node is
required and the last child is the named node.
Otherwise treesit_traverse_sibling_helper will move cursor to the
previous sibling and last node will be skipped.
* test/src/treesit-tests.el (treesit-search-subtree-forward-1):
(treesit-search-subtree-backward-1):
Add tests.

src/treesit.c
test/src/treesit-tests.el

index 45de82ec096f882b5251a3f9c8056186d40e4ca1..04ea8958b963ff849e73647cc0cea4b7171e1536 100644 (file)
@@ -3061,9 +3061,9 @@ treesit_traverse_child_helper (TSTreeCursor *cursor,
       /* First go to the last child.  */
       while (ts_tree_cursor_goto_next_sibling (cursor));
 
-      if (!named)
+      if (!named || (named && ts_node_is_named (ts_tree_cursor_current_node(cursor))))
        return true;
-      /* Else named... */
+      /* Else named is required and last child is not named node */
       if (treesit_traverse_sibling_helper(cursor, false, true))
        return true;
       else
index 69db37fc0b47c0bc8191de45e77e24bc237e122a..9ba3a9340c1cd2cb803d2b764dd57a11acc8ce21 100644 (file)
@@ -1083,6 +1083,36 @@ This tests bug#60355."
      treesit--ert-defun-navigation-python-program
      treesit--ert-defun-navigation-top-level-master)))
 
+(ert-deftest treesit-search-subtree-forward-1 ()
+  "Test search subtree forward."
+  (skip-unless (treesit-language-available-p 'python))
+  (require 'python)
+  (python-ts-mode)
+  (insert "Temp(1, 2)")
+  (goto-char (point-min))
+  (let ((node (treesit-search-subtree
+               (treesit--thing-at (point) "call")
+               (lambda (n) (equal (treesit-node-type n ) "integer")))))
+
+    (should node)
+    (should (equal (treesit-node-text node) "1"))))
+
+(ert-deftest treesit-search-subtree-backward-1 ()
+  "Test search subtree with backward=t."
+  (skip-unless (treesit-language-available-p 'python))
+  (require 'python)
+  (python-ts-mode)
+  (insert "Temp(1, 2)")
+  (goto-char (point-min))
+  (let ((node (treesit-search-subtree
+               (treesit--thing-at (point) "call")
+               (lambda (n) (equal (treesit-node-type n ) "integer"))
+               t)))
+
+    (should node)
+    (should (equal (treesit-node-text node) "2"))))
+
+
 ;; TODO
 ;; - Functions in treesit.el
 ;; - treesit-load-name-override-list