[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 e985466556c: Fix comment in treesit_record_change (bug#61369)
From: |
Yuan Fu |
Subject: |
emacs-29 e985466556c: Fix comment in treesit_record_change (bug#61369) |
Date: |
Sat, 18 Feb 2023 05:32:45 -0500 (EST) |
branch: emacs-29
commit e985466556c71743ec9f47ee969bb4f45da141aa
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Fix comment in treesit_record_change (bug#61369)
Turns out the previous commit message and comment is not entirely
correct: the old behavior is in fact wrong, not just "correct but has
problems".
Here is why the old code is wrong:
|visible range| -> markup for visible range
updated range -> markup for updated range
-------------
First we have some text
|aaaaaa|
Now we insert something at the beginning, because we clip
new_end_offset to visible_end, out of eight b's inserted, only the
first six are known to tree-sitter.
|bbbbbbbbaaaa|aa start: 0, old_end: 0, new_end: 6
------
In treesit_sync_visible_region, we sync up visible region, but the two
missing b's are not in the updated range.
|bbbbbbbbaaaaaa| start: 12, old_end: 12, new_end: 14
--
The old behavior not only is wrong, but also doesn't make much sense.
* src/treesit.c (treesit_record_change): Update comment.
---
src/treesit.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/treesit.c b/src/treesit.c
index e1d6f1ef79f..ef0f2407840 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -797,12 +797,10 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t
old_end_byte,
max (visible_beg, old_end_byte))
- visible_beg);
/* We don't clip new_end_offset under visible_end, because
- inserting in narrowed region always extends the visible
- region. If we clip new_end_offset here, and re-add the
- clipped "tail" in treesit_sync_visible_region later,
- while it is technically equivalent, tree-sitter's
- incremental parsing algorithm doesn't seem to like it
- (bug#61369). */
+ otherwise we would miss updating the clipped part. Plus,
+ when inserting in narrowed region, the narrowed region
+ will grow to accommodate the new text, so this is the
+ correct behavior. (Bug#61369). */
ptrdiff_t new_end_offset = (max (visible_beg, new_end_byte)
- visible_beg);
eassert (start_offset <= old_end_offset);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 e985466556c: Fix comment in treesit_record_change (bug#61369),
Yuan Fu <=