Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suggest autocomplete options immediately after inserting a period #8766

Open
1 task done
skhaz opened this issue Mar 3, 2024 · 25 comments · Fixed by #11401
Open
1 task done

Suggest autocomplete options immediately after inserting a period #8766

skhaz opened this issue Mar 3, 2024 · 25 comments · Fixed by #11401
Labels
autocompletions Feedback for code completions in the editor defect [core label] language server An umbrella label for all language servers language An umbrella label for all programming languages syntax behaviors large projects For anything relating to large volumes of files or multiple subprojects in one main project. needs info / awaiting response Issue that needs more information from the user

Comments

@skhaz
Copy link

skhaz commented Mar 3, 2024

Check for existing issues

  • Completed

Describe the feature

As can be seen in the images below, the autocomplete only offers me suggestions after I insert a period, and this happens in any language I use daily (Go, Python & TypeScript).

This is quite annoying because it forces you to either read the documentation or start guessing the possible first letters of what you want.

My question is, is there a way to improve this? I come from using VSCode, and there it works 'as expected,' so why is it different in Zed?

In my opinion, this behavior in Zed is not productive.

After pressing period, nothing happens.

Screenshot 2024-03-03 at 11 52 55

Since I know the name of the attribute, I press L and only at that moment does it suggest what I want.
Screenshot 2024-03-03 at 11 53 03

If applicable, add mockups / screenshots to help present your vision of the feature

No response

@skhaz skhaz added admin read Pending admin review enhancement [core label] triage Maintainer needs to classify the issue labels Mar 3, 2024
@Moshyfawn
Copy link
Contributor

I'm working in a TS codebase and the behaviour I'm seeing is the suggestion popover appears after showing the intent of accessing a property: inserting a period. The only time it doesn't pop up is when some code is suggested by Copilot.

zed-popover-intent.mp4

@Moshyfawn Moshyfawn added language An umbrella label for all programming languages syntax behaviors language server An umbrella label for all language servers defect [core label] popovers Feedback for tooltips, syntax hints, info popups, etc and removed triage Maintainer needs to classify the issue language An umbrella label for all programming languages syntax behaviors language server An umbrella label for all language servers labels Mar 3, 2024
@skhaz
Copy link
Author

skhaz commented Mar 3, 2024

@Moshyfawn, do you have any particular configuration? I haven't changed anything, it is the default installation.

Thank you.

@Moshyfawn
Copy link
Contributor

This has been the case with every configuration I've tried. My current settings are as follows:

{
  "theme": "Rosé Pine",
  "ui_font_size": 14,
  "buffer_font_size": 14,
  "tab_size": 2,
  "show_wrap_guides": true,
  "format_on_save": "language_server",
  "scrollbar": {
    "git_diff": false
  },
  "git": {
    "git_gutter": "tracked_files"
  }
}

@SomeoneToIgnore
Copy link
Contributor

SomeoneToIgnore commented Mar 3, 2024

I believe the difference in the behavior you're seeing is due to corresponding language server's CompletionProvider not having a . in its triggerCharacters list.

Spec: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_completion

Here are the only places in Zed codebase we register those trigger characters:

buffer_handle.update(cx, |buffer, cx| {
buffer.set_completion_triggers(
server
.capabilities()
.completion_provider
.as_ref()
.and_then(|provider| provider.trigger_characters.clone())
.unwrap_or_default(),
cx,
);
});

buffer_handle.update(cx, |buffer, cx| {
buffer.set_completion_triggers(
language_server
.capabilities()
.completion_provider
.as_ref()
.and_then(|provider| provider.trigger_characters.clone())
.unwrap_or_default(),
cx,
)
});

So, while Zed can add some heuristics to trigger more completions, a more appropriate fix seems to belong to corresponding language servers.

@Moshyfawn Moshyfawn added language An umbrella label for all programming languages syntax behaviors language server An umbrella label for all language servers and removed popovers Feedback for tooltips, syntax hints, info popups, etc labels Mar 3, 2024
@SomeoneToIgnore
Copy link
Contributor

Hm, the problem is: seems that all 3 mentioned servers do have . in their completion providers in main branches:

So maybe it's Zed's issue, after all: but still, to debug this, one would need to find a case where it reproduces reliably, then

  • check that the completion provider sends back a proper list with .
  • check that, during input (and when no active copilot suggestion exists), check that we determine input's trigger correctly:
    fn trigger_completion_on_input(&mut self, text: &str, cx: &mut ViewContext<Self>) {
    if !EditorSettings::get_global(cx).show_completions_on_input {
    return;
    }
    let selection = self.selections.newest_anchor();
    if self
    .buffer
    .read(cx)
    .is_completion_trigger(selection.head(), text, cx)
    {
    self.show_completions(&ShowCompletions, cx);
    } else {
    self.hide_context_menu(cx);
    }
    }

@skhaz
Copy link
Author

skhaz commented Mar 3, 2024

PS. I do not have Copilot, but when I had, I had the same behavior.

@SomeoneToIgnore
Copy link
Contributor

I would really appreciate if somebody can provide the issue with an open source project and the repro steps; or, alternatively if somebody could debug those things locally in the places mentioned above and add more context.

@skhaz
Copy link
Author

skhaz commented Mar 3, 2024 via email

