Subject: Re: bug#60107: 30.0.50; Open new files very slow if eglot and which-function-mode are enabled.

From: Felix <[email-masked]>
Date: Fri, 16 Dec 2022 00:59:28 +0100

Hallo João,

Thanks for the fast response!

Now it makes sense that glsl-mode managed with eglot and glslls takes
forever to open glsl files, and imenu is not working at all.
Seems to depend on the server.
I will try your suggestions, in the end which-function-mode
is not that important to me, so if everything fails it's not that bad
either.
If this is not a bug of emacs,
feel free to close this bug report.

Btw. thanks a lot for eglot!

Felix

João Távora <[email-masked]> writes:

> Hi Felix,
>
> First of all, thanks for the easy-to-follow Emacs -Q reproduction
> recipe.  I reproduced the problem, although in my own test, which
> used medium/small C++ files, the delay I noticed wasn't very long,
> about 1 second.
>
> Which-function-mode relies on Imenu, which is the keeper of
> a syntactic sub-tree of the file, which it must collect from somewhere.
> When Eglot is enabled, Imenu gets its tree from the LSP server.
> Depending on the LSP server and the amount of information at
> hand, this can be a lot of information and take some time to gather.
>
> It seems which-function-mode not only relies on Imenu but also
> blocks the user interface and redisplay while it is waiting for the
> Imenu backend to reply (the Imenu backend in this case being
> Eglot's).
>
> I don't see a good fix for this, except disabling Imenu/Eglot integration
> by adding the symbol 'imenu to eglot-stay-out-of (see the Eglot
> manual).
>
> It can also be that what's slowing down operation here isn't the
> collection of the syntax tree per se but the logging that is going
> on.  See also the Eglot manual for how to configure
> eglot-events-buffer-size to see if it makes a difference or not.;
>
> Finally, you can probably get some other source for Imenu information
> to feed which-func-mode.  The new C++ modes like c++-ts-mode seems
> to have similar information handy, and perhaps it takes a lot less time
> to compute.
>
> João
>
> On Thu, Dec 15, 2022 at 10:57 PM Felix <[email-masked]> wrote:
>
>  In GNU Emacs 30.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version
>   3.24.35) of 2022-12-15 built on felix-lifebooka531
>  Repository revision: 0d60579b6b6f2648a881572783322b1bcf931a73
>  Repository branch: makepkg
>  Windowing system distributor 'The X.Org Foundation', version 11.0.12201006
>  System Description: Arch Linux
>
>  Configured using:
>   'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
>   --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games
>   --with-modules --without-libotf --without-m17n-flt --without-gconf
>   --enable-autodepend --with-native-compilation=yes --with-xinput2
>   --with-x-toolkit=gtk3 --without-xaw3d --without-cairo --with-sound=no
>   --with-xwidgets --with-tree-sitter --without-gpm
>   --without-compress-install
>   '--program-transform-name=s/\([ec]tags\)/\1.emacs/'
>   'CFLAGS=-march=native -mtune=generic -O3 -pipe -fno-plt -fexceptions
>   -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security
>   -fstack-clash-protection -fcf-protection'
>   LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now'
>
>  Configured features:
>  ACL DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LCMS2
>  LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG
>  SECCOMP SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11
>  XDBE XFT XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB
>
>  Important settings:
>    value of $LANG: de_DE.UTF-8
>    locale-coding-system: utf-8
>
>  Opening C files is very slow if which-function-mode and eglot are
>  enabled at the same time. I tested this with:
>
>  emacs -Q
>  opening a C project file
>  M-x eglot
>  M-x which-function-mode
>  switching to another .c project file now takes seconds until the buffer
>  shows up.
>  I use an old Laptop, but with just one of the two modes disabled,
>  it's quite snappy.