(ruby-ts-add-log-current-function): Fix when between two methods

* lisp/progmodes/ruby-ts-mode.el
(ruby-ts-add-log-current-function): Fix the case when point is
between two methods.  'treesit-node-at' returs the 'def' node of
the method after point in such case, so it behaved like point was
inside the method below.

* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-add-log-current-method-outside-of-method):
Update the test case.

* test/lisp/progmodes/ruby-mode-tests.el
(ruby-add-log-current-method-outside-of-method):
Mirror that change.
This commit is contained in:
Dmitry Gutov 2023-01-04 00:37:43 +02:00
parent da69f116bf
commit 0d98fac6bb
3 changed files with 12 additions and 1 deletions

View file

@ -850,7 +850,12 @@ The hash (#) is for instance methods only which are methods
dot (.) is used. Double colon (::) is used between classes. The
leading double colon is not added."
(let* ((node (treesit-node-at (point)))
(method (treesit-parent-until node (ruby-ts--type-pred ruby-ts--method-regex)))
(method-pred
(lambda (node)
(and (<= (treesit-node-start node) (point))
(>= (treesit-node-end node) (point))
(string-match-p ruby-ts--method-regex (treesit-node-type node)))))
(method (treesit-parent-until node method-pred t))
(class (or method node))
(result nil)
(sep "#")

View file

@ -537,9 +537,12 @@ VALUES-PLIST is a list with alternating index and value elements."
| def foo
| end
| _
| def bar
| end
| end
|end")
(search-backward "_")
(delete-char 1)
(should (string= (ruby-add-log-current-method)"M::C"))))
(ert-deftest ruby-add-log-current-method-in-singleton-class ()

View file

@ -141,9 +141,12 @@ The whitespace before and including \"|\" on each line is removed."
| def foo
| end
| _
| def bar
| end
| end
|end")
(search-backward "_")
(delete-char 1)
(should (string= (ruby-ts-add-log-current-function) "M::C"))))
(ert-deftest ruby-ts-add-log-current-method-in-singleton-class ()