Subject: Re: bug#73978: 31.0.50; Text syntax applied on too many things in tsx-ts-mode

From: Juri Linkov <[email-masked]>
Date: Tue, 24 Dec 2024 19:25:22 +0200

>> @@ -630,7 +640,8 @@ tsx-ts--s-p-query
>>   (when (treesit-available-p)
>>     (treesit-query-compile 'tsx
>>                            '(((regex pattern: (regex_pattern) @regexp))
>> -                             ((jsx_text) @jsx)))))
>> +                             ((jsx_opening_element) @jsx)
>> +                             ((jsx_closing_element) @jsx)))))
>> 
>> (defun typescript-ts--syntax-propertize (beg end)
>>   (let ((captures (treesit-query-capture 'typescript typescript-ts--s-p-query beg end)))
>
> Thanks for looking into this! But what’s the intention of this change?
> In a snippet like this:
>
> <button onClick={() => {
>   func();
>   return true;
> }}>
>   Text
>   {func();}
> </button>
>
> Only the “Text” part should be marked as string.  With the change you
> proposed, the <button …> and </button> part would be marked as string.

How could I see that text is marked as string?
I see no different fontification.

> We must mark text as strings because they could include </>/(/) etc
> and mess with syntax-ppss. 

With the updates in 'tsx-ts-mode' that I just pushed to master
please try in the following example:

ReactDOM.render(
<div>
<h1>Hello, Welcome to React and TypeScript</h1>
</div>,
  document.getElementById("root")
);

1. move point to the beginning of <h1>
2. type C-M-b
3. point incorrectly moves to inside <div>

However, this the above patch, point doesn't move
that is correct.

Another test case:

1. move point to the beginning of the word "Welcome"
2. type C-M-b
3. point incorrectly moves to the letter "e" instead of correct "H"

4. type C-M-f a few times until the end of text
5. point stops at the letter "t" instead of moving after the last letter

All these cases work correctly with the patch above.