summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYuan Fu <casouri@gmail.com>2023-03-24 12:25:19 -0700
committerYuan Fu <casouri@gmail.com>2023-03-24 12:29:34 -0700
commitdb7e95531ac36ae842787b6c5f2859d0642c78cc (patch)
tree4c89ffb1722fb5f4451b81b0b82d4c1ea9a4b095 /src
parenta37f19b14a6b51fa794178095cf56c112a1396e8 (diff)
downloademacs-db7e95531ac36ae842787b6c5f2859d0642c78cc.tar.gz
Switch buffer in Ftreesit_query_capture
This way both #pred and #match predicates runs in the node's buffer by default. * src/treesit.c: (treesit_predicate_match): No need to switch buffer anymore. (Ftreesit_query_capture): Switch buffer. * doc/lispref/parsing.texi (Pattern Matching): Update manual.
Diffstat (limited to 'src')
-rw-r--r--src/treesit.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/treesit.c b/src/treesit.c
index 7f4e6cb0e13..36a297ec7da 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -2533,10 +2533,6 @@ treesit_predicate_match (Lisp_Object args, struct capture_range captures,
signal_data))
return false;
- struct buffer *old_buffer = current_buffer;
- struct buffer *buffer = XBUFFER (XTS_PARSER (XTS_NODE (node)->parser)->buffer);
- set_buffer_internal (buffer);
-
TSNode treesit_node = XTS_NODE (node)->node;
ptrdiff_t visible_beg = XTS_PARSER (XTS_NODE (node)->parser)->visible_beg;
uint32_t start_byte_offset = ts_node_start_byte (treesit_node);
@@ -2563,8 +2559,6 @@ treesit_predicate_match (Lisp_Object args, struct capture_range captures,
ZV = old_zv;
ZV_BYTE = old_zv_byte;
- set_buffer_internal (old_buffer);
-
return (val > 0);
}
@@ -2870,6 +2864,10 @@ the query. */)
Lisp_Object prev_result = result;
Lisp_Object predicates_table = make_vector (patterns_count, Qt);
Lisp_Object predicate_signal_data = Qnil;
+
+ struct buffer *old_buf = current_buffer;
+ set_buffer_internal (buf);
+
while (ts_query_cursor_next_match (cursor, &match))
{
/* Record the checkpoint that we may roll back to. */
@@ -2925,6 +2923,7 @@ the query. */)
ts_query_delete (treesit_query);
ts_query_cursor_delete (cursor);
}
+ set_buffer_internal (old_buf);
/* Some capture predicate signaled an error. */
if (!NILP (predicate_signal_data))