From: João Távora Date: Thu, 8 May 2025 20:06:41 +0000 (+0100) Subject: Eglot: fix navigation in eglot-hierarchy-mode (bug#78250) X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=38a9c2655fd4530b8d3cc0f1bc8e5b46f5da04fe;p=emacs.git Eglot: fix navigation in eglot-hierarchy-mode (bug#78250) * lisp/progmodes/eglot.el (eglot--hierarchy-label): Take PARENT-URI. Rework. (eglot--hierarchy-2): Rework. (cherry picked from commit 7617c7a6e417d25807537c58bbe9c05376bbcece) --- diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 6f4a6e591f6..ae7d63dc9d9 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -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))))