]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 2 minor bugs in 'imenu--generic-function'
authorDrew Adams <drew.adams@oracle.com>
Sat, 7 Jul 2018 16:20:45 +0000 (19:20 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 7 Jul 2018 16:20:45 +0000 (19:20 +0300)
* lisp/imenu.el (imenu--generic-function): Move point to START
before checking whether the current item is inside a comment
or a string.  Remove any empty menus that could have been
added before returning.  (Bug#32024)

lisp/imenu.el

index 94ee6bc83a7b7bb23eb4fad096449c4e56592602..7d4363993de41044142ce247b43e24cff764dfa0 100644 (file)
@@ -60,6 +60,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl-lib))
+(require 'cl-seq)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
@@ -819,7 +820,8 @@ depending on PATTERNS."
                  ;; Insert the item unless it is already present.
                  (unless (or (member item (cdr menu))
                               (and imenu-generic-skip-comments-and-strings
-                                   (nth 8 (syntax-ppss))))
+                                   (save-excursion
+                                     (goto-char start) (nth 8 (syntax-ppss)))))
                    (setcdr menu
                            (cons item (cdr menu)))))
                ;; Go to the start of the match, to make sure we
@@ -833,7 +835,13 @@ depending on PATTERNS."
        (setcdr item (sort (cdr item) 'imenu--sort-by-position))))
     (let ((main-element (assq nil index-alist)))
       (nconc (delq main-element (delq 'dummy index-alist))
-            (cdr main-element)))))
+             (cdr main-element)))
+    ;; Remove any empty menus.  That can happen because of skipping
+    ;; things inside comments or strings.
+    (when (consp (car index-alist))
+      (setq index-alist  (cl-delete-if-not
+                          (lambda (it) (cdr it))
+                          index-alist)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;