unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "João Távora" <joaotavora@gmail.com>
To: Felix <felix.dick@web.de>
Cc: 60107@debbugs.gnu.org
Subject: bug#60107: 30.0.50; Open new files very slow if eglot and which-function-mode are enabled.
Date: Thu, 15 Dec 2022 23:44:54 +0000	[thread overview]
Message-ID: <CALDnm53CzTJPgbpaae46ZqgzeVNfrAwQkRk1NbYey66M2RC5sA@mail.gmail.com> (raw)
In-Reply-To: <87edt0mg7p.fsf@web.de>

[-- Attachment #1: Type: text/plain, Size: 3401 bytes --]

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 <felix.dick@web.de> 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.
>
>
>
>

-- 
João Távora

[-- Attachment #2: Type: text/html, Size: 4310 bytes --]

  reply	other threads:[~2022-12-15 23:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-15 22:53 bug#60107: 30.0.50; Open new files very slow if eglot and which-function-mode are enabled Felix
2022-12-15 23:44 ` João Távora [this message]
2022-12-15 23:59   ` Felix
2022-12-16  7:23     ` Eli Zaretskii
2022-12-16 11:26       ` Felix
2022-12-16 15:45         ` Eli Zaretskii
2022-12-16 15:53           ` João Távora

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CALDnm53CzTJPgbpaae46ZqgzeVNfrAwQkRk1NbYey66M2RC5sA@mail.gmail.com \
    --to=joaotavora@gmail.com \
    --cc=60107@debbugs.gnu.org \
    --cc=felix.dick@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).