Skip to content

Overview of current features of language server + limitations #83

Open
@dummdidumm

Description

@dummdidumm

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions