]> git.eshelyaron.com Git - emacs.git/commitdiff
Eglot: fix navigation in eglot-hierarchy-mode (bug#78250)
authorJoão Távora <joaotavora@gmail.com>
Thu, 8 May 2025 20:06:41 +0000 (21:06 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sat, 10 May 2025 08:55:34 +0000 (10:55 +0200)
* lisp/progmodes/eglot.el (eglot--hierarchy-label):  Take PARENT-URI. Rework.
(eglot--hierarchy-2): Rework.

(cherry picked from commit 7617c7a6e417d25807537c58bbe9c05376bbcece)

lisp/progmodes/eglot.el

index 6f4a6e591f646805921d4e382a7b02108159022e..ae7d63dc9d927253978ec8c41d00d34554e216dd 100644 (file)
@@ -4650,7 +4650,7 @@ If NOERROR, return predicate, else erroring function."
     map)
   "Keymap active in labels Eglot hierarchy buffers.")
 
-(defun eglot--hierarchy-label (node)
+(defun eglot--hierarchy-label (node parent-uri)
   (eglot--dbind ((HierarchyItem) name uri _detail ((:range item-range))) node
     (with-temp-buffer
       (insert (propertize
@@ -4666,7 +4666,7 @@ If NOERROR, return predicate, else erroring function."
        'keymap eglot-hierarchy-label-map
        'action
        (lambda (_btn)
-         (pop-to-buffer (find-file-noselect (eglot-uri-to-path uri)))
+         (pop-to-buffer (find-file-noselect (eglot-uri-to-path (or parent-uri uri))))
          (eglot--goto
           (or
            (elt
@@ -4706,20 +4706,21 @@ If NOERROR, return predicate, else erroring function."
   (cl-labels ((expander-for (node)
                 (lambda (_widget)
                   (mapcar
-                   #'convert
+                   (lambda (child)
+                     (convert child (plist-get node :uri)))
                    (eglot--hierarchy-children node))))
-              (convert (node)
+              (convert (node parent-uri)
                 (let ((w (widget-convert
                           'tree-widget
-                          :tag (eglot--hierarchy-label node)
+                          :tag (eglot--hierarchy-label node parent-uri)
                           :expander (expander-for node))))
                   (widget-put w :empty-icon
                               (widget-get w :leaf-icon))
                   w)))
     (let ((inhibit-read-only t))
       (erase-buffer)
-      (mapc (lambda (r)
-              (let ((w (widget-create (convert r))))
+      (mapc (lambda (root)
+              (let ((w (widget-create (convert root nil))))
                 (widget-apply-action w)))
             eglot--hierarchy-roots)
       (goto-char (point-min))))