From c69c18b732c2b1cd772dc7e15c0ea3074a3492bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Sun, 11 May 2025 11:09:06 +0100 Subject: [PATCH] Eglot: fix call hierarchy navigation again (bug#78367, bug#78250) * lisp/progmodes/eglot.el (eglot--hierarchy-label): Fix again. --- lisp/progmodes/eglot.el | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 04d3f74a6cb..eae8e1b9189 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -4617,13 +4617,22 @@ 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 (or parent-uri uri)))) - (eglot--goto - (or - (elt - (get-text-property 0 'eglot--hierarchy-call-sites name) - 0) - item-range)))) + (let* ((method + (get-text-property 0 'eglot--hierarchy-method name)) + (target-uri + (if (eq method :callHierarchy/outgoingCalls) + ;; We probably want `parent-uri' for this edge case + ;; because that's where the call site we want + ;; lives. (bug#78250, bug#78367). + (or parent-uri uri) + uri))) + (pop-to-buffer (find-file-noselect (eglot-uri-to-path target-uri))) + (eglot--goto + (or + (elt + (get-text-property 0 'eglot--hierarchy-call-sites name) + 0) + item-range))))) (buffer-string)))) (defun eglot--hierarchy-1 (name provider preparer specs)