* doc/lispref/parsing.texi (Using Parser): Update manual.
* lisp/treesit.el (treesit): Add shordocs.
* src/treesit.c: Augment docstrings.
the root node of the generated syntax tree.
@end defun
+@cindex parse-tree update callback, tree-sitter
+@cindex parse-tree after-change notifer, tree-sitter
+@cindex tree-sitter parse-tree update callback
+@cindex tree-sitter parse-tree after-change notifer
+@heading Be notified by changes to the parse tree
+
+A Lisp program might want to be notified of affected text of a
+incremental parse. For example, inserting a closing comment token
+converts text before that closing comment token into comments. Even
+though those text are not directly edited, they are changed
+nevertheless.
+
+Emacs lets a Lisp program to register callback functions
+(@dfn{notifiers}) for this kind of changes. A notifier function takes
+2 arguments: @var{ranges} and @var{parser}. @var{ranges} is a list of
+cons of the form @w{@code{(@var{start} . @var{end})}}, where
+@var{start} and @var{end} marks the start and end position of a range.
+@var{parser} is the parser issuing the notification.
+
+Every time a parser reparses a buffer, it compares the old and new
+parse-tree, computes the ranges in which nodes have changed, and
+passes the ranges to notifier functions.
+
+@defun treesit-parser-add-notifier parser function
+This function adds @var{function} to @var{parser}'s after-change
+notifier functions list. @var{function} must be a function symbol,
+rather than a lambda function.
+@end defun
+
+@defun treesit-parser-remove-notifier parser function
+This function removes @var{function} from @var{parser}'s after-change
+notifier functions list. @var{function} must be a function symbol,
+rather than a lambda function.
+@end defun
+
+@defun treesit-parser-notifiers parser
+This function returns @var{parser}'s notifier function list.
+@end defun
+
@node Retrieving Nodes
@section Retrieving Nodes
@cindex retrieve node, tree-sitter
(treesit-parser-language
:no-eval (treesit-parser-language parser)
:eg-result c)
+ (treesit-parser-add-notifier)
+ (treesit-parser-remove-notifier)
+ (treesit-parser-notifiers
+ :no-eval (treesit-parser-notifiers parser)
+ :eg-result (function1 function2 function3))
"Parser ranges"
DEFUN ("treesit-parser-notifiers", Ftreesit_parser_notifiers,
Streesit_parser_notifiers,
1, 1, 0,
- doc: /* Return the after-change functions for PARSER. */)
+ doc: /* Return the after-change notifier functions for PARSER. */)
(Lisp_Object parser)
{
treesit_check_parser (parser);
DEFUN ("treesit-parser-add-notifier", Ftreesit_parser_add_notifier,
Streesit_parser_add_notifier,
2, 2, 0,
- doc: /* Add FUNCTION to PARSER's after-change notifiers. */)
+ doc: /* Add FUNCTION to PARSER's after-change notifiers list.
+FUNCTION must be a function symbol, rather than a lambda form.
+FUNCTION should take 2 arguments, RANGES and PARSER. RANGES is a list
+of cons of the form (START . END), where START and END are buffer
+positions. PARSER is the parser issuing the notification. */)
(Lisp_Object parser, Lisp_Object function)
{
treesit_check_parser (parser);
DEFUN ("treesit-parser-remove-notifier", Ftreesit_parser_remove_notifier,
Streesit_parser_remove_notifier,
2, 2, 0,
- doc: /* Remove FUNCTION from PARSER's after-change notifiers. */)
+ doc: /* Remove FUNCTION from PARSER's after-change notifiers
+list. FUNCTION must be a function symbol, rather than a lambda form.
+FUNCTION should take 2 arguments, RANGES and PARSER. RANGES is a list
+of cons of the form (START . END), where START and END are buffer
+positions. PARSER is the parser issuing the notification. */)
(Lisp_Object parser, Lisp_Object function)
{
treesit_check_parser (parser);