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
'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
(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))))