* lisp/progmodes/python.el (python-imenu--build-tree): Fix corner case
authorFabián Ezequiel Gallina <fgallina@gnu.org>
Sat, 13 Jul 2013 01:55:58 +0000 (22:55 -0300)
committerFabián Ezequiel Gallina <fgallina@gnu.org>
Sat, 13 Jul 2013 01:55:58 +0000 (22:55 -0300)
in nested defuns.

* test/automated/python-tests.el (python-imenu-create-index-2)
(python-imenu-create-index-3): New tests.

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

index a6a0850..1213e50 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-13  Fabián Ezequiel Gallina  <fgallina@gnu.org>
+
+       * progmodes/python.el (python-imenu--build-tree): Fix corner case
+       in nested defuns.
+
 2013-07-13  Leo Liu  <sdl.web@gmail.com>
 
        * ido.el (ido-exhibit): Handle ido-enter-matching-directory before
index 915b52c..62870f9 100644 (file)
@@ -3091,7 +3091,12 @@ you are doing."
            ;; Stop collecting nodes after moving to a position with
            ;; indentation equaling min-indent. This is specially
            ;; useful for navigating nested definitions recursively.
-           tree)
+           (if (> num-children 0)
+               tree
+             ;; When there are no children, the collected tree is a
+             ;; single node intended to be added in the list of defuns
+             ;; of its parent.
+             (car tree)))
           (t
            (python-imenu--build-tree
             min-indent
@@ -3131,7 +3136,7 @@ you are doing."
                    (cons
                     (prog1
                         (python-imenu--build-tree
-                         prev-indent indent 1 (list (cons label pos)))
+                         prev-indent indent 0 (list (cons label pos)))
                       ;; Adjustment: after scanning backwards
                       ;; for all deeper children, we need to
                       ;; continue our scan for a parent from
index d3d8db6..d69155a 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-13  Fabián Ezequiel Gallina  <fgallina@gnu.org>
+
+       * automated/python-tests.el (python-imenu-create-index-2)
+       (python-imenu-create-index-3): New tests.
+
 2013-07-11  Glenn Morris  <rgm@gnu.org>
 
        * automated/ert-tests.el: Require cl-lib at runtime too.
index 1dffe95..fdae235 100644 (file)
@@ -1745,6 +1745,53 @@ class Baz(object):
                (cons "c (def)" (copy-marker 626)))))
             (python-imenu-create-index)))))
 
+(ert-deftest python-imenu-create-index-2 ()
+  (python-tests-with-temp-buffer
+   "
+class Foo(object):
+    def foo(self):
+        def foo1():
+            pass
+
+    def foobar(self):
+        pass
+"
+   (goto-char (point-max))
+   (should (equal
+            (list
+             (list
+              "Foo (class)"
+              (cons "*class definition*" (copy-marker 2))
+              (list
+               "foo (def)"
+               (cons "*function definition*" (copy-marker 21))
+               (cons "foo1 (def)" (copy-marker 40)))
+              (cons "foobar (def)"  (copy-marker 78))))
+            (python-imenu-create-index)))))
+
+(ert-deftest python-imenu-create-index-3 ()
+  (python-tests-with-temp-buffer
+   "
+class Foo(object):
+    def foo(self):
+        def foo1():
+            pass
+        def foo2():
+            pass
+"
+   (goto-char (point-max))
+   (should (equal
+            (list
+             (list
+              "Foo (class)"
+              (cons "*class definition*" (copy-marker 2))
+              (list
+               "foo (def)"
+               (cons "*function definition*" (copy-marker 21))
+               (cons "foo1 (def)" (copy-marker 40))
+               (cons "foo2 (def)" (copy-marker 77)))))
+            (python-imenu-create-index)))))
+
 (ert-deftest python-imenu-create-flat-index-1 ()
   (python-tests-with-temp-buffer
    "