aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorPo Lu2023-02-04 19:50:00 +0800
committerPo Lu2023-02-04 19:50:00 +0800
commitbfce0ce57fe0de11a6cbe3ff878a59dd2a0853d4 (patch)
treef2debd564fd963f17ff01f36e88c8276e25248d0 /admin
parent9ffb5c0cf3e97a6579b0d07f0d9952e13c0ff605 (diff)
parent0a95a81d8d36722ccf030a6194ecd953fc257a59 (diff)
downloademacs-bfce0ce57fe0de11a6cbe3ff878a59dd2a0853d4.tar.gz
emacs-bfce0ce57fe0de11a6cbe3ff878a59dd2a0853d4.zip
Merge remote-tracking branch 'origin/master' into feature/android
Diffstat (limited to 'admin')
-rw-r--r--admin/notes/tree-sitter/treesit_record_change50
1 files changed, 50 insertions, 0 deletions
diff --git a/admin/notes/tree-sitter/treesit_record_change b/admin/notes/tree-sitter/treesit_record_change
new file mode 100644
index 00000000000..bb0f9edc353
--- /dev/null
+++ b/admin/notes/tree-sitter/treesit_record_change
@@ -0,0 +1,50 @@
1NOTES ON TREESIT_RECORD_CHANGE
2
3It is vital that Emacs informs tree-sitter of every change made to the
4buffer, lest tree-sitter's parse tree would be corrupted/out of sync.
5
6All buffer changes in Emacs are made through functions in insdel.c
7(and casefiddle.c), I augmented functions in those files with calls to
8treesit_record_change. Below is a manifest of all the relavent
9functions in insdel.c as of Emacs 29:
10
11Function Calls
12----------------------------------------------------------------------
13copy_text (*1)
14insert insert_1_both
15insert_and_inherit insert_1_both
16insert_char insert
17insert_string insert
18insert_before_markers insert_1_both
19insert_before_markers_and_inherit insert_1_both
20insert_1_both treesit_record_change
21insert_from_string insert_from_string_1
22insert_from_string_before_markers insert_from_string_1
23insert_from_string_1 treesit_record_change
24insert_from_gap_1 treesit_record_change
25insert_from_gap insert_from_gap_1
26insert_from_buffer treesit_record_change
27insert_from_buffer_1 (used by insert_from_buffer) (*2)
28replace_range treesit_record_change
29replace_range_2 (caller needs to call treesit_r_c)
30del_range del_range_1
31del_range_1 del_range_2
32del_range_byte del_range_2
33del_range_both del_range_2
34del_range_2 treesit_record_change
35
36(*1) This functions is used only to copy from string to string when
37used outside of insdel.c, and when used inside insdel.c, the caller
38calls treesit_record_change.
39
40(*2) This function is a static function, and insert_from_buffer is its
41only caller. So it should be fine to call treesit_record_change in
42insert_from_buffer but not insert_from_buffer_1. I also left a
43reminder comment.
44
45
46As for casefiddle.c, do_casify_unibyte_region and
47do_casify_multibyte_region modifies buffer, but they are static
48functions and are called by casify_region, which calls
49treesit_record_change. Other higher-level functions calls
50casify_region to do the work. \ No newline at end of file