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: Mon, 27 Mar 2023 20:28:32 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0

On 27/03/2023 19:29, Juri Linkov wrote:
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.

This will break other cases, e.g.

   b = %Q{This is a "string"}
   c = %w!foo
    bar
    baz!
   d = %(hello (nested) world)

when point is after "b", 'C-M-f' will move to "c" instead of the end of line.

That is because the string literals aren't recognized as sexps yet. Try this:

diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
index d1034d467ab..c46247c747a 100644
--- a/lisp/progmodes/ruby-ts-mode.el
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -1129,8 +1129,11 @@ ruby-ts-mode
                             "block"
                             "do_block"
                             "begin"
-                            "binary"
-                            "assignment")))
+                            "integer"
+                            "simple_symbol"
+                            "string"
+                            "string_array"
+                            )))

   ;; AFAIK, Ruby can not nest methods
   (setq-local treesit-defun-prefer-top-level nil)






reply via email to

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