emacs-diffs
[Top][All Lists]
Advanced

[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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]