summaryrefslogtreecommitdiff
path: root/lisp/imenu.el
diff options
context:
space:
mode:
authorDrew Adams <drew.adams@oracle.com>2018-07-07 19:20:45 +0300
committerEli Zaretskii <eliz@gnu.org>2018-07-07 19:20:45 +0300
commit77166e0da2d58f2f6436989b7059d913be5b3439 (patch)
treeaf6c1569af4eb4b07039bb7922af07a675b12e17 /lisp/imenu.el
parentea2f96837d00f5475cd48fc7bf62c19d1045c055 (diff)
downloademacs-77166e0da2d58f2f6436989b7059d913be5b3439.tar.gz
emacs-77166e0da2d58f2f6436989b7059d913be5b3439.tar.bz2
emacs-77166e0da2d58f2f6436989b7059d913be5b3439.zip
Fix 2 minor bugs in 'imenu--generic-function'
* 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)
Diffstat (limited to 'lisp/imenu.el')
-rw-r--r--lisp/imenu.el12
1 files changed, 10 insertions, 2 deletions
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 94ee6bc83a7..7d4363993de 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -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)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;