@skhaz
Copy link
Author

skhaz commented Mar 3, 2024

I use asdf to install the languages that I want use, in this case, NodeJS 18.x

The exactly same setup works for VSCode.

@alex-astronomer
Copy link

I am not seeing the same behavior. I am using Python, testing with a random little example:

class Test:

    def __init__(self):
        self.l = [1, 2, 3]

    def add(self, i: int):
        self.l.append(i)

something = Test()

When I type something. I immediately get a suggestions pop-up.

image

I have default configuration for Zed, Python, Pyright, etc. Copilot is disabled.

Unfortunately unable to repro.

@skhaz
Copy link
Author

skhaz commented Mar 6, 2024 via email

@brenr
Copy link

brenr commented Mar 21, 2024

Experiencing the same exact issue here with my TypeScript project. I absolutely need an autocomplete list after pressing . Currently running Zed 0.127.3

Edit: I restarted Zed and now it's working after pressing period? Seems inconsistent. Also worth noting that when I try to autocomplete a method, I'm not getting () automatically inserted. If the method has args, the text cursor should move inside the parens and show a tooltip for the argument the user is on, otherwise, simply move text cursor after parens.

Back to using WebStorm for now.

@cedws
Copy link

cedws commented Apr 23, 2024

I'm experiencing an issue with autocompletion when Copilot is enabled. Most of the time I see a list of suggested symbols immediately after inserting a period. Sometimes, there's an issue where this list doesn't appear and I have to delete and retype the previous word to get the list to show again. It seems to be a conflict with the autocompletion suggested by Copilot. I can confirm that disabling Copilot resolves this.

Copilot enabled

Screen.Recording.2024-04-23.at.22.53.16.mov

Copilot disabled

Screen.Recording.2024-04-23.at.22.57.59.mov

I compared with the behaviour of Copilot in VSCode and it hides Copilot suggestions unless the autocomplete list is closed (like with Esc).

@SomeoneToIgnore
Copy link
Contributor

Should be fixed in Zed 0.135

@nrthbound
Copy link

Another option is to use Control + Spacebar. Also, thank you @SomeoneToIgnore !

@ShayanGsh
Copy link

I am still experiencing this problem on 0.136.2 and I have to press ctrl+space every single time to get the autocomplete options.

@skhaz
Copy link
Author

skhaz commented May 28, 2024

It still not working on the newest version... Not sure why was closed.

@SomeoneToIgnore
Copy link
Contributor

SomeoneToIgnore commented May 28, 2024

@skhaz

Can you provide more details?
Language used; video or, at worst, a text description of the reproduction steps; ideally the project to test this on; the config.

So far, seems to work for me on a sample test project, and the test added also works — so there has to be something else, locally different for you, to trigger the behavior mismatch, or I am doing something wrong to reproduce it.

Screen.Recording.2024-05-28.at.16.44.49.mov

@ShayanGsh
Copy link

@SomeoneToIgnore

I tried it on different projects, I have come to realize that it doesn't work on big projects, while it works fine on smaller/medium-sized ones.

I have only tried it with nodejs/typescript, as I don't have any equally big projects in any other languages. When I say a big project, I'm talking over 1000 .ts files, not counting node_modules (it's terrible legacy code)

@SomeoneToIgnore
Copy link
Contributor

Thank you, that might be #4613 and/or #5166 in play, so the issue could be closer to completion timeouts rather than the editor elements' logic.

It would be great to get a project to repro it, so if somebody has a public one, feel free to share.

@Moshyfawn Moshyfawn added needs info / awaiting response Issue that needs more information from the user large projects For anything relating to large volumes of files or multiple subprojects in one main project. autocompletions Feedback for code completions in the editor labels May 28, 2024
@atresnjo
Copy link

atresnjo commented Jun 8, 2024

just started using zed yesterday and realized this is also happening to me (typescript codebase)

after a restart it works again, until it doesn't

codebase is very small, so it can't be that

@fishel-feng
Copy link

fishel-feng commented Jun 19, 2024

I am experiencing the same issue in my ts-server, and the version I am using is 0.139.3.

It seems that something is wrong in ts-server, when I restart the project, it works.

Is there anyway we can check the status for LSP? I will restart LSP when I get the issue, but I don't know the status.

@LukaPelgrom
Copy link

Is there a way to open the suggestion window by a keybind?

@fishel-feng
Copy link

fishel-feng commented Jun 24, 2024

Is there a way to open the suggestion window by a keybind?

you can try the command editor::ShowCompletions @LukaPelgrom

@ShayanGsh
Copy link

Given the changing of the language server and how this problem persists, I guess it's safe to say it might not be the language server problem.
And since ctrl+space works fine (and it's rather fast), I'm guessing upon inserting a period it might not be requesting anything from the language server? Can I see what requests are being made to the language server?

if what I'm saying sounds dumb, I apologize, I'm not familiar with how editors and language servers work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autocompletions Feedback for code completions in the editor defect [core label] language server An umbrella label for all language servers language An umbrella label for all programming languages syntax behaviors large projects For anything relating to large volumes of files or multiple subprojects in one main project. needs info / awaiting response Issue that needs more information from the user
Projects
None yet
Development

Successfully merging a pull request may close this issue.