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

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 13 Dec 2024 05:49:02 +0000

Your bug report

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

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
73978: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=73978
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#73978: 31.0.50; Text syntax applied on too many things in tsx-ts-mode
From: Yuan Fu <[email-masked]>
To: Dmitry Gutov <[email-masked]>
Cc: Eli Zaretskii <[email-masked]>, Theodor Thornhill <[email-masked]>, [email-masked]
Date: Thu, 12 Dec 2024 21:47:41 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

> On Dec 12, 2024, at 9:19 AM, Dmitry Gutov <[email-masked]> wrote:
> 
> On 12/12/2024 06:56, Yuan Fu wrote:
>> How hard is it to add a new syntax for this case? Or is there some way to work around this? We can’t just not apply the string syntax, because if the “a” is a parenthesis, etc, it would mess up the parenthesis balancing after it.
> 
> Probably not very hard, but that seems like it'd affect the total set of syntax classes - which means adding it to the manual, etc.
> 
>> Maybe just give it a whitespace syntax?
> 
> Right, in such cases I applied the "whitespace" or "punctuation" syntax to the whole character span, like in https://github.com/dgutov/mmm-mode/blob/master/mmm-erb.el#L97

Thanks. I went with the whitespace trick and pushed my patch to master.

Yuan

Subject: 31.0.50; Text syntax applied on too many things in tsx-ts-mode
From: Yuan Fu <[email-masked]>
To: Bug Report Emacs <[email-masked]>
Date: Wed, 23 Oct 2024 21:06:40 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

X-Debbugs-CC: [email-masked]

In tsx-ts-mode we use this query to apply syntax properties:

(defvar tsx-ts--s-p-query
  (when (treesit-available-p)
    (treesit-query-compile 'tsx
                           '(((regex pattern: (regex_pattern) @regexp))
                             ((variable_declarator value: (jsx_element) @jsx))
                             ((assignment_expression right: (jsx_element) @jsx))
                             ((arguments (jsx_element) @jsx))
                             ((parenthesized_expression (jsx_element) @jsx))
                             ((return_statement (jsx_element) @jsx))))))

And then in tsx-ts--syntax-propertize-captures we mark everything
enclosed by the captured jsx_element nodes in text fences.

Then for the following code

<button onClick={() => {
  func();
  return true;
}}>
  Text
  {func();}
</button>

All the func() and other code will be considered text because the whole
jsx tag (<button>...</button>) are wrapped in string fences. Theo,
what’s the original intention for marking jsx_elements as text? Can we
only mark jsx_text as string?

Yuan