jump to wrong line in ruby
leateng opened this issue · 14 comments
class A
def abc
a = []
# a.each do |x| # line 5
a.each do |x|
end
end # line 8, cursor here
end
when curosr on line 8, press %, jump to line 5
can't reproduce. make sure your are in ruby-mode
or enh-ruby-mode
.
Or else, add below line into your "~/.emacs",
(evilmi-load-plugin-rules '(ruby-mode enh-ruby-mode your-rub-mode) '(simple ruby))
Thank you for your reply.
I found the problem. When I enable tree-sitter-hl-mode, evil-matchit does not work properly in some cases.
Is this a bug of Emacs tree-sitter or evil-machit ?
Or my configuration?
I use doom Emacs
just add a few lines config
;; enable tree sitter highlight
(global-tree-sitter-mode)
(add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode)
;; enable evil-matchit
(global-evil-matchit-mode 1)
Only simple regex is used in ruby related code. Code should not be impacted by other plugins.
What's the major-mode
in ruby file? Does M-x evilmi-jump-items
work? Press C-h k %
, what's output?
I can't reproduce the issue. What's M-x evilmi-version
, maybe you can try 2.4.4
?
I have the similar problem with you. I couldn't jump appropriately in OCaml. And our configuration is exactly the same.
(global-tree-sitter-mode)
(add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode)
(global-evil-matchit-mode 1)
@JohnsonLee-debug , could you give me more details? A sample ocaml file could help a lot
My environment:
> Executing 'doom info' with Emacs 28.1 at 2022-06-02 13:00:02
generated Jun 02, 2022 13:00:02
system Ubuntu 20.04.4 LTS Linux 5.10.102.1-microsoft-standard-WSL2 x86_64
emacs 28.1 ~/.emacs.d/ -> ~/.emacs.d/
doom 3.0.0-dev grafted, HEAD -> master, origin/master, origin/HEAD 1b8f46c 2022-05-27 03:13:00 +0200 ~/.config/doom/ -> ~/.config/doom/
shell /usr/bin/zsh
features ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM GTK3 ZLIB
traits batch server-running envvar-file custom-file
modules :completion (company +childfram +tng) (vertico +icons) :ui doom doom-dashboard hl-todo ligatures modeline ophints (popup +defaults) unicode vc-gutter vi-tilde-fringe workspaces :editor (evil +everywhere) file-templates fold snippets :emacs dired electric undo vc :term vterm :checkers syntax (spell +flyspell) grammar :tools (eval +overlay) lookup lsp magit :os tty :lang coq emacs-lisp (go +lsp) (haskell +lsp) json latex lean markdown (ocaml +lsp) org plantuml python sh web yaml :config (default +bindings +smartparens)
packages (tree-sitter) (tree-sitter-langs) (evil-matchit)
evilmi-version: 3.0.0
major-mode: tuareg-mode
Example OCaml file:
Behavior is described in the comment.
open Ordered
module type Heap = sig
module Elt : Comparable
type elt = Elt.t
type t
exception Empty
val empty : t
val is_empty : t -> bool
val insert : elt -> t -> t
val merge : t -> t -> t
val find_min : t -> elt
val delete_min : t -> t
end(* press '%' doesn't trigger any action *)
(* press '%' here, cursor is expected to jump to ')', but it jump to the end of 'module' *)
(*> LeftistHeaps <*)
module LeftistHeaps (Elt : Comparable) = struct
module Elt = ExtendCompare (Elt)
type elt = Elt.t
type t =
| E
| T of int * elt * t * t
exception Empty
let rank = function
| E -> 0
| T (r, _, _, _) -> r
;;
let rec merge a b =
let makeT x a b =
if rank a >= rank b then T (rank b + 1, x, a, b) else T (rank a + 1, x, b, a)
in
match a, b with
| h, E -> h
| E, h -> h
| (T (_, x, l1, r1) as h1), (T (_, y, l2, r2) as h2) ->
if Elt.leq x y then makeT x l1 (merge r1 h2) else makeT y l2 (merge r2 h1)
;;
let is_empty = function
| E -> true
| T _ -> false
;;
let empty = E
let insert x h = merge (T (1, x, E, E)) h
let find_min = function
| E -> raise Empty
| T (_, x, _, _) -> x
;;
let delete_min = function
| E -> raise Empty
| T (_, _, a, b) -> merge a b
;;
end
Can't reproduce the issue. I've tried to toggle global-tree-sitter-mode
or global-evil-matchit-mode
several times.
ocaml algorithm was not written by me. But looks code is straight forward,
evilmi-ocaml-goto-word-beginning
to get the beginning of the first keyword after the cursor, then jump.
Maybe it is caused by something in doom emacs. I use doom like @leateng did.
Please note I use tree-sitter-0.18.0
stable version. Emacs API scan-sexps
is used to jump between {}
, []
, ()
.
If the api fails, it might be the bug of unstable tree-sitter or major mode.
Try the new hook evilmi-jump-hook
,
2715515 add evilmi-jump-hook (Chen Bin)
+1 – I'm having the same issue as @leateng & @JohnsonLee-debug. Similarly, I am using Doom Emacs.
@redguardtoo I've tried the new evilmi-jump-hook
as suggested but it did not resolve the issue.
Could you give me more details and some minimum example? evilmi version? Have you tested evil-matchit in vanllia emacs? Which package causes the issue? doom emacs version? I will download doomemacs and test.