emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/taxy 009074563f 2/2: Deffy: Fix: Disambiguate forms wit


From: ELPA Syncer
Subject: [elpa] externals/taxy 009074563f 2/2: Deffy: Fix: Disambiguate forms with same name
Date: Fri, 13 May 2022 19:57:58 -0400 (EDT)

branch: externals/taxy
commit 009074563fc443c5bb6337d642001c6328a9c379
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Deffy: Fix: Disambiguate forms with same name
---
 README.org        |  4 +++-
 examples/deffy.el | 20 ++++++++++++++++++--
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/README.org b/README.org
index 21d1919692..4160a0844e 100644
--- a/README.org
+++ b/README.org
@@ -935,7 +935,9 @@ In Emacs 28+, see also =M-x shortdoc-display-group RET taxy 
RET=.
 
 ** 0.10-pre
 
-Nothing new yet.
+*Examples*
++ Deffy
+  + Fix: Disambiguate forms with the same name.
 
 ** 0.9
 
diff --git a/examples/deffy.el b/examples/deffy.el
index 03524301d4..3126bd0336 100644
--- a/examples/deffy.el
+++ b/examples/deffy.el
@@ -304,7 +304,10 @@ prefix, from all `deffy-mode' buffers."
   "Read form selected from Deffy BUFFERS with completion."
   (unless deffy-buffers
     (user-error "No Deffy buffers to find in"))
-  (cl-labels ((def-cons
+  (cl-labels ((disambiguate (string)
+                            (format "%s (%s)"
+                                    string (deffy-def-type (get-text-property 
0 :def string))))
+              (def-cons
                (def) (cons (propertize
                             (format "%s" (deffy-def-name def))
                             :annotation (funcall annotate-fn def)
@@ -345,7 +348,20 @@ prefix, from all `deffy-mode' buffers."
                affixation-fn #'affix)))
     (let* ((taxys (mapcar #'buffer-taxy deffy-buffers))
           (items (mapcan #'taxy-flatten taxys))
-          (alist (setf items (mapcar #'def-cons items)))
+          (alist (mapcar #'def-cons items))
+           ;; Unfortunately, `completing-read' always discards text 
properties, which
+           ;; means that they can't be used to disambiguate items with the 
same name
+           ;; (e.g. `(defthis foo)' in one form and `(defthat foo)' in 
another).  So we
+           ;; have to check for items with duplicate names, then replace the 
string with
+           ;; one that disambiguates them.
+           (duplicates (cl-loop for item in alist
+                                when (> (cl-count (car item) alist :key #'car 
:test #'equal) 1)
+                                collect item))
+           (_ (when duplicates
+                (dolist (dupe duplicates)
+                  (setf alist (remove dupe alist)
+                        dupe (cons (disambiguate (car dupe)) (cdr dupe)))
+                  (push dupe alist))))
           (metadata (list 'metadata (cons 'group-function #'group)))
           (dynamic-fn (lambda (str pred flag)
                         (pcase flag



reply via email to

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