unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Theodor Thornhill <theo@thornhill.no>,
	juri@linkov.net, 46859@debbugs.gnu.org
Subject: bug#46859: 28.0.50; [PATCH]: Add option to truncate long lines in xref.el
Date: Mon, 8 Mar 2021 04:48:33 +0200	[thread overview]
Message-ID: <e2ca1cfa-8285-b582-cfb2-943ae505b64b@yandex.ru> (raw)
In-Reply-To: <m2y2eyk9z6.fsf@Theodors-MBP.lan>

Hi again,

On 07.03.2021 22:03, Theodor Thornhill via Bug reports for GNU Emacs, 
the Swiss army knife of text editors wrote:

>> Please try out the attached preparation patch.
>>
>> It improves the performance of the "very long line" case drastically
>> over here, while not doing any truncation yet. Looks like we regressed
>> that case when we added rendering of multiple matches on the same line.
>>
> 
> Yes, this seems to help a lot. Now the search is down from 11 seconds to
> 1.09. It is comparable to the other good efforts.

Excellent!

I've pushed this change, along with some stuff it depends on, to master 
in commit 8e103ebef1.

>> We can add the truncation feature on top of it.
> 
> I think we should, since moving around in the xref-buffer is still very slow.

I see that too.

>> Probably also in xref--collect-matches-1 (truncating the value of
>> SUMMARY just before the xref-make-match call).
>>
>> Alternatively, we could experiment with hiding parts of the long line
>> using some display/visibility features (except the truncate-lines
>> variable, that one keeps things slow). That could be done in
>> xref--insert-xrefs or somewhere nearby. That is trickier, though, given
>> that we'll probably want to unhide it (wholly or partially) when
>> iterating over matches inside.
> 
> At this point I'm really thinking that truncating without bothering too
> much about losing information is worth it, and the added complexity by
> retaining information would only make regressions more feasible.

With the latest change, retaining that info should be particularly 
difficult: you adjust the SUMMARY values inside xref--collect-matches-1 
using the context information at hand, and that's almost it (mostly note 
to self: also need to update xref--outdated-p accordingly).

> I
> assume these files are _actually_ read once every blue moon. To maximize
> the speedup should be at a higher priority than retaining the matches,
> IMO. In any case, if there is a hit on one of these long lines, the
> current efforts will render them as results to the xref
> buffer. Searching or editing these files wouldn't be emacs' strength
> anyways :)

Depends on the performance improvement multiplier, I suppose.

But I'm inclined to believe that if the user did search those files, and 
did not include them in, say, project-vc-ignores value, they probably 
want to be able to see all matches. Sometimes losing valid hits can be a 
significant problem, and since Xref is implemented in an opaque way it 
is, we should make an effort not to omit information in the name of 
performance, at least while feasible.

> My proposal for the "best" fix would be:
> 
> - truncating long lines by default, both for grep and ripgrep
> - adding some variation of the "-M <n>" value for ripgrep by default
> 
> What do you think?

I think that would be a good non-default option for users who really 
know what they're doing. And it's already available for those who use 
ripgrep.

After all, there can be files out there with some long lines (not 
kilobytes long, probably, but >500 chars? why not) that aren't minified 
CSS or JS. If those were the only problem, we could as well recommend 
everybody add those to their project ignores and be done with it (which 
is what I usually do personally).





  reply	other threads:[~2021-03-08  2:48 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-01 20:40 bug#46859: 28.0.50; [PATCH]: Add option to truncate long lines in xref.el Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-01 22:07 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-02 19:25 ` Juri Linkov
2021-03-02 21:13   ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-02 21:37     ` Dmitry Gutov
2021-03-02 21:45       ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-02 22:14       ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-02 22:37         ` Dmitry Gutov
2021-03-03 16:13           ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-03 17:29             ` Dmitry Gutov
2021-03-03 19:54               ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-06 22:26                 ` Dmitry Gutov
2021-03-07  1:29                   ` Dmitry Gutov
2021-03-07  3:22                   ` Dmitry Gutov
2021-03-07 20:03                     ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-08  2:48                       ` Dmitry Gutov [this message]
2021-03-07 20:16                   ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-07 20:26                     ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-08  2:56                     ` Dmitry Gutov
2021-03-10  2:06                       ` Dmitry Gutov
2021-05-17 15:27                         ` Lars Ingebrigtsen
2021-05-17 15:44                           ` Dmitry Gutov
2021-05-17 16:57                             ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-18  0:39                               ` Dmitry Gutov
2021-03-03  9:05     ` Juri Linkov
2021-03-03  9:52       ` Gregory Heytings
2021-03-03 12:47         ` Dmitry Gutov
2021-03-03 13:53           ` Gregory Heytings
2021-03-03 14:00             ` Dmitry Gutov
2021-03-03 15:04               ` Gregory Heytings
2021-03-03 17:11                 ` Gregory Heytings
2021-03-03 17:26                   ` Dmitry Gutov
2021-03-03 17:42                     ` Gregory Heytings
2021-03-03 19:14                       ` Dmitry Gutov
2021-03-03 19:34                         ` Gregory Heytings
2021-03-03 19:52                           ` Juri Linkov
2021-03-03 20:34                             ` Gregory Heytings
2021-03-04  3:36                               ` Eli Zaretskii
2021-03-04  9:19                                 ` Gregory Heytings
2021-03-04 14:08                                   ` Eli Zaretskii
2021-03-04 14:39                                     ` Gregory Heytings
2021-03-04 15:13                                       ` Eli Zaretskii
2021-03-04 16:47                                         ` Gregory Heytings
2021-03-04 17:13                                           ` Eli Zaretskii
2021-03-04 17:35                                             ` Gregory Heytings
2021-03-04 18:28                                               ` Eli Zaretskii
2021-03-06 12:31                                               ` Dmitry Gutov
2021-03-06 12:37                                                 ` Dmitry Gutov
2021-03-06 12:54                                                   ` Gregory Heytings
2021-03-06 14:26                                                     ` Dmitry Gutov
2021-03-06 22:47                                                       ` Gregory Heytings
2021-03-06 23:00                                                         ` Dmitry Gutov
2021-03-06 23:24                                                           ` Gregory Heytings
2021-03-07  3:08                                                             ` Dmitry Gutov
2021-03-07  8:13                                                               ` Gregory Heytings
2021-03-08  3:24                                                                 ` Dmitry Gutov
2021-03-08  8:26                                                                   ` Gregory Heytings
2021-03-08 11:47                                                                     ` Dmitry Gutov
2021-03-06 12:49                                                 ` Gregory Heytings
2021-03-06 14:07                                                   ` Dmitry Gutov
2021-03-03 20:30                           ` Dmitry Gutov
2021-03-03 21:06                             ` Gregory Heytings
2021-03-06 12:44                               ` Dmitry Gutov
2021-03-06 12:58                                 ` Gregory Heytings
2021-03-06 14:06                                   ` Dmitry Gutov
2021-03-06 22:55                                     ` Gregory Heytings
2021-03-03 19:59                         ` Juri Linkov
2021-03-04  2:50                           ` Dmitry Gutov
2021-03-04  9:24                             ` Juri Linkov
2021-03-04 17:20                               ` Dmitry Gutov
2021-03-04 17:56                                 ` Juri Linkov
2021-03-04 18:57                                   ` Dmitry Gutov
2021-03-06 12:39                                   ` Dmitry Gutov
2021-03-03 16:14       ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors

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=e2ca1cfa-8285-b582-cfb2-943ae505b64b@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=46859@debbugs.gnu.org \
    --cc=juri@linkov.net \
    --cc=theo@thornhill.no \
    /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).