[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 53031528725: Revert "Fix treesit-node-field-name and friends (b
From: |
Yuan Fu |
Subject: |
emacs-29 53031528725: Revert "Fix treesit-node-field-name and friends (bug#66674)" |
Date: |
Fri, 29 Dec 2023 22:53:47 -0500 (EST) |
branch: emacs-29
commit 530315287254da2e6b0767ad343fa55f79be8536
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Revert "Fix treesit-node-field-name and friends (bug#66674)"
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 | 4 ++--
lisp/treesit.el | 3 +--
src/treesit.c | 7 ++++---
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi
index 34eb2826a21..353585f79c7 100644
--- a/doc/lispref/parsing.texi
+++ b/doc/lispref/parsing.texi
@@ -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
diff --git a/lisp/treesit.el b/lisp/treesit.el
index eed53bc2b99..264b95dc3a3 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -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
diff --git a/src/treesit.c b/src/treesit.c
index 879405e551a..d9b981c1eae 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 53031528725: Revert "Fix treesit-node-field-name and friends (bug#66674)",
Yuan Fu <=