summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lispref/modes.texi8
-rw-r--r--lisp/treesit.el13
2 files changed, 12 insertions, 9 deletions
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index b2dd294ea28..ff372edb3ff 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -4936,10 +4936,10 @@ Each @var{matcher} or @var{anchor} is a function that takes three
arguments: @var{node}, @var{parent}, and @var{bol}. The argument
@var{bol} is the buffer position whose indentation is required: the
position of the first non-whitespace character after the beginning of
-the line. The argument @var{node} is the largest (highest-in-tree)
-node that starts at that position; and @var{parent} is the parent of
-@var{node}. However, when that position is in a whitespace or inside
-a multi-line string, no node can start at that position, so
+the line. The argument @var{node} is the largest node that starts at
+that position (and is not a root node); and @var{parent} is the parent
+of @var{node}. However, when that position is in a whitespace or
+inside a multi-line string, no node can start at that position, so
@var{node} is @code{nil}. In that case, @var{parent} would be the
smallest node that spans that position.
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 7205e43916d..e53d5d53bd0 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -1341,10 +1341,10 @@ and returns
(ANCHOR . OFFSET).
BOL is the position of the beginning of the line; NODE is the
-\"largest\" node that starts at BOL; PARENT is its parent; ANCHOR
-is a point (not a node), and OFFSET is a number. Emacs finds the
-column of ANCHOR and adds OFFSET to it as the final indentation
-of the current line.")
+\"largest\" node that starts at BOL (and isn't a root node);
+PARENT is its parent; ANCHOR is a point (not a node), and OFFSET
+is a number. Emacs finds the column of ANCHOR and adds OFFSET to
+it as the final indentation of the current line.")
(defun treesit--indent-1 ()
"Indent the current line.
@@ -1362,10 +1362,13 @@ Return (ANCHOR . OFFSET). This function is used by
((treesit-language-at (point))
(treesit-node-at bol (treesit-language-at (point))))
(t (treesit-node-at bol))))
+ (root (treesit-parser-root-node
+ (treesit-node-parser smallest-node)))
(node (treesit-parent-while
smallest-node
(lambda (node)
- (eq bol (treesit-node-start node))))))
+ (and (eq bol (treesit-node-start node))
+ (not (treesit-node-eq node root)))))))
(let*
((parser (if smallest-node
(treesit-node-parser smallest-node)