Flymake: fix eol overlay flicker due to untimely overlay deletion

This commit helps in ensuring that `flymake--eol-overlay-update' is
only called once per cycle.

* lisp/progmodes/flymake.el (flymake--delete-overlay): Don't
delete eol overlay here.
(flymake--eol-overlay-summary): Rework again.
(flymake--eol-overlay-update): Delete eol overlay here.
(flymake-start): Make sure to set all backends reported-p to nil.
This commit is contained in:
João Távora
2023-09-21 01:13:50 +01:00
parent f35818f2e7
commit ef8458558d

View File

@@ -699,14 +699,13 @@ associated `flymake-category' return DEFAULT."
(let ((eolov (overlay-get ov 'eol-ov)))
(when eolov
(let ((src-ovs (delq ov (overlay-get eolov 'flymake-eol-source-overlays))))
(if src-ovs (overlay-put eolov 'flymake-eol-source-overlays src-ovs)
(delete-overlay eolov))))
(overlay-put eolov 'flymake-eol-source-overlays src-ovs)))
(delete-overlay ov)))
(defun flymake--eol-overlay-summary (eolov)
"Helper function for `flymake--highlight-line'."
(defun flymake--eol-overlay-summary (src-ovs)
"Helper function for `flymake--eol-overlay-update'."
(cl-loop
for s in (overlay-get eolov 'flymake-eol-source-overlays)
for s in src-ovs
for d = (overlay-get s 'flymake-diagnostic)
for type = (flymake--diag-type d)
for eol-face = (flymake--lookup-type-property type 'eol-face)
@@ -722,8 +721,10 @@ associated `flymake-category' return DEFAULT."
(save-excursion
(widen)
(cl-loop for o in (overlays-in (point-min) (point-max))
when (overlay-get o 'flymake--eol-overlay)
do (overlay-put o 'before-string (flymake--eol-overlay-summary o)))))
for src-ovs = (overlay-get o 'flymake-eol-source-overlays)
if src-ovs
do (overlay-put o 'before-string (flymake--eol-overlay-summary src-ovs))
else do (delete-overlay o))))
(cl-defun flymake--highlight-line (diagnostic &optional foreign)
"Attempt to overlay DIAGNOSTIC in current buffer.
@@ -1187,6 +1188,11 @@ Interactively, with a prefix arg, FORCE is t."
(cl-reduce
#'max (mapcar #'cadr flymake--recent-changes))))))
(setq flymake--recent-changes nil)
(run-hook-wrapped
'flymake-diagnostic-functions
(lambda (backend)
(flymake--with-backend-state backend state
(setf (flymake--state-reported-p state) nil))))
(run-hook-wrapped
'flymake-diagnostic-functions
(lambda (backend)