emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-29 7b315e8a5c9: Fix an issue when searching subtree backward (bug#


From: Yuan Fu
Subject: emacs-29 7b315e8a5c9: Fix an issue when searching subtree backward (bug#67117)
Date: Mon, 18 Dec 2023 21:25:58 -0500 (EST)

branch: emacs-29
commit 7b315e8a5c966f8d11a4f646db4e29b989b56ab1
Author: Denis Zubarev <dvzubarev@yandex.ru>
Commit: Yuan Fu <casouri@gmail.com>

    Fix an issue when searching subtree backward (bug#67117)
    
    * 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             |  4 ++--
 test/src/treesit-tests.el | 30 ++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/treesit.c b/src/treesit.c
index 45de82ec096..04ea8958b96 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -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
diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el
index 69db37fc0b4..9ba3a9340c1 100644
--- a/test/src/treesit-tests.el
+++ b/test/src/treesit-tests.el
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]