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

From: Yuan Fu <[email-masked]>
Date: Wed, 23 Oct 2024 21:06:40 -0700

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