]> git.eshelyaron.com Git - emacs.git/commitdiff
Let eglot-flymake-backend be in flymake-d-functions even if eglot off
authorJoão Távora <joaotavora@gmail.com>
Tue, 10 Aug 2021 19:28:35 +0000 (20:28 +0100)
committerJoão Távora <joaotavora@gmail.com>
Tue, 17 Aug 2021 09:03:17 +0000 (10:03 +0100)
This is useful when using  eglot-stay-out-of and a pattern like:

   (defun my/js-mode-hook ()
     (add-hook 'flymake-diagnostic-functions 'some-eslint-backend nil t))
     (setq-local eglot-stay-out-of '(flymake))
     (add-hook 'flymake-diagnostic-functions 'eglot-flymake-backend nil t))

   (add-hook 'js-mode-hook 'my/js-mode-hook)

Then, _both_ backends will run unconditionally, but Eglot backend only
actually reports diagnostics if Eglot is on.

* eglot.el (eglot-flymake-backend): If buffer isn't being managed
by Eglot, behave as a noop.

lisp/progmodes/eglot.el

index 0f367fd220838132fe0ba4e34f0b8bb61a453971..71f7d7ea597ee70e9913cfff82d04e7c8209c9a0 100644 (file)
@@ -2089,10 +2089,13 @@ Calls REPORT-FN (or arranges for it to be called) when the server
 publishes diagnostics.  Between calls to this function, REPORT-FN
 may be called multiple times (respecting the protocol of
 `flymake-backend-functions')."
-  (setq eglot--current-flymake-report-fn report-fn)
-  ;; Report anything unreported
-  (when eglot--unreported-diagnostics
-    (eglot--report-to-flymake (cdr eglot--unreported-diagnostics))))
+  (cond (eglot--managed-mode
+         (setq eglot--current-flymake-report-fn report-fn)
+         ;; Report anything unreported
+         (when eglot--unreported-diagnostics
+           (eglot--report-to-flymake (cdr eglot--unreported-diagnostics))))
+        (t
+         (funcall report-fn nil))))
 
 (defun eglot--report-to-flymake (diags)
   "Internal helper for `eglot-flymake-backend'."