]> git.eshelyaron.com Git - emacs.git/commitdiff
Flymake variable flymake-diagnostic-functions now a special hook
authorJoão Távora <joaotavora@gmail.com>
Fri, 29 Sep 2017 11:18:30 +0000 (12:18 +0100)
committerJoão Távora <joaotavora@gmail.com>
Tue, 3 Oct 2017 13:18:55 +0000 (14:18 +0100)
* lisp/progmodes/flymake-proc.el: Use add-hook to affect
flymake-diagnostic-functions.

* lisp/progmodes/flymake-elisp.el
(flymake-elisp-setup-backends): Use add-hook.

* lisp/progmodes/flymake.el (flymake-diagnostic-functions):
Revise docstring.
(flymake-start): Use run-hook-wrapped.

lisp/progmodes/flymake-elisp.el
lisp/progmodes/flymake-proc.el
lisp/progmodes/flymake.el

index 6e7fe3142d305bbc075c5cccb3d2c1c1c4026dfd..7797d278e3f21ef6473af75194c43efe3c714352 100644 (file)
@@ -159,10 +159,8 @@ Runs in a batch-mode Emacs.  Interactively use variable
 
 (defun flymake-elisp-setup-backends ()
   "Setup flymake for elisp work."
-  (add-to-list (make-local-variable 'flymake-diagnostic-functions)
-               'flymake-elisp-checkdoc t)
-  (add-to-list (make-local-variable 'flymake-diagnostic-functions)
-               'flymake-elisp-byte-compile t))
+  (add-hook 'flymake-diagnostic-functions 'flymake-elisp-checkdoc t t)
+  (add-hook 'flymake-diagnostic-functions 'flymake-elisp-byte-compile t t))
 
 (add-hook 'emacs-lisp-mode-hook
           'flymake-elisp-setup-backends)
index 966f358551fab430ca3fafc33283c300331ef73d..3ab5523128f5661c910c404d532a8edfa708866c 100644 (file)
@@ -1114,8 +1114,7 @@ Use CREATE-TEMP-F for creating temp copy."
 
 \f
 ;;;; Hook onto flymake-ui
-(add-to-list 'flymake-diagnostic-functions
-             'flymake-proc-legacy-flymake)
+(add-hook 'flymake-diagnostic-functions 'flymake-proc-legacy-flymake)
 
 \f
 ;;;;
index 3387f47ed1ec35b14e49e5af7ccefdd9cd704b17..88a305aa5451775543d2f41a5112b515e132fbf2 100644 (file)
@@ -309,36 +309,36 @@ Return nil if the region is invalid."
     (error (flymake-error "Invalid region line=%s col=%s" line col))))
 
 (defvar flymake-diagnostic-functions nil
-  "List of flymake backends i.e. sources of flymake diagnostics.
+  "Special hook of Flymake backends to check a buffer.
 
-This variable holds an arbitrary number of \"backends\" or
-\"checkers\" providing the flymake user interface with
-information about where and how to annotate problems diagnosed in
-a buffer.
+The functions in this hook diagnose problems in a buffer’s
+contents and provide the Flymake user interface with information
+about where and how to annotate problems diagnosed in a buffer.
 
-Backends are lisp functions sharing a common calling
-convention. Whenever flymake decides it is time to re-check the
-buffer, each backend is called with a single argument, a
-REPORT-FN callback, detailed below.  Backend functions are first
+Whenever Flymake or the user decides to re-check the buffer, each
+function is called with a common calling convention, a single
+REPORT-FN argument, detailed below.  Backend functions are first
 expected to quickly and inexpensively announce the feasibility of
-checking the buffer (i.e. they aren't expected to immediately
-start checking the buffer):
+checking the buffer via the return value (i.e. they aren't
+required to immediately start checking the buffer):
 
-* If the backend function returns nil, flymake forgets about this
-  backend for the current check, but will call it again the next
-  time;
+* If the backend function returns nil, Flymake forgets about this
+  backend for the current check, but will call it again for the
+  next one;
 
-* If the backend function returns non-nil, flymake expects this
+* If the backend function returns non-nil, Flymake expects this
   backend to check the buffer and call its REPORT-FN callback
-  function exactly once. If the computation involved is
-  inexpensive, the backend function may do so synchronously
-  before returning. If it is not, it may do so after returning,
-  using idle timers, asynchronous processes or other asynchronous
-  mechanisms.
+  function exactly once.  If the computation involved is
+  inexpensive, the backend function may do so synchronously,
+  before returning.  If it is not, it should do so after
+  returning, using idle timers, asynchronous processes or other
+  asynchronous mechanisms.
 
 * If the backend function signals an error, it is disabled,
-  i.e. flymake will not attempt it again for this buffer until
-  `flymake-mode' is turned off and on again.
+  i.e. Flymake will not use it again for the current or any
+  future checks of this buffer.  Certain commands, like turning
+  `flymake-mode' on and off again, resets the list of disabled
+  backends.
 
 Backends are required to call REPORT-FN with a single argument
 ACTION followed by an optional list of keywords parameters and
@@ -347,7 +347,7 @@ their values (:KEY1 VALUE1 :KEY2 VALUE2...).
 The possible values for ACTION are.
 
 * A (possibly empty) list of objects created with
-  `flymake-make-diagnostic', causing flymake to annotate the
+  `flymake-make-diagnostic', causing Flymake to annotate the
   buffer with this information and consider the backend has
   having finished its check normally.
 
@@ -362,7 +362,7 @@ The recognized optional keyword arguments are:
 * ‘:explanation’: value should give user-readable details of
   the situation encountered, if any.
 
-* ‘:force’: value should be a boolean forcing the flymake UI
+* ‘:force’: value should be a boolean forcing the Flymake UI
   to consider the report even if was somehow unexpected.")
 
 (defvar flymake-diagnostic-types-alist
@@ -613,15 +613,18 @@ backends."
           (setq flymake--diagnostics-table (make-hash-table)
                 flymake--running-backends nil
                 flymake--disabled-backends nil))
-        (dolist (backend flymake-diagnostic-functions)
-          (cond ((memq backend flymake--running-backends)
-                 (flymake-log :debug "Backend %s still running, not restarting"
-                              backend))
-                ((memq backend flymake--disabled-backends)
-                 (flymake-log :debug "Backend %s is disabled, not starting"
-                              backend))
-                (t
-                 (flymake--run-backend backend))))))
+        (run-hook-wrapped
+         'flymake-diagnostic-functions
+         (lambda (backend)
+           (cond ((memq backend flymake--running-backends)
+                  (flymake-log :debug "Backend %s still running, not restarting"
+                               backend))
+                 ((memq backend flymake--disabled-backends)
+                  (flymake-log :debug "Backend %s is disabled, not starting"
+                               backend))
+                 (t
+                  (flymake--run-backend backend)))
+           nil))))
     (if (and deferred
              this-command)
         (add-hook 'post-command-hook #'start 'append 'local)