Revert "New function treesit-parser-changed-ranges"
This reverts commit996b957671
. For reason see760b54de08
.
This commit is contained in:
parent
24b7bf2746
commit
2ee3edce3f
4 changed files with 4 additions and 86 deletions
|
@ -540,26 +540,6 @@ symbol, rather than a lambda function.
|
|||
This function returns the list of @var{parser}'s notifier functions.
|
||||
@end defun
|
||||
|
||||
Sometimes a Lisp program might need to synchronously get the changed
|
||||
ranges of the last reparse. The function
|
||||
@code{treesit-parser-changed-ranges} exists for this purpose. It
|
||||
returns the ranges which were passed to the notifier functions.
|
||||
|
||||
@defun treesit-parser-changed-ranges parser &optional quiet
|
||||
This function returns the ranges that has been changed since last
|
||||
reparse. It returns a list of cons cells of the form
|
||||
@w{@code{(@var{start} . @var{end})}}, where @var{start} and @var{end}
|
||||
mark the start and the end positions of a range.
|
||||
|
||||
This function should almost always be called immediately after
|
||||
reparsing. If it's called when there are new buffer edits that hasn't
|
||||
been reparsed, Emacs signals the @code{treesit-unparsed-edits} error,
|
||||
unless the optional argument @var{quiet} is non-nil.
|
||||
|
||||
Calling this function multiple times consecutively doesn't change its
|
||||
return value; it always returns the ranges affected by the last reparse.
|
||||
@end defun
|
||||
|
||||
@node Retrieving Nodes
|
||||
@section Retrieving Nodes
|
||||
@cindex retrieve node, tree-sitter
|
||||
|
|
18
etc/NEWS
18
etc/NEWS
|
@ -2872,24 +2872,6 @@ only return parsers for that language. If TAG is given, only return
|
|||
parsers with that tag. Note that passing nil as tag doesn't mean return
|
||||
all parsers, but rather "all parsers with no tags".
|
||||
|
||||
+++
|
||||
*** New function 'treesit-parser-changed-ranges'.
|
||||
This function returns buffer regions that are affected by the last
|
||||
buffer edits.
|
||||
|
||||
*** New function 'treesit-add-font-lock-rules'.
|
||||
This function helps users to add custom font-lock rules to a tree-sitter
|
||||
major mode.
|
||||
|
||||
---
|
||||
** The variable 'rx-constituents' is now obsolete.
|
||||
Use 'rx-define', 'rx-let' and 'rx-let-eval' instead.
|
||||
|
||||
---
|
||||
** 'defvar-keymap' can specify hints for 'repeat-mode'.
|
||||
Using ':repeat (:hints ((command . "hint") ...))' will show
|
||||
the hint string in the echo area together with repeatable keys.
|
||||
|
||||
|
||||
* Changes in Emacs 30.1 on Non-Free Operating Systems
|
||||
|
||||
|
|
|
@ -1017,8 +1017,9 @@ treesit_check_buffer_size (struct buffer *buffer)
|
|||
|
||||
static Lisp_Object treesit_make_ranges (const TSRange *, uint32_t, struct buffer *);
|
||||
|
||||
static Lisp_Object
|
||||
treesit_get_changed_ranges (TSTree *old_tree, TSTree *new_tree, Lisp_Object parser)
|
||||
static void
|
||||
treesit_call_after_change_functions (TSTree *old_tree, TSTree *new_tree,
|
||||
Lisp_Object parser)
|
||||
{
|
||||
/* If the old_tree is NULL, meaning this is the first parse, the
|
||||
changed range is the whole buffer. */
|
||||
|
@ -1038,13 +1039,7 @@ treesit_get_changed_ranges (TSTree *old_tree, TSTree *new_tree, Lisp_Object pars
|
|||
lisp_ranges = Fcons (Fcons (Fpoint_min (), Fpoint_max ()), Qnil);
|
||||
set_buffer_internal (oldbuf);
|
||||
}
|
||||
return lisp_ranges;
|
||||
}
|
||||
|
||||
static void
|
||||
treesit_call_after_change_functions (Lisp_Object lisp_ranges,
|
||||
Lisp_Object parser)
|
||||
{
|
||||
specpdl_ref count = SPECPDL_INDEX ();
|
||||
|
||||
/* let's trust the after change functions and not clone a new ranges
|
||||
|
@ -1096,17 +1091,13 @@ treesit_ensure_parsed (Lisp_Object parser)
|
|||
XTS_PARSER (parser)->tree = new_tree;
|
||||
XTS_PARSER (parser)->need_reparse = false;
|
||||
|
||||
Lisp_Object changed_ranges;
|
||||
changed_ranges = treesit_get_changed_ranges (tree, new_tree, parser);
|
||||
XTS_PARSER (parser)->last_changed_ranges = changed_ranges;
|
||||
|
||||
/* After-change functions should run at the very end, most crucially
|
||||
after need_reparse is set to false, this way if the function
|
||||
calls some tree-sitter function which invokes
|
||||
treesit_ensure_parsed again, it returns early and do not
|
||||
recursively call the after change functions again.
|
||||
(ref:notifier-inside-ensure-parsed) */
|
||||
treesit_call_after_change_functions (changed_ranges, parser);
|
||||
treesit_call_after_change_functions (tree, new_tree, parser);
|
||||
ts_tree_delete (tree);
|
||||
}
|
||||
|
||||
|
@ -1180,7 +1171,6 @@ make_treesit_parser (Lisp_Object buffer, TSParser *parser,
|
|||
lisp_parser->after_change_functions = Qnil;
|
||||
lisp_parser->tag = tag;
|
||||
lisp_parser->last_set_ranges = Qnil;
|
||||
lisp_parser->last_changed_ranges = Qnil;
|
||||
lisp_parser->buffer = buffer;
|
||||
lisp_parser->parser = parser;
|
||||
lisp_parser->tree = tree;
|
||||
|
@ -1828,32 +1818,6 @@ positions. PARSER is the parser issuing the notification. */)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
DEFUN ("treesit-parser-changed-ranges", Ftreesit_parser_changed_ranges,
|
||||
Streesit_parser_changed_ranges,
|
||||
1, 2, 0,
|
||||
doc: /* Return the buffer regions affected by the last reparse of PARSER.
|
||||
|
||||
Returns a list of cons cells (BEG . END), where each cons cell represents
|
||||
a region in which changes in buffer contents affected the last reparse.
|
||||
|
||||
This function should almost always be called immediately after
|
||||
reparsing. If it's called when there are new buffer edits that hasn't
|
||||
been reparsed, Emacs signals the `treesit-unparsed-edits' error, unless
|
||||
optional argument QUIET is non-nil.
|
||||
|
||||
Calling this function multiple times consecutively doesn't change its
|
||||
return value; it always returns the ranges affected by the last
|
||||
reparse. */)
|
||||
(Lisp_Object parser, Lisp_Object quiet)
|
||||
{
|
||||
treesit_check_parser (parser);
|
||||
|
||||
if (XTS_PARSER (parser)->need_reparse && NILP (quiet))
|
||||
xsignal1 (Qtreesit_unparsed_edits, parser);
|
||||
|
||||
return XTS_PARSER (parser)->last_changed_ranges;
|
||||
}
|
||||
|
||||
|
||||
/*** Node API */
|
||||
|
||||
|
@ -4046,7 +4010,6 @@ syms_of_treesit (void)
|
|||
DEFSYM (Qtreesit_query_error, "treesit-query-error");
|
||||
DEFSYM (Qtreesit_parse_error, "treesit-parse-error");
|
||||
DEFSYM (Qtreesit_range_invalid, "treesit-range-invalid");
|
||||
DEFSYM (Qtreesit_unparsed_edits, "treesit-unparsed_edits");
|
||||
DEFSYM (Qtreesit_buffer_too_large,
|
||||
"treesit-buffer-too-large");
|
||||
DEFSYM (Qtreesit_load_language_error,
|
||||
|
@ -4075,8 +4038,6 @@ syms_of_treesit (void)
|
|||
define_error (Qtreesit_range_invalid,
|
||||
"RANGES are invalid: they have to be ordered and should not overlap",
|
||||
Qtreesit_error);
|
||||
define_error (Qtreesit_unparsed_edits, "There are unparsed edits in the buffer",
|
||||
Qtreesit_error);
|
||||
define_error (Qtreesit_buffer_too_large, "Buffer too large (> 4GiB)",
|
||||
Qtreesit_error);
|
||||
define_error (Qtreesit_load_language_error,
|
||||
|
@ -4217,8 +4178,6 @@ the symbol of that THING. For example, (or sexp sentence). */);
|
|||
defsubr (&Streesit_parser_add_notifier);
|
||||
defsubr (&Streesit_parser_remove_notifier);
|
||||
|
||||
defsubr (&Streesit_parser_changed_ranges);
|
||||
|
||||
defsubr (&Streesit_node_type);
|
||||
defsubr (&Streesit_node_start);
|
||||
defsubr (&Streesit_node_end);
|
||||
|
|
|
@ -49,9 +49,6 @@ struct Lisp_TS_Parser
|
|||
ranges the users wants to set, and avoid reparse if the new
|
||||
ranges is the same as the last set one. */
|
||||
Lisp_Object last_set_ranges;
|
||||
/* The range of buffer content that was affected by the last
|
||||
re-parse. */
|
||||
Lisp_Object last_changed_ranges;
|
||||
/* The buffer associated with this parser. */
|
||||
Lisp_Object buffer;
|
||||
/* The pointer to the tree-sitter parser. Never NULL. */
|
||||
|
|
Loading…
Add table
Reference in a new issue