From 3d930b928fe683d380809d53257017022f74aae9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Sat, 17 Jun 2023 15:25:30 +0100 Subject: [PATCH] Eglot: fix relative position of coinciding inlay hint overlays (bug#64101) Only seems to happen on certain platforms, like Mac OS. Reason unknown reason so far, but this defensive fix seems safe. * lisp/progmodes/eglot.el (eglot--update-hints-1): Explicitly put priority in inlay hint overalys. --- lisp/progmodes/eglot.el | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index df8f5f64829..352a6ffd6b0 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -3644,8 +3644,9 @@ If NOERROR, return predicate, else erroring function." (if peg-after-p (make-overlay (point) (1+ (point)) nil t) (make-overlay (1- (point)) (point) nil nil nil))) - (do-it (label lpad rpad firstp) - (let* ((tweak-cursor-p (and firstp peg-after-p)) + (do-it (label lpad rpad i) + (let* ((firstp (zerop i)) + (tweak-cursor-p (and firstp peg-after-p)) (ov (make-ov)) (text (concat lpad label rpad))) (when tweak-cursor-p (put-text-property 0 1 'cursor 1 text)) @@ -3656,17 +3657,18 @@ If NOERROR, return predicate, else erroring function." (1 'eglot-type-hint-face) (2 'eglot-parameter-hint-face) (_ 'eglot-inlay-hint-face)))) + (overlay-put ov 'priority i) (overlay-put ov 'eglot--inlay-hint t) (overlay-put ov 'evaporate t) (overlay-put ov 'eglot--overlay t)))) - (if (stringp label) (do-it label left-pad right-pad t) + (if (stringp label) (do-it label left-pad right-pad 0) (cl-loop for i from 0 for ldetail across label do (eglot--dbind ((InlayHintLabelPart) value) ldetail (do-it value (and (zerop i) left-pad) (and (= i (1- (length label))) right-pad) - (zerop i)))))))))) + i))))))))) (jsonrpc-async-request (eglot--current-server-or-lose) :textDocument/inlayHint -- 2.39.2