GNU bug report logs -
#72705
31.0.50; eglot--dumb-tryc Filters out too much
Previous Next
Reported by: Dmitry Gutov <dmitry <at> gutov.dev>
Date: Mon, 19 Aug 2024 01:53:02 UTC
Severity: normal
Found in version 31.0.50
Done: Dmitry Gutov <dmitry <at> gutov.dev>
Bug is archived. No further changes may be made.
Full log
Message #23 received at 72705 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On 20/08/2024 12:40, João Távora wrote:
> On Tue, Aug 20, 2024 at 3:08 AM Dmitry Gutov <dmitry <at> gutov.dev> wrote:
>
>> So far I've tested with gopls and clangd (when writing the new tests),
>> typescript-language-server and rust-analyzer.
>
> That's pretty good. If you could add pylsp or pyright (basedpyright),
> I'd feel even more confident.
Installed pylsp with apt - the basic things I tested seem to work too.
> I don't have time to spend examining these details, just the final
> outcome is relevant: partial completions cannot be inserted, but
> fragments of a completion can be completed to a fully formed
> completion (eventually running exit-function then).
And only fragments that prefix-match all completions as prefix.
exit-function seems to function.
>> The report that's referenced in the 3 commits your mentioned does seem
>> to have regressed is https://github.com/joaotavora/eglot/issues/1339
>> not to the original behavior (exit-function still works), but C-M-i
>> changes buffer text to
>>
>> v.call1234.1234567890
>
> I don't have time to investigate right now, but indeed that issue there were
> two consecutive fixes: the first one (which you say "still works") and a second
> one which I eventually reverted because it fixes some things and broke
> others.
Now that I've looked at them a few more times - all 3 changes were in
the completion table, whereas I'm altering the completion style here.
And indeed what seems to be the crux of the previous improvement
(working exit-function) stays around.
> So is the regression you mention in relation to the current Eglot state or
> to that intermediate state?
In relation to the current state, but I think I've figured it out - see
the new revision attached.
So what I think what was happening, is since the style was returning nil
when the input has a non-matching suffix, the 'emacs22' style came into
play (style which only looks at the prefix) and expanded the input from
"c" to "call".
Anyway, the attached avoids the failover by returning non-nil in the
last clause, if at least the prefix matches the table.
That makes "C-M-i" keep the input at "v.c|1234" (with two completions:
"match" and "call") - but selecting either of the completions using
Company or the mouse, or M-RET, expands each into the corresponding
snippet, which seems most optimal all-around.
See the new test 'eglot-test-try-completion-inside-symbol' inside the
patch. Wasn't sure whether to make it use 'completion-try-completion' or
'completion-at-point', but the former seems more explicit.
[eglot--dumb-tryc-more-checks-v2.diff (text/x-patch, attachment)]
This bug report was last modified 267 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.