Instead, we create a single zone-scoped object that's visible for the
entire lifespan of the visitor, and which exposes evaluation internals
which can be updated as direct field modifications.
This dramatically improves the performance of a sample app using the
Carbon design system, and should generally improve apps that have a
lot of repeated @imports of library files. It's possible we can back
this out if it's not pulling its weight once we no longer support
@import.
`visitCalculationExpression` is now properly implemented.
This also adds concrete test classes that extend `RecursiveAstVisitor`
and `RecursiveStatementVisitor` to ensure similar issues are avoided in
the future whenever new AST nodes are added.
We'll still include the code for this, but on a best-effort basis and
with the understanding that it will never work on Node 16 or later.
Once Node 14 is out of LTS or we fully remove the old Node Sass API,
we can get rid of fiber support entirely.
We expect these checks to succeed almost all the time, and we really
only need them as a backstop to ensure we don't deploy a change that
breaks real-world users.
In a future commit, I'll update these jobs to only run just before
release, since they're expected to be substantially less likely to
fail and we don't want to waste cycles. For now, I have them runnning
always to verify that they run successfully at least once.
This check was previously checking whether *any* variables were left
in this configuration, which could include variables that were adopted
from outer configurations. This threw invalid errors when that outer
configuration would have been satisfied by another variable (or
forward) later in the file.
Closessass/sass#1460
`@at-root` should now work properly in a nested import as long as the
only `@use` or `@forward` rules present are for built-in modules.
This is a partial but not complete fix for #1347. It's a bit hacky to
special case built-in modules here, but since they represent the only
real legitimate case for using this combination of features, it lets us
fix the bug for this case and avoid the bordering-on-infeasible work of
fixing this for user-defined modules.