Some explanation: Fsubst_char_in_region used to have a branch,
one branch path calls replace_range, one branch path modifies
the buffer directly. replace_range already calls
treesit_record_change within it, so we needed to make sure we
only call treesit_record_change in the other branch path.
After I added the call to treesit_record_change, some changes
are made to Fsubst_char_in_region, and the branch was removed.
So no wonder Stefan had the confusion and wrote the FIXME note.
Now that the branch is gone, we can indeed call
treesit_record_change in the end like signal_after_change.
* src/editfns.c (Fsubst_char_in_region): Move to end.
(cherry picked from commit
3c47139b8f602286a8c5c5ca72431b933b4f2a23)
record_change (pos, 1);
for (i = 0; i < len; i++) *p++ = tostr[i];
-#ifdef HAVE_TREE_SITTER
- /* FIXME: Why not do it when we `signal_after_change`? */
- treesit_record_change (pos_byte, pos_byte + len, pos_byte + len);
-#endif
last_changed = pos + 1;
}
pos_byte = pos_byte_next;
if (changed > 0)
{
+#ifdef HAVE_TREE_SITTER
+ treesit_record_change (changed, last_changed, last_changed);
+#endif
signal_after_change (changed,
last_changed - changed, last_changed - changed);
update_compositions (changed, last_changed, CHECK_ALL);