diff options
| author | Po Lu | 2023-02-04 19:50:00 +0800 |
|---|---|---|
| committer | Po Lu | 2023-02-04 19:50:00 +0800 |
| commit | bfce0ce57fe0de11a6cbe3ff878a59dd2a0853d4 (patch) | |
| tree | f2debd564fd963f17ff01f36e88c8276e25248d0 /admin | |
| parent | 9ffb5c0cf3e97a6579b0d07f0d9952e13c0ff605 (diff) | |
| parent | 0a95a81d8d36722ccf030a6194ecd953fc257a59 (diff) | |
| download | emacs-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_change | 50 |
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 @@ | |||
| 1 | NOTES ON TREESIT_RECORD_CHANGE | ||
| 2 | |||
| 3 | It is vital that Emacs informs tree-sitter of every change made to the | ||
| 4 | buffer, lest tree-sitter's parse tree would be corrupted/out of sync. | ||
| 5 | |||
| 6 | All buffer changes in Emacs are made through functions in insdel.c | ||
| 7 | (and casefiddle.c), I augmented functions in those files with calls to | ||
| 8 | treesit_record_change. Below is a manifest of all the relavent | ||
| 9 | functions in insdel.c as of Emacs 29: | ||
| 10 | |||
| 11 | Function Calls | ||
| 12 | ---------------------------------------------------------------------- | ||
| 13 | copy_text (*1) | ||
| 14 | insert insert_1_both | ||
| 15 | insert_and_inherit insert_1_both | ||
| 16 | insert_char insert | ||
| 17 | insert_string insert | ||
| 18 | insert_before_markers insert_1_both | ||
| 19 | insert_before_markers_and_inherit insert_1_both | ||
| 20 | insert_1_both treesit_record_change | ||
| 21 | insert_from_string insert_from_string_1 | ||
| 22 | insert_from_string_before_markers insert_from_string_1 | ||
| 23 | insert_from_string_1 treesit_record_change | ||
| 24 | insert_from_gap_1 treesit_record_change | ||
| 25 | insert_from_gap insert_from_gap_1 | ||
| 26 | insert_from_buffer treesit_record_change | ||
| 27 | insert_from_buffer_1 (used by insert_from_buffer) (*2) | ||
| 28 | replace_range treesit_record_change | ||
| 29 | replace_range_2 (caller needs to call treesit_r_c) | ||
| 30 | del_range del_range_1 | ||
| 31 | del_range_1 del_range_2 | ||
| 32 | del_range_byte del_range_2 | ||
| 33 | del_range_both del_range_2 | ||
| 34 | del_range_2 treesit_record_change | ||
| 35 | |||
| 36 | (*1) This functions is used only to copy from string to string when | ||
| 37 | used outside of insdel.c, and when used inside insdel.c, the caller | ||
| 38 | calls treesit_record_change. | ||
| 39 | |||
| 40 | (*2) This function is a static function, and insert_from_buffer is its | ||
| 41 | only caller. So it should be fine to call treesit_record_change in | ||
| 42 | insert_from_buffer but not insert_from_buffer_1. I also left a | ||
| 43 | reminder comment. | ||
| 44 | |||
| 45 | |||
| 46 | As for casefiddle.c, do_casify_unibyte_region and | ||
| 47 | do_casify_multibyte_region modifies buffer, but they are static | ||
| 48 | functions and are called by casify_region, which calls | ||
| 49 | treesit_record_change. Other higher-level functions calls | ||
| 50 | casify_region to do the work. \ No newline at end of file | ||