Subject: bug#59455: 29.0.50; Treesit font lock changes unrelated code

From: Yuan Fu <[email-masked]>
Date: Tue, 22 Nov 2022 02:05:50 -0800

Theodor Thornhill <[email-masked]> writes:

> Hi Yuan!
>
> I've noticed some strange behavior with font-lock lately in c-ts-mode,
> and also in all the other ts modes.
>
> to reproduce:
>
> emacs -Q
>
> C-x C-f foo.c RET
>
> Insert this:
>
> ```
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
> /* lol lol lol lol lol lol lol lol lol lol */
>
> int
> foo (void)
> {
>   return 5;
> }
>
> int
> foo (void)
> {
>   if (x)
>     {
>       return 5;
>     }
> }
>
> int
> foo (void)
> {
>   return 5;
> }
> ```
>
> M-x c-ts-mode RET
>
> Now on the first line, repeatedly press 'M-c' (capitalize-word) and
> watch the highlights of the rest of the file jump around.  Then try
> undoing the changes by repeatedly pressing 'C-/' until you are back at
> the state right after the first insert.  Now highlights are messed up.
>
> I'm not sure where to start looking for this, but I do remember there
> being some issues in Eglot with these "multi-edit" commands.
>
> If you have some pointers for where to look I can dig around :)

Thanks for the catch! It is due to tree-sitter not correctly recording
changes in casefiddle.c. I’ve fixed it now. Now you can Lol as much as
your heart desire.

Yuan