emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 35c2ca2ca6 2/5: Make treesit-node-at/on guess language at point


From: Yuan Fu
Subject: emacs-29 35c2ca2ca6 2/5: Make treesit-node-at/on guess language at point
Date: Sat, 24 Dec 2022 21:43:13 -0500 (EST)

branch: emacs-29
commit 35c2ca2ca64070f6ebc75011e5e6e2d688124bec
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    Make treesit-node-at/on guess language at point
    
    If PARSER-OR-LANG is nil, it makes more sense to guess the language at
    point by treesit-language-at than to simply use the first parser in
    the parser list.
    
    * doc/lispref/parsing.texi (Retrieving Nodes): Update manual.
    * lisp/treesit.el (treesit-node-at)
    (treesit-node-on): Guess language at point.  Update docstring.
    (treesit-buffer-root-node): Update docstring.
---
 doc/lispref/parsing.texi | 32 +++++++++++++++++---------------
 lisp/treesit.el          | 30 +++++++++++++++++-------------
 2 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi
index adb4c5e6e0..e213363298 100644
--- a/doc/lispref/parsing.texi
+++ b/doc/lispref/parsing.texi
@@ -576,12 +576,12 @@ leaf node after @var{pos}.
 Finally, if there is no leaf node after @var{pos}, return the first
 leaf node before @var{pos}.
 
-When @var{parser-or-lang} is @code{nil} or omitted, this function uses
-the first parser in @code{(treesit-parser-list)} of the current
-buffer.  If @var{parser-or-lang} is a parser object, it uses that
-parser; if @var{parser-or-lang} is a language, it finds the first
-parser using that language in @code{(treesit-parser-list)}, and uses
-that.
+If @var{parser-or-lang} is a parser object, this function uses that
+parser; if @var{parser-or-lang} is a language, this function uses the
+first parser for that language in the current buffer, or creates one
+if none exists; if @var{parser-or-lang} is @code{nil}, this function
+tries to guess the language at @var{pos} by
+@code{treesit-language-at}.
 
 If this function cannot find a suitable node to return, it returns
 @code{nil}.
@@ -610,13 +610,14 @@ is at or after @var{end}.
 inside any top-level construct (function definition, etc.) most
 probably will give you the root node, because the root node is the
 smallest node that covers that empty line.  Most of the time, you want
-to use @code{treesit-node-at}, described above, instead.
+to use @code{treesit-node-at} instead.
 
-When @var{parser-or-lang} is @code{nil}, this function uses the first
-parser in @code{(treesit-parser-list)} of the current buffer.  If
-@var{parser-or-lang} is a parser object, it uses that parser; if
-@var{parser-or-lang} is a language, it finds the first parser using
-that language in @code{(treesit-parser-list)}, and uses that.
+If @var{parser-or-lang} is a parser object, this function uses that
+parser; if @var{parser-or-lang} is a language, this function uses the
+first parser for that language in the current buffer, or creates one
+if none exists; if @var{parser-or-lang} is @code{nil}, this function
+tries to guess the language at @var{beg} by
+@code{treesit-language-at}.
 
 If @var{named} is non-@code{nil}, this function looks for a named node
 only (@pxref{tree-sitter named node, named node}).
@@ -628,9 +629,10 @@ This function returns the root node of the syntax tree 
generated by
 @end defun
 
 @defun treesit-buffer-root-node &optional language
-This function finds the first parser that uses @var{language} in
-@code{(treesit-parser-list)} of the current buffer, and returns the
-root node generated by that parser.  If it cannot find an appropriate
+This function finds the first parser for @var{language} in the current
+buffer, or creates one if none exists, and returns the root node
+generated by that parser.  If @var{language} is omitted, it uses the
+first parser in the parser list.  If it cannot find an appropriate
 parser, it returns @code{nil}.
 @end defun
 
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 3d9c61b9dc..2b30da4be7 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -171,13 +171,15 @@ before POS.
 Return nil if no leaf node can be returned.  If NAMED is non-nil,
 only look for named nodes.
 
-If PARSER-OR-LANG is nil, use the first parser in
-`treesit-parser-list'; if PARSER-OR-LANG is a parser, use
-that parser; if PARSER-OR-LANG is a language, find a parser using
-that language in the current buffer, and use that."
+If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG
+is a language, find the first parser for that language in the
+current buffer, or create one if none exists; If PARSER-OR-LANG
+is nil, try to guess the language at POS by
+`treesit-language-at'."
   (let* ((root (if (treesit-parser-p parser-or-lang)
                    (treesit-parser-root-node parser-or-lang)
-                 (treesit-buffer-root-node parser-or-lang)))
+                 (treesit-buffer-root-node
+                  (or parser-or-lang (treesit-language-at pos)))))
          (node root)
          (node-before root)
          (pos-1 (max (1- pos) (point-min)))
@@ -219,13 +221,15 @@ to use `treesit-node-at' instead.
 Return nil if none was found.  If NAMED is non-nil, only look for
 named node.
 
-If PARSER-OR-LANG is nil, use the first parser in
-`treesit-parser-list'; if PARSER-OR-LANG is a parser, use
-that parser; if PARSER-OR-LANG is a language, find a parser using
-that language in the current buffer, and use that."
+If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG
+is a language, find the first parser for that language in the
+current buffer, or create one if none exists; If PARSER-OR-LANG
+is nil, try to guess the language at BEG by
+`treesit-language-at'."
   (let ((root (if (treesit-parser-p parser-or-lang)
                   (treesit-parser-root-node parser-or-lang)
-                (treesit-buffer-root-node parser-or-lang))))
+                (treesit-buffer-root-node
+                 (or parser-or-lang (treesit-language-at beg))))))
     (treesit-node-descendant-for-range root beg (or end beg) named)))
 
 (defun treesit-node-top-level (node &optional type)
@@ -246,10 +250,10 @@ regexp, rather than using NODE's type."
 
 (defun treesit-buffer-root-node (&optional language)
   "Return the root node of the current buffer.
-Use the first parser in `treesit-parser-list'.
 
-If optional argument LANGUAGE is non-nil, use the first parser
-for LANGUAGE."
+Use the first parser in the parser list if LANGUAGE is omitted.
+If LANGUAGE is non-nil, use the first parser for LANGUAGE in the
+parser list, or create one if none exists."
   (if-let ((parser
             (if language
                 (treesit-parser-create language)



reply via email to

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