]> git.eshelyaron.com Git - emacs.git/commitdiff
ruby-mode imenu: Support methods with modifiers
authorDmitry Gutov <dgutov@yandex.ru>
Tue, 17 Aug 2021 01:07:19 +0000 (04:07 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Tue, 17 Aug 2021 01:07:19 +0000 (04:07 +0300)
* lisp/progmodes/ruby-mode.el (ruby-imenu-create-index-in-block):
Support methods with modifiers (visibility or otherwise)
(bug#50079).

lisp/progmodes/ruby-mode.el
test/lisp/progmodes/ruby-mode-tests.el

index 74b48ca4bde5ed5aad8a89b56b06eabaa52dcf37..c09f007a5ee885dceaacb1a8fc19d68b93bf48e5 100644 (file)
@@ -679,7 +679,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
   (let ((index-alist '()) (case-fold-search nil)
         name next pos decl sing)
     (goto-char beg)
-    (while (re-search-forward "^\\s *\\(\\(class\\s +\\|\\(class\\s *<<\\s *\\)\\|module\\s +\\)\\([^(<\n ]+\\)\\|\\(def\\|alias\\)\\s +\\([^(\n ]+\\)\\)" end t)
+    (while (re-search-forward "^\\s *\\(\\(class\\s +\\|\\(class\\s *<<\\s *\\)\\|module\\s +\\)\\([^(<\n ]+\\)\\|\\(\\(?:\\(?:private\\|protected\\|public\\) +\\)?def\\|alias\\)\\s +\\([^(\n ]+\\)\\)" end t)
       (setq sing (match-beginning 3))
       (setq decl (match-string 5))
       (setq next (match-end 0))
@@ -689,7 +689,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
        ((string= "alias" decl)
         (if prefix (setq name (concat prefix name)))
         (push (cons name pos) index-alist))
-       ((string= "def" decl)
+       ((not (null decl))
         (if prefix
             (setq name
                   (cond
index e2ea0d91370c666702ee329bc11d00f67bdba5da..8bdfdc310f31b37b17032800de5039cfc9d07230 100644 (file)
@@ -875,6 +875,28 @@ VALUES-PLIST is a list with alternating index and value elements."
       (ruby-mode-set-encoding)
       (should (string= "# coding: iso-8859-15\nⓇ" (buffer-string))))))
 
+(ert-deftest ruby-imenu-with-private-modifier ()
+  (ruby-with-temp-buffer
+      (ruby-test-string
+       "class Blub
+       |  def hi
+       |    'Hi!'
+       |  end
+       |
+       |  def bye
+       |    'Bye!'
+       |  end
+       |
+       |  private def hiding
+       |    'You can't see me'
+       |  end
+       |end")
+    (should (equal (mapcar #'car (ruby-imenu-create-index))
+                   '("Blub"
+                     "Blub#hi"
+                     "Blub#bye"
+                     "Blub#hiding")))))
+
 (ert-deftest ruby--indent/converted-from-manual-test ()
   :tags '(:expensive-test)
   ;; Converted from manual test.