]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix extracting async def type and name in python mode imenu
authorDmitry Lazurkin <dilaz03@gmail.com>
Wed, 4 Jan 2017 18:46:21 +0000 (21:46 +0300)
committerNoam Postavsky <npostavs@gmail.com>
Fri, 13 Jan 2017 01:40:19 +0000 (20:40 -0500)
* lisp/progmodes/python.el (python-imenu--get-defun-type-name):
New function.
(python-imenu--build-tree): Use python-imenu--get-defun-type-name for
extract async or simple def type and name at current
position (Bug#24820).
* test/lisp/progmodes/python-tests.el (python-imenu-create-index-1):
(python-imenu-create-flat-index-1): Add async def's.

lisp/progmodes/python.el
test/lisp/progmodes/python-tests.el

index 68e19ef5b3b74de8b115cb3d4767aff4f5edd1ba..d8262dd0a750948e91134a196c315deef0cde7d9 100644 (file)
@@ -4415,6 +4415,15 @@ It must be a function with two arguments: TYPE and NAME.")
       "*class definition*"
     "*function definition*"))
 
+(defun python-imenu--get-defun-type-name ()
+  "Return defun type and name at current position."
+  (when (looking-at python-nav-beginning-of-defun-regexp)
+    (let ((split (split-string (match-string-no-properties 0))))
+      (if (= (length split) 2)
+          split
+        (list (concat (car split) " " (cadr split))
+              (car (last split)))))))
+
 (defun python-imenu--put-parent (type name pos tree)
   "Add the parent with TYPE, NAME and POS to TREE."
   (let ((label
@@ -4432,11 +4441,9 @@ not be passed explicitly unless you know what you are doing."
   (setq min-indent (or min-indent 0)
         prev-indent (or prev-indent python-indent-offset))
   (let* ((pos (python-nav-backward-defun))
-         (type)
-         (name (when (and pos (looking-at python-nav-beginning-of-defun-regexp))
-                 (let ((split (split-string (match-string-no-properties 0))))
-                   (setq type (car split))
-                   (cadr split))))
+         (defun-type-name (and pos (python-imenu--get-defun-type-name)))
+         (type (car defun-type-name))
+         (name (cadr defun-type-name))
          (label (when name
                   (funcall python-imenu-format-item-label-function type name)))
          (indent (current-indentation))
index 94c356b589ed0869a82be186bc426cc4506f803f..2df1bbf50d812bcbd59cb24f6ee974da7880025c 100644 (file)
@@ -3559,6 +3559,9 @@ class Baz(object):
 
         def c(self):
             pass
+
+        async def d(self):
+            pass
 "
    (goto-char (point-max))
    (should (equal
@@ -3580,7 +3583,8 @@ class Baz(object):
               (list
                "Frob (class)"
                (cons "*class definition*" (copy-marker 601))
-               (cons "c (def)" (copy-marker 626)))))
+               (cons "c (def)" (copy-marker 626))
+               (cons "d (async def)" (copy-marker 665)))))
             (python-imenu-create-index)))))
 
 (ert-deftest python-imenu-create-index-2 ()
@@ -3702,6 +3706,9 @@ class Baz(object):
 
         def c(self):
             pass
+
+        async def d(self):
+            pass
 "
    (goto-char (point-max))
    (should (equal
@@ -3714,7 +3721,8 @@ class Baz(object):
                   (cons "Baz.a" (copy-marker 539))
                   (cons "Baz.b" (copy-marker 570))
                   (cons "Baz.Frob" (copy-marker 601))
-                  (cons "Baz.Frob.c" (copy-marker 626)))
+                  (cons "Baz.Frob.c" (copy-marker 626))
+                  (cons "Baz.Frob.d" (copy-marker 665)))
             (python-imenu-create-flat-index)))))
 
 (ert-deftest python-imenu-create-flat-index-2 ()