diff options
author | Drew Adams <drew.adams@oracle.com> | 2018-07-07 19:20:45 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2018-07-07 19:20:45 +0300 |
commit | 77166e0da2d58f2f6436989b7059d913be5b3439 (patch) | |
tree | af6c1569af4eb4b07039bb7922af07a675b12e17 /lisp/imenu.el | |
parent | ea2f96837d00f5475cd48fc7bf62c19d1045c055 (diff) | |
download | emacs-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.el | 12 |
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))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; |