From: João Távora Date: Tue, 29 Apr 2025 11:34:10 +0000 (+0100) Subject: Flymake: promptly delete eol overlay if source overlay changed X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4b584f14e53513727e1762b28f62b21875a54cec;p=emacs.git Flymake: promptly delete eol overlay if source overlay changed In the vast majority of cases, changing the source overlay invalidates the content of the end-of-line overlay, so best to delete it asap. * lisp/progmodes/flymake.el (flymake--delete-overlay): Use 'flymake--eol-ov' (flymake--highlight-line): Use some overlay modification hooks. (cherry picked from commit 825ea052ad5638c056037c4cac92c9e666dc3820) --- diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 13c488b2cab..32a78918fae 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -792,7 +792,7 @@ Return to original margin width if ORIG-WIDTH is non-nil." (defun flymake--delete-overlay (ov) "Like `delete-overlay', delete OV, but do some more stuff." - (let ((eolov (overlay-get ov 'eol-ov))) + (let ((eolov (overlay-get ov 'flymake--eol-ov))) (when eolov (let ((src-ovs (delq ov (overlay-get eolov 'flymake-eol-source-overlays)))) (overlay-put eolov 'flymake-eol-source-overlays src-ovs))) @@ -1098,6 +1098,11 @@ Return nil or the overlay created." ;; (overlay-put ov 'evaporate t) (overlay-put ov 'flymake-overlay t) + (overlay-put ov 'modification-hooks + `(,(lambda (ov after &rest _) + (when-let* ((eolov + (and (null after) (overlay-get ov 'flymake--eol-ov)))) + (delete-overlay eolov))))) (overlay-put ov 'flymake-diagnostic diagnostic) ;; Handle `flymake-show-diagnostics-at-end-of-line' ;; @@ -1119,7 +1124,7 @@ Return nil or the overlay created." (overlay-put eolov 'flymake--eol-overlay t) (overlay-put eolov 'flymake-eol-source-overlays (list ov)) (overlay-put eolov 'evaporate (not (= start end)))) ; FIXME: fishy - (overlay-put ov 'eol-ov eolov)))) + (overlay-put ov 'flymake--eol-ov eolov)))) ov)) (defvar-local flymake--state nil