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

tsserver should implement the Language Server Protocol #11274

Closed
mickaelistria opened this Issue Sep 30, 2016 · 18 comments

Comments

Projects
None yet
10 participants
@mickaelistria
Copy link

mickaelistria commented Sep 30, 2016

As the language server protocol ( https://github.com/Microsoft/language-server-protocol ) is getting more and more popularity and clients ( https://github.com/Microsoft/language-server-protocol/wiki/Protocol-Implementations ), it would be very useful to have the tsserver implement this protocol.

@StevenDoesStuffs

This comment has been minimized.

Copy link

StevenDoesStuffs commented Nov 27, 2016

Been 2 monthts, any updates?

@felixfbecker

This comment has been minimized.

Copy link

felixfbecker commented Feb 9, 2017

We did some work at Sourcegraph in wrapping the TS language service as a language server, but hit some limitations with the current API. Specifically, the LanguageServiceHost interface you can provide to the server requires the methods that return file contents to return synchronously. In a language server however this is most likely done asynchronously because retrieving the file content involves IO with the file system or over the protocol stream.

I would be very interested in help or improvements in the TS server to solve this use case.

@masaeedu

This comment has been minimized.

Copy link
Contributor

masaeedu commented Feb 24, 2017

@felixfbecker Would it be possible to overcome the limitations if you interfaced with an instance of tsserver instead?

@felixfbecker

This comment has been minimized.

Copy link

felixfbecker commented Feb 24, 2017

@masaeedu I don't understand the question - the TS language server is using the LanguageService from TypeScript?

@masaeedu

This comment has been minimized.

Copy link
Contributor

masaeedu commented Feb 24, 2017

@felixfbecker Sorry, I'll try to clarify what I mean. Instead of implementing LanguageServiceHost, you could let tsserver host the language service, and you wouldn't need to care about how it satisfies that interface. Your language server process would rely on passing messages to/from tsserver, which is inherently async.

@felixfbecker

This comment has been minimized.

Copy link

felixfbecker commented Mar 24, 2017

@masaeedu wouldn't the tsserver try to read from the file system directly?

@masaeedu

This comment has been minimized.

Copy link
Contributor

masaeedu commented Mar 24, 2017

@felixfbecker Yeah, it would read the files directly. I don't think that would affect your language server process in any way though. If/when they make performance improvements to tsserver you don't need to make any changes.

@felixfbecker

This comment has been minimized.

Copy link

felixfbecker commented Mar 24, 2017

@masaeedu That is a dealbreaker unfortunately, because the files are not available locally in the container.

@prabirshrestha

This comment has been minimized.

Copy link
Member

prabirshrestha commented Aug 11, 2017

I have implemented the initial version of language server protocol for typescript which can be found at https://github.com/prabirshrestha/typescript-language-server. It acts as a proxy for tsserver. Currently textDocument/didOpen, textDocument/change and textDocument/completion are implemented but adding others should be fairly easy.

In the long term I would definitely love to see LSP shipping as part of the official typescript installation.

@prabirshrestha

This comment has been minimized.

Copy link
Member

prabirshrestha commented Oct 3, 2017

Here is another LSP implementation of Typescript based on my original tsserver proxy idea. https://github.com/theia-ide/typescript-language-server. They have added more protocol feature support. It is maintained by folks at TypeFox. I have also handed over the typescript-language-server npm package to them.

@vvakame

This comment has been minimized.

Copy link
Contributor

vvakame commented Jun 1, 2018

https://github.com/Microsoft/TypeScript/wiki/Roadmap#30-july-2018
I saw the roadmap. next version up is major version up! 🥂
do you have any plans about this issue?

@keyboardDrummer

This comment has been minimized.

Copy link

keyboardDrummer commented Sep 5, 2018

Can we get an update on whether there are plans for this issue?

The two existing TS LSP servers both have big issues. If the TS team wants TypeScript to be used outside of VSCode / VStudio, they should resolve this issue.
SourceGraph: worst-case warm-up time is extremely long; no support for files that change on disk, such as the tsconfig.json file.
TypeFox: incomplete implementation of LSP.

@anurbol

This comment has been minimized.

Copy link

anurbol commented Mar 9, 2019

6 months from the time last comment was written. Any updates on this? LSP is promoted by Microsoft, yet TypeScript seems to ignore it. Weird :-)

@mickaelistria

This comment has been minimized.

Copy link
Author

mickaelistria commented Mar 9, 2019

You can use https://github.com/theia-ide/typescript-language-server which more or less does the work of wrapping tsserver messages as LSP ones.
I'm closing this issue as I'm satisfied with https://github.com/theia-ide/typescript-language-server and wouldn't -as a consumer- get.any clear added-value if this were implemented directly in tsserver.

@felixfbecker

This comment has been minimized.

Copy link

felixfbecker commented Mar 9, 2019

I am using https://github.com/theia-ide/typescript-language-server too and it has lots of problems. Problems that I think wouldn't exist if the official server spoke LSP.

@anurbol

This comment has been minimized.

Copy link

anurbol commented Mar 10, 2019

The library of theia-ide seems to be not bad, but as felixbecker said, indeed has problems, unfortunately. For instance it does not raise errors on unused variables when noUnusedLocals is enabled. And I have just started exploring it (fearing of other inconsistencies).

@mickaelistria

This comment has been minimized.

Copy link
Author

mickaelistria commented Mar 10, 2019

@vicapow

This comment has been minimized.

Copy link

vicapow commented Mar 11, 2019

One more anecdote is Microsoft/vscode#70239
By not using LSP in tsserver, it means there are features that exist in vscode + tsserver that aren't yet possible to implement with LSP + vscode alone. This puts LSP implementations at a disadvantage compared to non-LSP implementations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.