diff options
| author | Yuan Fu | 2022-06-15 21:53:15 -0700 |
|---|---|---|
| committer | Yuan Fu | 2022-06-16 11:52:04 -0700 |
| commit | 7cee82a91d287e42e6596960cbee17157cde4b29 (patch) | |
| tree | eb6ec90eaacdc78137d87fc63632a18226027735 /src/buffer.c | |
| parent | bd1b27b7c7bbd969cf76409499bb84a83600c42a (diff) | |
| download | emacs-7cee82a91d287e42e6596960cbee17157cde4b29.tar.gz emacs-7cee82a91d287e42e6596960cbee17157cde4b29.zip | |
Fix treesit function ts_record_change and friends
In ts_record_change, the way we calculate tree-sitter change was
wrong:
ptrdiff_t affected_start =
max (visible_beg, start_byte) - visible_beg;
ptrdiff_t affected_old_end =
min (visible_end, affected_start + bytes_del);
ptrdiff_t affected_new_end =
affected_start + bytes_ins;
I changed it to below (also renamed variables)
ptrdiff_t start_offset =
min (visible_end,
max (visible_beg, start_byte)) - visible_beg;
ptrdiff_t old_end_offset =
min (visible_end,
max (visible_beg, old_end_byte)) - visible_beg;
ptrdiff_t new_end_offset =
min (visible_end,
max (visible_beg, new_end_byte)) - visible_beg;
Also previously only visible_end is changed (in a wrong way)
XTS_PARSER (lisp_parser)->visible_end = affected_new_end;
Now we have a whole new bunch of code that makes the right change.
* src/treesit.c (ts_tree_edit_1): Add assertion.
(ts_record_change): See above.
(ts_ensure_position_synced): Add assertion.
(ts_ensure_parsed): Only free if non-NULL.
(make_ts_parser): Add assertion.
(Ftreesit_parser_set_included_ranges): Ensure parsed before setting ranges.
(Ftreesit_parser_included_ranges): Add assertion.
Diffstat (limited to 'src/buffer.c')
0 files changed, 0 insertions, 0 deletions