bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#59693: 29.0.50; treesitter in base buffer doesn't respond to modific


From: Yuan Fu
Subject: bug#59693: 29.0.50; treesitter in base buffer doesn't respond to modifications in indirect buffer correctly
Date: Sat, 3 Dec 2022 23:20:59 -0800


> On Dec 2, 2022, at 5:01 PM, Yuan Fu <casouri@gmail.com> wrote:
> 
> 
> 
>> On Dec 2, 2022, at 12:33 AM, Eli Zaretskii <eliz@gnu.org> wrote:
>> 
>>> From: Yuan Fu <casouri@gmail.com>
>>> Date: Thu, 1 Dec 2022 21:05:43 -0800
>>> Cc: miha@kamnitnik.top,
>>> 59693@debbugs.gnu.org
>>> 
>>>> In the insdel.c hooks where you record changes to buffer text, you should
>>>> see if the buffer has a base_buffer, and if so, update any parsers of the
>>>> base buffer as well.
>>> 
>>> Actually there’s a little bit of problem. When we edit the base buffer, we 
>>> would want to update the parsers in all of its indirect buffers as well, 
>>> and AFAICT there is no pointer from base buffer to the indirect buffer, 
>>> only the other way around. 
>> 
>> That's not the problem presented by the OP, though.
> 
> Yeah, but they are the same problem in spirit, ie, parser not updated when 
> base/indirect buffer receive changes.
> 
>> 
>>> We don’t want indirect buffer and base buffers to share parsers, since they 
>>> can have different narrowing, and semantically indirect buffers should 
>>> share anything but the text with the base buffer.
>> 
>> Yes, the parsers should not be shared.
>> 
>>> How about this: we change current_buffer->parser_list from a plain list of 
>>> parsers to a cons (PARSER-LIST . INDIRECT-PARSER-LIST), where PARSER-LIST 
>>> is as before. But for base buffers, INDIRECT-PARSER-LIST includes all the 
>>> parsers of its indirect buffers; and for indirect buffers, 
>>> INDIRECT-PARSER-LIST is nil.
>> 
>> You can maybe have the indirect buffers in the list, not their parsers.
>> That could make it easier to access other treesit-related information of the
>> indirect buffers, if needed.
> 
> Good idea, it’s easier to know when to remove the reference with buffers, aka 
> when buffer is killed.

I now have a patch that fixes this problem. WDYT? I added a new buffer field 
since it’s cleaner than turning ts_parser_list into a cons, hopefully that’s 
not frowned upon. 


Yuan

Attachment: indirect.patch
Description: Binary data


reply via email to

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