Subject: Re: bug#78862: 31.0.50; Eglot couldn't refresh Flymake diagnostics on Rust project

From: Eli Zaretskii <[email-masked]>
Date: Sun, 22 Jun 2025 10:59:27 +0300

> 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.  

Thanks, I hope João and Spencer will have comments or suggestions
about this.

> ----
> 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
> 
> 
> 
> 
>