emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 4e77ff0: Fix imenu--sort-by-position for non-pairs


From: Nicolas Petton
Subject: [Emacs-diffs] master 4e77ff0: Fix imenu--sort-by-position for non-pairs parameters (bug#26457)
Date: Thu, 13 Apr 2017 05:44:35 -0400 (EDT)

branch: master
commit 4e77ff0d45b88cade7836c01344cd8d892adfde8
Author: Damien Cassou <address@hidden>
Commit: Nicolas Petton <address@hidden>

    Fix imenu--sort-by-position for non-pairs parameters (bug#26457)
    
    * lisp/imenu.el (imenu--sort-by-position): Fix to accept lists beyond
      pairs.
    * test/lisp/imenu-tests.el: Add 2 tests for `imenu--sort-by-position`.
---
 lisp/imenu.el            |  7 ++++++-
 test/lisp/imenu-tests.el | 10 ++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/lisp/imenu.el b/lisp/imenu.el
index 0f47a92..c1fd400 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -499,7 +499,12 @@ An item looks like (NAME . POSITION)."
   (string-lessp (car item1) (car item2)))
 
 (defun imenu--sort-by-position (item1 item2)
-  (< (cdr item1) (cdr item2)))
+  "Comparison function to sort items depending on their position.
+Return non-nil if and only if ITEM1's position is lower than ITEM2's
+position."
+  (if (listp (cdr item1))
+      (< (cadr item1) (cadr item2))
+    (< (cdr item1) (cdr item2))))
 
 (defun imenu--relative-position (&optional reverse)
   "Support function to calculate relative position in buffer.
diff --git a/test/lisp/imenu-tests.el b/test/lisp/imenu-tests.el
index 480368f..9309094 100644
--- a/test/lisp/imenu-tests.el
+++ b/test/lisp/imenu-tests.el
@@ -83,6 +83,16 @@ function ABC_D()
 }
 " '("a" "b" "c" "ABC_D"))
 
+(ert-deftest imenu--sort-by-position-pairs ()
+  (should (imenu--sort-by-position '("a" . 2) '("a" . 3)))
+  (should-not (imenu--sort-by-position '("a" . 3) '("a" . 2))))
+
+;; Regression test for bug#26457: 25.2; Cannot pass a function to
+;; imenu-generic-expression
+(ert-deftest imenu--sort-by-position-list ()
+  (should (imenu--sort-by-position '("a" 2 nil) '("a" 3 nil)))
+  (should-not (imenu--sort-by-position '("a" 3 nil) '("a" 2 nil))))
+
 (provide 'imenu-tests)
 
 ;;; imenu-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]