Subject: 31.0.50; Eglot couldn't refresh Flymake diagnostics on Rust project

From: Eason Huang <[email-masked]>
Date: Sun, 22 Jun 2025 15:05:06 +0800

Hello Emacs dev,

Recently, I found that if flymake-mode enabled before eglot,eglot can not
refresh the Flymake diagnostics.
Disable flymake with `M-x flymake-mode`, and then enable eglot
with `M-x eglot` can fix the issue. Or with the below snippet can fix
it:

```
(with-eval-after-load 'eglot
    (add-hook 'eglot-managed-mode-hook (lambda ()
                                         (flymake-mode -1)
                                         (flymake-mode 1))))

```

Steps to reproduce:

1. put below config into the init.el file
```
(use-package flymake
  :hook (prog-mode . flymake-mode))

(use-package rust-mode
  :ensure t
  :defer t
  :custom (rust-mode-treesitter-derive (and (fboundp 'treesit-available-p)
                                            (treesit-available-p))))
```
2. Start Emacs 31
3. Open any Rust project with a dependency
4. Open any Rust file in a rust project(make sure it use a dependency),
such as main.rs, then flymake will report errors. Because I don't have
flymake rust backends,the errors is expected.
  
5. Make sure `rust-analyzer` is in the PATH,My rust toolchain is as
below:

```
rustc --version
rustc 1.87.0 (17067e9ac 2025-05-09)

rust-analyzer --version
rust-analyzer 1.87.0 (17067e9ac6d 2025-05-09)
``
6. Start eglot with `M-x eglot`, now the errors still exist. This is the
issue.

7. `M-x flymake-mode` to disable flymake
8. `M-x eglot-reconnect` will refresh the Flymake diagnostics,and no
errors reported if your Rust project is compiled.

The issue only happened on Emacs 31, it works as expected on Emacs 30.  

----
Eason Huang

In GNU Emacs 31.0.50 (build 1, x86_64-apple-darwin24.5.0, NS
 appkit-2575.60 Version 15.5 (Build 24F74), git sha1 c916f816e0f) of
 2025-06-22 built on 192.168.1.9
Windowing system distributor 'Apple', version 10.3.2575
System Description:  macOS 15.5

Configured using:
 'configure --without-native-compilation --without-dbus
 'CPPFLAGS=-I/opt/local/include
 -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk'
 'LDFLAGS=-L/opt/local/lib -Wl,-headerpad_max_install_names -Wl,-rpath
 /opt/local/lib/gcc14
 -Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
 -arch x86_64''

Configured features:
ACL GIF GLIB GMP GNUTLS JPEG LCMS2 LIBXML2 MODULES NOTIFY KQUEUE NS
PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP XIM ZLIB

Important settings:
  value of $LANG: zh_CN.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Elisp/l

Minor modes in effect:
  flymake-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message yank-media puny rfc822 mml
mml-sec epa derived epg rfc6068 epg-config gnus-util mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils noutline
outline eglot tree-widget wid-edit external-completion jsonrpc xref diff
ert pp ewoc debug backtrace find-func filenotify imenu pcase vc-git
diff-mode track-changes easy-mmode files-x vc-dispatcher rust-utils
rust-mode-treesitter rust-ts-mode rx c-ts-common treesit rust-mode
rust-playpen rust-compile rust-cargo rust-common rust-rustfmt dired-aux
dired dired-loaddefs time-date checkdoc lisp-mnt flymake project compile
text-property-search comint ansi-osc ansi-color ring warnings thingatpt
use-package-ensure cl-extra help-mode use-package-core emacs-git-version
rust-mode-autoloads package browse-url xdg url url-proxy url-privacy
url-expand url-methods url-history url-cookie generate-lisp-file
url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs icons password-cache json subr-x map byte-opt
gv bytecomp byte-compile url-vars cl-loaddefs cl-lib china-util rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns lcms2
multi-tty make-network-process tty-child-frames emacs)

Memory information:
((conses 16 124358 19418) (symbols 48 13713 0) (strings 32 38113 1660)
 (string-bytes 1 1006591) (vectors 16 25656)
 (vector-slots 8 302210 13180) (floats 8 63 99) (intervals 56 820 2)
 (buffers 1064 21))

-- 
Eason Huang