bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#62416: 30.0.50; Symbols skipped in the navigation in ruby-ts-mode


From: Dmitry Gutov
Subject: bug#62416: 30.0.50; Symbols skipped in the navigation in ruby-ts-mode
Date: Sun, 26 Mar 2023 05:14:35 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0

On 25/03/2023 21:04, Juri Linkov wrote:
Navigating word forward/backward skips the Ruby symbol in the ruby-ts-mode.
Adding "simple_symbol" to the treesit-sexp-type-regexp is fixing it.
    (setq-local treesit-sexp-type-regexp
                (regexp-opt '("class"
                              "module"
                              "method"
                              "argument_list"
                              "array"
                              "hash"
                              "parenthesized_statements"
                              "if"
                              "case"
                              "when"
                              "block"
                              "do_block"
                              "begin"
                              "binary"
                              "simple_symbol" ;; <-- missing
                              "assignment")))

Juri, what do you think?

In the context of your previous feedback regarding sexp navigation in
ruby-ts-mode.

This is fine.

Good. Let's push it into master.

But anyway I think in its current state
treesit-sexp-type-regexp is underdesigned as noted in
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=62238#59
so no tweaking could fix its design flaws.  For example,

   foo = {
     a: b
   }

when point is on the left curly bracket, 'C-M-f C-M-b' doesn't
move back to the original position, etc.

Hm, yeah, it's a little unexpected that not only it doesn't move back exactly, it skips the full assignment expression in both directions.

What is the downside of dropping "binary" and "assignment" from treesit-sexp-type-regexp, added there not too long ago? Without "assignment" there, your example becomes a round-trip.

BTW, we should wrap the regexp with \`...\'. It currently does substring matching, that's why it also matches "identifier" (which should probably be added too).





reply via email to

[Prev in Thread] Current Thread [Next in Thread]