emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/flymake-refactor 7140018 18/18: Protect flymake-ui


From: João Távora
Subject: [Emacs-diffs] scratch/flymake-refactor 7140018 18/18: Protect flymake-ui against commands like fill-paragraph
Date: Thu, 21 Sep 2017 20:35:27 -0400 (EDT)

branch: scratch/flymake-refactor
commit 71400181cdacd6f996284cbd5b9a41b98cf9b838
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Protect flymake-ui against commands like fill-paragraph
    
    If flymake-start-syntax-check-on-newline is t, check should start as
    soon as a newline is seen by after-change-functions.  But don't rush
    it because since the buffer state might not be final and we end up
    with invalid diagnostic regions after some commands, like
    fill-paragraph, which might insert and deletes newlines.
    
    * lisp/progmodes/flymake-ui.el
    (flymake-after-change-function): Pass `deferred' to
    flymake--start-syntax-check.
    (flymake--start-syntax-check): Take optional `deferred' arg.
---
 lisp/progmodes/flymake-ui.el | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/lisp/progmodes/flymake-ui.el b/lisp/progmodes/flymake-ui.el
index 4cdad95..25d8493 100644
--- a/lisp/progmodes/flymake-ui.el
+++ b/lisp/progmodes/flymake-ui.el
@@ -462,9 +462,16 @@ with flymake-specific meaning can also be used.
       (when (with-current-buffer buffer (funcall (car candidate)))
       (throw 'done (cdr candidate))))))
 
-(defun flymake--start-syntax-check ()
-  (setq flymake-check-start-time (float-time))
-  (funcall flymake--backend))
+(defun flymake--start-syntax-check (&optional deferred)
+  (cl-labels ((start
+               ()
+               (remove-hook 'post-command-hook #'start 'local)
+               (setq flymake-check-start-time (float-time))
+               (funcall flymake--backend)))
+    (if (and deferred
+             this-command)
+        (add-hook 'post-command-hook #'start 'append 'local)
+      (start))))
 
 ;;;###autoload
 (define-minor-mode flymake-mode nil
@@ -534,7 +541,7 @@ with flymake-specific meaning can also be used.
   (let((new-text (buffer-substring start stop)))
     (when (and flymake-start-syntax-check-on-newline (equal new-text "\n"))
       (flymake-log 3 "starting syntax check as new-line has been seen")
-      (flymake--start-syntax-check))
+      (flymake--start-syntax-check 'deferred))
     (setq flymake-last-change-time (float-time))))
 
 (defun flymake-after-save-hook ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]