Thanks for the patch ! It fixes the bug. But unfortunatly, there is another similar bug in /treesit-forward-sexp/, that you can reproduce with that example: ({()}); /(treesit-forward-sexp)/ does not work as expected for both the opening parentheses and the brace. I have checked that it is not a regression due to the patch. That said,  the patch changes the results (that are not what we expect in any cases). Loïc Le 10/11/2023 à 02:41, Dmitry Gutov a écrit : > Hi! > > On 07/11/2023 16:56, Loïc Lemaître wrote: >> Hi Emacs team, >> >> Here the steps to demonstrate the bug : >> >> 1. Compile Emacs from master branch with tree-sitter support >> 2. Install javascript and tsx languages >> 3. Run Emacs >> 4. Create a new buffer >> 5. Turn major mode to either js-ts-mode or tsx-ts-mode >> 6. Past the following content into the buffer: >> ( >>   
>>   
>> ); >> 7. Place point before opening parenthese >> 8. M-x forward-sexp (which will call treesit-forward-sexp) >> >> => New position is right after the semi-colon instead of being before >> the semi-colon. >> >> Note that the bug disappear if the buffer content is changed for : >> const component = ( >>   
>>   
>> ); >> >> But previous content, while not being very usefull, is valid JSX, as >> far as I know. >> I use this syntax for unit test purpose, since it is very short. > > Thanks for the report. > > The patch below should fix it. > > Yuan, what do you think? A similar change (bos and eos anchors) might > be useful for other things and other modes. > > Alternatively, treesit-thing-settings could be interpreted to imply > full matches, then the code using it should not only match against the > regexps but also check that the entire string (type name) is matched. > > Also Cc'ing Theodor. > > diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el > index 5a669fdbd42..d81fa9ed322 100644 > --- a/lisp/progmodes/js.el > +++ b/lisp/progmodes/js.el > @@ -3843,6 +3843,7 @@ js--treesit-sexp-nodes >      "undefined" >      "arguments" >      "pair" > +    "parenthesized_expression" >      "jsx") >    "Nodes that designate sexps in JavaScript. >  See `treesit-thing-settings' for more information.") > @@ -3886,7 +3887,7 @@ js-ts-mode > >      (setq-local treesit-thing-settings >                  `((javascript > -                   (sexp ,(regexp-opt js--treesit-sexp-nodes)) > +                   (sexp ,(format "\\`%s\\'" (regexp-opt > js--treesit-sexp-nodes))) >                     (sentence ,(regexp-opt js--treesit-sentence-nodes)) >                     (text ,(regexp-opt '("comment" >                                          "template_string")))))) >