]> git.eshelyaron.com Git - emacs.git/commitdiff
Revert "Fix treesit-node-field-name and friends (bug#66674)"
authorYuan Fu <casouri@gmail.com>
Sat, 30 Dec 2023 03:52:07 +0000 (19:52 -0800)
committerYuan Fu <casouri@gmail.com>
Sat, 30 Dec 2023 03:52:07 +0000 (19:52 -0800)
This reverts commit 9874561f39e62c1c9fada6c2e013f93d9ea65729.

See bug#67990.  Basically our original code is correct, the error is
in libtree-sitter, which only manifests in certain cases.

https://github.com/tree-sitter/tree-sitter/pull/2104

doc/lispref/parsing.texi
lisp/treesit.el
src/treesit.c

index 34eb2826a211398f1ac015d2119be1e3513cb583..353585f79c716ee8c56e27daa603f73a10e2a8b1 100644 (file)
@@ -1015,8 +1015,8 @@ This function returns the field name of the @var{n}'th child of
 @var{node}.  It returns @code{nil} if there is no @var{n}'th child, or
 the @var{n}'th child doesn't have a field name.
 
-Note that @var{n} counts named nodes only, and @var{n} can be
-negative, e.g., @minus{}1 represents the last child.
+Note that @var{n} counts both named and anonymous children, and
+@var{n} can be negative, e.g., @minus{}1 represents the last child.
 @end defun
 
 @defun treesit-node-child-count node &optional named
index eed53bc2b99ae2ad96996706292306f7ce496564..264b95dc3a3908a89b0ef088832f6cfc2f4cc3c3 100644 (file)
@@ -360,7 +360,6 @@ If NAMED is non-nil, collect named child only."
   "Return the index of NODE in its parent.
 If NAMED is non-nil, count named child only."
   (let ((count 0))
-    ;; TODO: Use next-sibling as it's more efficient.
     (while (setq node (treesit-node-prev-sibling node named))
       (cl-incf count))
     count))
@@ -368,7 +367,7 @@ If NAMED is non-nil, count named child only."
 (defun treesit-node-field-name (node)
   "Return the field name of NODE as a child of its parent."
   (when-let ((parent (treesit-node-parent node))
-             (idx (treesit-node-index node t)))
+             (idx (treesit-node-index node)))
     (treesit-node-field-name-for-child parent idx)))
 
 ;;; Query API supplement
index 879405e551a19877d5e1389dc6a5ae880bd69dbc..d9b981c1eae291081d91eeb4d2dd63f7da75d884 100644 (file)
@@ -2019,8 +2019,9 @@ DEFUN ("treesit-node-field-name-for-child",
 Return nil if there's no Nth child, or if it has no field.
 If NODE is nil, return nil.
 
-Note that N counts named nodes only.  Also, N could be negative, e.g.,
--1 represents the last child.  */)
+N counts all children, i.e., named ones and anonymous ones.
+
+N could be negative, e.g., -1 represents the last child.  */)
   (Lisp_Object node, Lisp_Object n)
 {
   if (NILP (node))
@@ -2034,7 +2035,7 @@ Note that N counts named nodes only.  Also, N could be negative, e.g.,
 
   /* Process negative index.  */
   if (idx < 0)
-    idx = ts_node_named_child_count (treesit_node) + idx;
+    idx = ts_node_child_count (treesit_node) + idx;
   if (idx < 0)
     return Qnil;
   if (idx > UINT32_MAX)