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.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There doesn't seem to be a way to get a Stylesheet from Stylesheet.parseScss() etc. if the parser finds an error. I've searched through the docs of sass_api and skimmed the source code for the StylesheetParser. I couldn't find options to, say, treat errors as warnings or to continue parsing after an error.
Take this SCSS document for example, which I'm using to test completions in the language server:
.a {
display: /* [1] */ ;
}
/* [1] Here the parser throws (Error: Expected expression). Since we don't have a Stylesheet we can't tell what the context/AstNode is at this position. We would like to know that we're in a Declaration with the name "display" so we can provide completion items for the allowed values for the display property. We could probably get _something_ by looking at the raw string, but strings have their own limitations and problems (how to handle scope for Sass variables for instance). */
The language server needs the parser to still tracks errors (for diagnostics, to give user feedback on errors), but instead of throwing it should try to proceed to a point where it can reasonably recover (if possible), and continue from there. This way the parser always returns some kind of Stylesheet so the language server can give as much help as possible, even in a "broken" document.
Their parser does not recover from all errors of course, but at least the Stylesheet has enough information to give the completions feature the context it needs for correct suggestions. In the example above the scanner would move to the ; on L2 C22 and continue.
I realise retrofitting such a mode to the parser is quite a bit of work. Unfortunately I don't think the language server can get to a shippable state without it. For completions in particular users expect context-aware suggestions in documents where the parser throws today.
What do you think? Would this be doable at some point? Any workarounds or sass_api features I've missed?
The text was updated successfully, but these errors were encountered:
This is something I'm open to in theory, but that in practice we'd need to adjust the parser so that every single location that currently throws an error also has the ability to recover as gracefully as possible. Doable, but a big chunk of work.
Hello, hope you're all well 👋
Opening this issue as I'm not sure how to proceed with sass/dart-sass-language-server#34
There doesn't seem to be a way to get a
Stylesheet
fromStylesheet.parseScss()
etc. if the parser finds an error. I've searched through the docs ofsass_api
and skimmed the source code for theStylesheetParser
. I couldn't find options to, say, treat errors as warnings or to continue parsing after an error.Take this SCSS document for example, which I'm using to test completions in the language server:
The language server needs the parser to still tracks errors (for diagnostics, to give user feedback on errors), but instead of throwing it should try to proceed to a point where it can reasonably recover (if possible), and continue from there. This way the parser always returns some kind of
Stylesheet
so the language server can give as much help as possible, even in a "broken" document.For some prior art, the SCSS/CSS parser that ships with VS Code has this approach of resync/recovery tokens. As part of marking an error the parser lists tokens that the scanner should proceed to before trying to parse more nodes.
https://github.com/microsoft/vscode-css-languageservice/blob/9e3bfe4698a4a2888fc134eb7579f99c449c9d02/src/parser/cssParser.ts#L483
Their parser does not recover from all errors of course, but at least the Stylesheet has enough information to give the completions feature the context it needs for correct suggestions. In the example above the scanner would move to the
;
on L2 C22 and continue.I realise retrofitting such a mode to the parser is quite a bit of work. Unfortunately I don't think the language server can get to a shippable state without it. For completions in particular users expect context-aware suggestions in documents where the parser throws today.
What do you think? Would this be doable at some point? Any workarounds or
sass_api
features I've missed?The text was updated successfully, but these errors were encountered: