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

Overview of current features of language server + limitations #83

Open
40 of 47 tasks
dummdidumm opened this issue May 12, 2020 · 0 comments
Open
40 of 47 tasks

Overview of current features of language server + limitations #83

dummdidumm opened this issue May 12, 2020 · 0 comments

Comments

@dummdidumm
Copy link
Member

dummdidumm commented May 12, 2020

This is an overview of the current state of the svelte-language-server - what it already can do, what it cannot, yet. If you feel a feature is missing or something that should work according to this list does not work, open a new issue.

HTML

autocompletion / auto imports

  • autocompletion for normal html tags
  • autocompletion for special svelte tags like <svelte:window>
  • autocompletion for special svelte tags like #await

hover info

  • hover info for normal html tags
  • hover info for special svelte tags like <svelte:window>
  • hover info for special svelte tags like #await

CSS

  • support for CSS/Less/SCSS

autocompletion / auto imports

hover info

  • hover info for css tags

go to definition

  • go to definition from class in template to css
  • go to definition from class in template moustache tags like class to css
  • go to definition from css to template

Javascript / Typescript

go to definition

typechecking

autocompletion / auto imports

code actions

Cross-cutting

code-actions

Limitations

The compiler is not designed for an editor.

See sveltejs/svelte#4818.

During editing, the likelihood that the code is invalid is very high. But the svelte compiler is designed to throw syntax errors to warn the user. Thus the features that rely on the svelte compiler won't work when there's a syntax error.

We did consider writing a dedicated parser for the editor but that seems to be too much work and maintenance burden. So it's not a priority, but we don't say it won't ever happen.

TypeScript language service is synchronous.

The Typescript's language service is mostly synchronous so we can't preprocess code before handing it off to svelte2tsx, because that's asynchronous (#339). That hinders features such as better Pug support. That's also one of the big roadblocks of eslint-plugin-svelte3. A svelte.preprocessSync might help, but was decided against for now.

Another problem that arises from the synchronous language service is the effort required to implement a TypeScript plugin (#580) which would help crossing the boundaries of TS/JS/Svelte and enable features such as "start rename in a TS file, Svelte files get updated, too". Even if we ignore preprocessing, the process of intellisense is still asynchronous because we use source-map to map the source code positions which is asynchronous.

@sveltejs sveltejs locked and limited conversation to collaborators May 12, 2020
@dummdidumm dummdidumm pinned this issue May 12, 2020
@dummdidumm dummdidumm changed the title Overview of current features of language server Overview of current features of language server + limitations Feb 10, 2021
@dummdidumm dummdidumm unpinned this issue Jan 29, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant