jupyterlab-lsp icon indicating copy to clipboard operation
jupyterlab-lsp copied to clipboard

We should enable filtering completion items after trigger

Open krassowski opened this issue 3 years ago • 3 comments

What are you trying to do?

While nice language servers perform server-side filtering of completion items, the LSP protocol itself does not make it mandatory; moreover the long-standing request to make it part of the protocol (https://github.com/microsoft/language-server-protocol/issues/898) was closed in October and will not be enacted.

How is it done today, and what are the limits of current practice?

Currently we do not filter the response to the initial request after trigger to match the current token:

Screenshot from 2021-12-19 18-38-54

This means thousands of irrelevant completion items and delay in rendering of completer list for servers which do not filter on the server side (like typescript-language-server).

What is new in your approach and why do you think it will be successful?

https://github.com/microsoft/language-server-protocol/issues/898#issuecomment-593968008 describes how clients should behave (and how they should not filter completion items with text edits).

krassowski avatar Dec 19 '21 18:12 krassowski

Sure, I guess if it's what we need.

Some questions for discussion:

  • is the any reason we'd not want to blanket allow filtering any message?
    • we could probably do some filter-by-example thing
      • at present, we only block if there are listeners
        • practically (because of the first-party virtual) there always is
    • we should probably (optionally) enable using a better JSON parser than stdlib
  • should we offer rewriting at the same time, or still hold off on that?
    • i really see that as a way some extenders might do some seriously un-user-friendly things. sigh.
  • would this be a new version of the listener API/entry point?
    • would we continue to support/use the old one for a while?

bollwyvl avatar Dec 19 '21 20:12 bollwyvl

We do not want to filter messages - we want to filter things shown in the completer; this is to allow instant completions from cache (this is discussed upstream in LSP repo and I outlined changes we need upstream in JupyterLab in https://github.com/jupyterlab/jupyterlab/issues/9763#issuecomment-1001619638). The initial hotfix for the typescript situation is in #735 - it is sufficient for now because we do not use textEdit just yet, but it is not the ultimate solution.

krassowski avatar Dec 27 '21 15:12 krassowski

It does not preclude filtering messages - just not useful here because we want to have all completion items cached on the frontend.

krassowski avatar Dec 27 '21 15:12 krassowski