Use new sass-parser for Sass parsing #17915
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
See #17732.
This draft PR integrates
sass-parserinto Prettier for Sass parsing (and presumably could be expanded to include CSS parsing as well). For ease of initial testing, this first draft adds a newsassparserparsing language, and leaves the existingscssparser intact. Sass tests are modified to run against the new parser, so that test failures highlight formatting differences:There are currently a lot of test failures. Many of them should hopefully be resolved with fixes/additions to the underlying Sass parser, but some of them represent possible formatting improvements, and/or edge cases that still need to be addressed.
Todo
sass-parserisn't production-ready, and is still missing some critical features. Many of these are documented with// TODOcomments in the new parser, including:rawsdatadeclaration.importantthrows an errorconfigurationnodes are missingsource.span(throws an error)@extendnodes expose a parsedselector?@prettier-placeholder(see also Proposal: refactor css placeholder for TemplateLiteral #6790)Checklist
docs/directory).changelog_unreleased/*/XXXX.mdfile followingchangelog_unreleased/TEMPLATE.md.