Commit Graph

1391 Commits

Author SHA1 Message Date
Natalie Weizenbaum
43b69e60a0 Change CompileResult.includedFiles to CompileResult.includedUrls
Rather than constructing this explicitly to match Node Sass's API, we
construct it with canonical URLs and convert it into the format
expected by the Node Sass API (a mix of paths and URLs) in the
compatibility layer.
2021-07-13 18:08:18 -07:00
Natalie Weizenbaum
0e42a09fdb Remove CompileResult.sourceFiles
This was never used.
2021-07-13 17:02:50 -07:00
Jennifer Thakar
3942ac4104
Fix bug in RecursiveAstVisitor (#1389)
It looks like the body of `visitParenthesizedExpression` was accidentally removed when the type parameter was removed from this class.
2021-07-07 11:41:12 -07:00
Natalie Weizenbaum
a10d7c677d
Use @internal to cordon off internal-only Value APIs (#1379)
Lays the groundwork for #236

Note that we need to add a bunch of explicit @nodoc annotations to
work around dart-lang/dartdoc#2418 and dart-lang/dartdoc#2419.
2021-06-24 17:32:57 -07:00
Natalie Weizenbaum
268f22e147
Make required span parameters positional (#1380)
Required non-boolean parameters should pretty much always be
positional. These were still named from back when spans were nullable
in Sass.
2021-06-24 17:32:36 -07:00
Natalie Weizenbaum
655fcfc950
Properly support selector lists for selector.extend() (#1378)
Closes #1301
2021-06-24 14:50:16 -07:00
Natalie Weizenbaum
83343d7046
Fix a race condition in meta.load-css() (#1376)
We weren't properly awaiting a call to CssStylesheet.accept(), which
meant that it could try to continue doing work asynchronously in the
wrong context.

Closes #1318
2021-06-23 17:12:18 -07:00
Natalie Weizenbaum
713b7cc31e
Properly register pseudos' child selectors in ExtensionStore (#1374)
Closes #1297
2021-06-23 16:43:08 -07:00
Natalie Weizenbaum
19bd45e738
Error for Unicode ranges that have too many ?s after digits (#1373)
Closes #1280
2021-06-22 17:24:22 -07:00
Natalie Weizenbaum
629881212c
Fix root-relative @import URLs as passed to importers (#1371)
Closes #1137
2021-06-22 17:22:29 -07:00
Natalie Weizenbaum
5a9dd9161b
Fix a variable-assignment bug (#1372)
Closes #1250
2021-06-22 15:10:32 -07:00
Natalie Weizenbaum
0f68d7a511
Fix quiet deps when loaded through an @import of a file without @use (#1362)
Closes #1360
2021-06-15 13:37:48 -07:00
Natalie Weizenbaum
7e371666f4
Add quietDeps and verbose to the JS API (#1353)
To support this, we now run Node-Sass-style relative loads outside of
the Node importer. This allows the evaluator to check whether a
relative load succeeded and use that to determine whether the
stylesheet counts as a dependency.

See sass/sass#3065
2021-06-14 17:41:56 -07:00
Natalie Weizenbaum
f09f302684
Merge pull request #47 from sass/formatting 2021-06-14 15:27:20 -07:00
Jennifer Thakar
a077094f24
Fix toString for namespaced variable (#1358) 2021-06-14 14:19:53 -07:00
Natalie Weizenbaum
1c773f1cb1
Support VersionRequest and VersionResponse (#46)
Closes #33
2021-06-14 12:51:01 -07:00
Natalie Weizenbaum
f0501ec114 Reformat 2021-06-14 12:50:29 -07:00
Jennifer Thakar
f1d36a1860
Another implicit dependency fix (#1352) 2021-06-11 16:54:41 -07:00
Jennifer Thakar
754501145c
Fix a bug with implicit dependencies (#1348)
Encountered this while migrating internal code to math.div
2021-06-08 13:06:34 -07:00
Jennifer Thakar
af816d0941
Fix bug in --update with built-in modules (#1338)
Fixes #1335.
2021-06-02 14:52:17 -07:00
Christophe Coevoet
0db34159e5
Fix the allowed children for the for at-rule in declarations (#1340) 2021-06-02 14:22:34 -07:00
Natalie Weizenbaum
fd1bfd293b
Fix the URL for the @-moz-document deprecation message (#1339)
Closes #1336
2021-06-01 18:07:46 -07:00
Natalie Weizenbaum
66ab368582
Support fuzzy range errors (#45)
Closes #32
2021-05-26 13:10:56 -07:00
Natalie Weizenbaum
12c468004c
Implement CanonicalizeRequest.from_import (#41)
See sass/sass#3055
See webpack-contrib/sass-loader#905
See sass/embedded-protocol#61
2021-05-25 17:59:17 -07:00
Natalie Weizenbaum
49ef4c1121 Use the new enum names in the latest protocol version 2021-05-24 16:56:53 -07:00
Rafer45
b098adb289
Improve wording of comment (#1331)
Avoid a triple negative ("aren't unless non-null")
2021-05-24 14:19:38 -07:00
Natalie Weizenbaum
16f181660c Only omit 5 deprecation warnings per feature by default (#1327)
Closes #1323
2021-05-21 22:45:58 -07:00
Natalie Weizenbaum
d660bf12ef Add an option to the CLI and Dart Sass to silence warnings from deps
Closes #672
2021-05-21 22:45:58 -07:00
Natalie Weizenbaum
7f982a1b3a
Only emit each warning once per source location (#1322) 2021-05-21 16:23:53 -07:00
Jennifer Thakar
efe680e74b
Make :is() behave like :matches() (#1315) 2021-05-20 14:13:10 -07:00
Natalie Weizenbaum
f33b934fe4
Fix some edge cases when serializing edge-case numbers (#1312)
Also pin static analysis to Dart 2.12 to work around dart-lang/sdk#45488.
2021-05-19 17:29:16 -07:00
Natalie Weizenbaum
93bc86f97a
Support non-nullability (#40) 2021-05-17 20:57:37 -07:00
Natalie Weizenbaum
47920ad032
Merge branch 'master' into slash-separator 2021-05-17 14:13:03 -07:00
Natalie Weizenbaum
818d0d1e44 Fix context.options.context 2021-05-13 19:19:08 -07:00
Natalie Weizenbaum
136bd285b3 Add AsyncImporter.fromImport for Dart importers 2021-05-13 18:06:43 -07:00
Natalie Weizenbaum
8a344e343f Add this.fromImport for JS importers
See sass/sass#3055
See webpack-contrib/sass-loader#905
2021-05-13 17:40:31 -07:00
Natalie Weizenbaum
114b460d7c Merge remote-tracking branch 'origin/master' into slash-separator 2021-05-13 16:43:52 -07:00
Natalie Weizenbaum
5a0242a090 Code review 2021-05-13 16:43:15 -07:00
Natalie Weizenbaum
68c4d6556e Make number arguments to built-in functions slash-free
See sass/sass#3050
2021-05-12 13:21:31 -07:00
Natalie Weizenbaum
be1a414f07 Deprecate /-as-division and add replacements
Partially addresses #663
2021-05-12 13:21:28 -07:00
Jennifer Thakar
5d4950db36
Fix bug with null values in configuration (#1305)
Fixes #1281.
2021-05-12 09:09:35 -07:00
Natalie Weizenbaum
742023a877 Always track variables' source spans
This is necessary for generating useful error messages for
/-as-division.
2021-05-11 13:24:20 -07:00
Christophe Coevoet
be2d3e848a
Fix argument names in str-slice errors (#1303) 2021-05-05 17:02:14 -07:00
Natalie Weizenbaum
574e76326e
Fix a couple doc comment typos (#1302) 2021-04-30 16:46:06 -07:00
Awjin Ahn
30ede40732
Fix extending selectors across multiple modules. (#1298)
* Fix extending selectors across multiple modules.

Allows more than one module to extend the same upstream selector that,
in turn, extends a selector from its upstream module.

Properly skips creating an extra extension that was being counted as
unresolved when evaluating @extends.

See https://github.com/sass/sass-spec/pull/1635
Fixes https://github.com/sass/dart-sass/issues/1295
2021-04-28 14:19:12 -07:00
Natalie Weizenbaum
45c1333276
Properly reset variables in the loop in _peekIndentation() (#1288)
Closes #1287
2021-04-19 12:41:57 -07:00
Henry Catalini Smith
11d09cffd7
Add -w shorthand for --watch CLI flag (#1276)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2021-04-15 14:23:05 -07:00
Christophe Coevoet
39f19bef98
Fix the name of the blackness argument (#1264)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2021-04-15 14:22:43 -07:00
Awjin Ahn
2ab4f8061c
Fix deprecation warning typo. (#1247)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2021-04-15 14:22:02 -07:00
Christophe Coevoet
fbd9cfd8a2
Fix a bunch of typos in comments (#1257)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2021-04-15 14:01:07 -07:00
Christophe Coevoet
7106bac9e2
Fix typos in the doc of SimpleSelector (#1251)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2021-04-15 13:55:30 -07:00
Natalie Weizenbaum
c2e02a50da Use ?[] instead of .andGet() 2021-04-14 19:11:10 -07:00
Natalie Weizenbaum
5535458edb Fix broken specs 2021-04-14 17:15:09 -07:00
awjin
af0f25cb0e Fix broken tests 2021-04-14 17:15:09 -07:00
Natalie Weizenbaum
102d3cedc2 Make the IO interface align with the VM API 2021-04-14 17:15:09 -07:00
Natalie Weizenbaum
654744f5f4 Fix bogus null assertions 2021-04-14 17:15:09 -07:00
Natalie Weizenbaum
de013bf8ac Make spans universally non-nullable 2021-04-14 17:15:09 -07:00
Natalie Weizenbaum
3ead2e2bb5 Split out an Extender class from Extension
This gets rid of the weird subset of "one-off" extensions which didn't
have target information available. Now instead, each method explicitly
declares whether it takes/returns extensions (which do have target
info) or extenders (which do not).
2021-04-14 17:15:08 -07:00
Natalie Weizenbaum
8fd3c1ba03 Rename Extender to ExtensionStore
"Extender" is also commonly used to refer to the parent selector of an
`@extend` rule, so this helps disambiguate.
2021-04-14 17:15:08 -07:00
Natalie Weizenbaum
e85d9a7afc Fix automated migrator errors
This gets the project analyzer-clean, but the tests are still failing.
2021-04-14 17:15:08 -07:00
Natalie Weizenbaum
81d952dc7d Automated null-safety migration 2021-04-14 17:15:08 -07:00
Jennifer Thakar
dfbdae0d71 Prepare for null-safety migration 2021-04-14 17:15:08 -07:00
Natalie Weizenbaum
8fdb281e83 Make the first parameter to ImportCache() named, not mandatory
It was always valid to pass in `null`, this just makes it more clear.
2021-04-14 17:15:08 -07:00
Natalie Weizenbaum
984e76ef77 Remove type parameters from recursive AST visitors 2021-04-14 17:15:08 -07:00
Natalie Weizenbaum
21e7ec19dc Split Declaration's constructor into two
This doesn't explicitly help null-safety, but it makes the
relationship between `Declaration.value` and `Declaration.children`
more obvious.
2021-04-14 17:15:03 -07:00
Natalie Weizenbaum
ca3c6f5ccc Refactor how style rules interact with at-root
This is more friendly to null-safe code, since we no longer rely on
`_inStyleRule` implying that `_styleRule != null`.
2021-04-12 17:31:11 -07:00
Natalie Weizenbaum
5d0ad6957b Split IfClause into ElseClause
This allows us to be statically explicit about when the expression
does or doesn't exist.
2021-04-12 17:31:11 -07:00
Natalie Weizenbaum
3fa2b1d98a Fix hints and lints 2021-04-12 17:31:11 -07:00
Jennifer Thakar
247cb3d816 Update dependencies to null-safe versions
This also replaces package_resolver with package_config, since
package_resolver is archived and is incompatible with null-safe Dart
packages.
2021-04-12 17:31:09 -07:00
Awjin Ahn
ad4a1692a8
Adds RenderOptions to the context of custom functions. (#1236) 2021-02-18 13:48:47 -08:00
Awjin Ahn
4ea9fff2bb
Let last !default value of @forward...with be commaless. (#1226)
This advances the scanner to the next line even if the !default
identifier is not followed by a comma.
2021-02-04 14:18:19 -08:00
Awjin Ahn
831e5e903e
Formatted alerts (#35) 2021-02-03 18:31:27 -08:00
Natalie Weizenbaum
2682992bd4
Split SassNumber into separate subclasses based on units (#1221)
This allows us to use more efficient implementations in the common
case where numbers don't have complex units.

See #113
2021-02-02 17:37:56 -08:00
Mary
058cf0e4df
Fix fuzzyAssertRange, RangeError takes ints as min/max 2021-01-29 13:34:31 -05:00
Natalie Weizenbaum
934bdd556a
Set RangeError.start and .end for color range checks (#1215)
This is useful for sass/dart-sass-embedded#32 because it makes the
range checks easier to deconstruct and reconstruct into useful
embedded error messages.
2021-01-27 15:50:02 -08:00
Natalie Weizenbaum
474956d9a8
Merge branch 'master' into node-api-bugs 2021-01-19 18:38:41 -08:00
Christophe Coevoet
f0720f204d
Implement proper handling of units in for loops (#1200)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2021-01-19 18:37:41 -08:00
Natalie Weizenbaum
072c5252ca Wrap fiber.yield() calls in runZoned()
This resets the current zone after the fiber returns, where otherwise
it could end up set to a different zone entirely, since Dart's Zone
API is unaware of fibers.

Closes #1204
2021-01-15 16:14:35 -08:00
Natalie Weizenbaum
f93feaf592 Don't try to cast an error to JsError
Dart's runtime understanding of what a "JsError" is isn't sufficient
to make sense of everything that might be thrown by, for example, a
custom function with an error.
2021-01-15 16:14:20 -08:00
Natalie Weizenbaum
66cb55c76f
Avoid throw/catch in Number.== (#1188)
Throwing and catching exceptions is expensive. Testing this on one
user's number-heavy codebase resulted in a 2x speed improvement.
2021-01-11 13:41:37 -08:00
Natalie Weizenbaum
d37212b3bb Use 0xffffffff as the fallback error ID
See sass/embedded-protocol#45
2021-01-06 16:31:45 -08:00
Natalie Weizenbaum
01231e2f4c
Print the values of deprecated numbers passed to color functions (#1184)
See #1174
2021-01-06 15:17:53 -08:00
Natalie Weizenbaum
f24a2b9ca4
Avoid permissions errors in _realCasePath. (#1181)
This catches permissions errors and treats them as indicating that the
path component we have so far is canonical. This also improves the
efficiency of case matching by caching results for higher directories.
2021-01-06 12:49:45 -08:00
Sam Rawlins
006e6aa62f
Remove unnecessary imports (#1177)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
2020-12-30 14:57:50 -08:00
Natalie Weizenbaum
bae2968757 Deprecate incorrect HSL units
Partially addresses #1174
2020-12-29 13:26:54 -08:00
Natalie Weizenbaum
f9a9373547 Print the LHS first in incompatible unit errors
Closes #766
2020-12-28 18:06:59 -08:00
Natalie Weizenbaum
d532f015f6 Improve error reporting for incompatible units
The new messages more consistently include argument names and actual
values. Errors about mixed unitless and unitful numbers are now more
consistent.
2020-12-28 17:58:55 -08:00
Natalie Weizenbaum
7ba7351148 Mark deprecation warnings as such 2020-12-28 14:44:00 -08:00
Natalie Weizenbaum
02c92aa7cd
Add support for clamp() as a special math function (#1168)
Closes #1146
See sass/sass#2860
2020-12-28 13:42:04 -08:00
Natalie Weizenbaum
bf623752fb
Avoid always downcasing file paths on Windows (#1172)
Closes #1169
2020-12-23 18:07:20 -08:00
Natalie Weizenbaum
3130888661
Delimit messages using varints, as per sass/embedded-protocol#38 (#23)
See sass/embedded-protocol#37
2020-12-22 16:06:16 -08:00
Sam Rawlins
5aeef4ce81
Remove unused dart:async imports (#1160) 2020-12-09 14:20:51 -08:00
Natalie Weizenbaum
a13f7be81b
Apply the change in #1139 to the asynchronous source file (#1150) 2020-11-19 17:44:36 -08:00
Jennifer Thakar
4f1f5c9de8
Fix for importers that return null in load (#1139) 2020-11-10 09:44:37 -08:00
Natalie Weizenbaum
c0e6ba1b07
Fix a buggy interaction between @at-root and @keyframes (#1135) 2020-11-05 12:55:11 -08:00
Natalie Weizenbaum
939dca8e38
Support generalized @supports conditions (#1134)
Closes #894
See sass/sass#2780
2020-11-04 16:10:37 -08:00
Natalie Weizenbaum
f798aae0af
Reformat (#1133) 2020-11-03 16:03:08 -08:00
Natalie Weizenbaum
093ff58673 Merge branch 'master' into feature.hwb 2020-10-28 16:22:18 -07:00
Natalie Weizenbaum
290e55c2f1
Trim extends at the compound selector level (#1124)
This reverts a portion of #460 (15202c4). It turns out that trimming
compound selector extends allows us to avoid exponential behavior in
certain recursive @extend cases.

See sass/dart-sass#1109
2020-10-28 15:11:22 -07:00
Natalie Weizenbaum
a9a3946fb4
Use node_interop rather than manually declaring Node APIs (#1127) 2020-10-28 15:00:05 -07:00
Natalie Weizenbaum
300197caf9
Don't crash when using Infinity or NaN as a key in a map (#1073)
Closes #3126
2020-10-27 16:38:47 -07:00
Natalie Weizenbaum
c4f95d4310
Fix the argument name for meta.load-css() (#1072)
Closes #1054
2020-10-27 15:54:14 -07:00
Natalie Weizenbaum
197c6dbbde
Emit a proper parse error for = with no RHS in a function (#1071)
Closes #1050
2020-10-27 15:47:48 -07:00
Jennifer Thakar
6c679e13d4
Support HWB in adjust, change, and scale (#1111)
This adds `$whiteness` and `$blackness` parameters to the `adjust`,
`change`, and `scale` functions in the color module.

In doing so, I generalized the logic for all three functions into a
single `_updateComponents` helper since they all shared a lot of similar
logic for validating their parameters.
2020-10-14 19:45:35 -07:00
Natalie Weizenbaum
7ba5128423
Add color.whiteness() and color.blackness() functions (#1110)
See sass/sass#2834
See #1089
2020-10-14 16:15:46 -07:00
Natalie Weizenbaum
b0f213c22f Merge remote-tracking branch 'origin/master' into feature.hwb 2020-10-09 17:29:47 -07:00
Natalie Weizenbaum
4bc49044c4
Add a missing word
Co-authored-by: Awjin Ahn <awjin@google.com>
2020-10-07 15:18:00 -07:00
Natalie Weizenbaum
f981227cc0
Merge branch 'master' into fix-type-check 2020-10-07 15:07:12 -07:00
Natalie Weizenbaum
1ceaec71ff Fix custom property parsing in plain CSS
Closes #1104
2020-10-07 14:49:16 -07:00
Natalie Weizenbaum
c14cb73b08
Merge branch 'master' into feature.nested-maps 2020-10-05 17:59:59 -07:00
Natalie Weizenbaum
ec0bab5538
Fix a bug with nested properties beneath Sass-syntax custom props (#1096)
Closes #1095
2020-10-05 17:58:53 -07:00
Natalie Weizenbaum
2198aa7dab
Merge branch 'master' into feature.nested-maps 2020-10-05 17:31:41 -07:00
Michael R Fairhurst
82b2779d5c
Remove unused dart:async imports (#1097)
* Remove unused dart:async imports

Since Dart 2.1, Future and Stream have been exported from dart:core

* Run grinder
2020-10-05 09:35:03 -07:00
Natalie Weizenbaum
d3691d44f0
Add a color.hwb() function (#1092)
See sass/sass#2834
See #1089
2020-09-23 11:45:31 -07:00
Jennifer Thakar
56d979d04d
Add a map.deep-remove() function (#1091) 2020-09-22 16:11:48 -07:00
Awjin Ahn
45703ab597
Adds nested map support to map-merge. (#1083) 2020-09-18 12:18:27 -07:00
Natalie Weizenbaum
f843f96bc2
Produce a better error for positional arguments after named (#1087)
Closes #1086
2020-09-17 17:50:19 -07:00
Natalie Weizenbaum
1918674295
Support HWB colors in SassColor (#1085)
See sass/sass#2835
2020-09-17 16:18:12 -07:00
Awjin Ahn
5b7471664d
Add a map.set() function (#1078) 2020-09-16 15:47:35 -07:00
Jennifer Thakar
f5e3a5a669
Add support for nested maps to has-key (#1075) 2020-09-16 14:41:23 -07:00
Jennifer Thakar
6b66241e95
Add support for nested maps to map-get (#1076) 2020-09-16 13:23:52 -07:00
Natalie Weizenbaum
028b2f6a01 Add a map.deep-merge() function (#1077) (#1080)
This also adds a Value.tryMap() function, which was useful for
implementing this and may be more generally useful to users as well.

See sass/sass#2836
See sass/sass-spec#1560
2020-09-15 16:25:49 -07:00
Natalie Weizenbaum
015a76cf0b Revert "Add a map.deep-merge() function (#1077) (#1080)"
This reverts commit 315e86b442.

Once again, this was supposed to go on feature.nested-maps.
2020-09-15 16:24:53 -07:00
Natalie Weizenbaum
315e86b442
Add a map.deep-merge() function (#1077) (#1080)
This also adds a Value.tryMap() function, which was useful for
implementing this and may be more generally useful to users as well.

See sass/sass#2836
See sass/sass-spec#1560
2020-09-15 16:23:01 -07:00
Natalie Weizenbaum
9503b57ac5 Revert "Add a map.deep-merge() function (#1077)"
This reverts commit bc7216a441.

This was intended to land on a feature branch, not on master.
2020-09-15 15:17:55 -07:00
Natalie Weizenbaum
bc7216a441
Add a map.deep-merge() function (#1077)
This also adds a Value.tryMap() function, which was useful for
implementing this and may be more generally useful to users as well.

See sass/sass#2836
See sass/sass-spec#1560
2020-09-15 13:03:38 -07:00
Natalie Weizenbaum
a06295426d
Throw a proper error when the same built-in module is @used twice (#1070)
Closes #1047
2020-09-04 12:26:29 -07:00
Natalie Weizenbaum
1dff9a7ce4
Don't crash when writing Infinity in JS mode (#1069)
Closes #1031
2020-09-04 12:25:42 -07:00
Natalie Weizenbaum
4c0bc7f4f5
Throw an error if the first error to selector.nest() contains & (#1068)
Closes #966
2020-09-03 16:00:14 -07:00
Awjin Ahn
e302719e15
Update error handling to be asymmetric. (#18)
(As per the protocol spec)
2020-08-26 14:10:13 -07:00
Anthon Pang
330d93c2c1
Rename listIsSuperslector (#1062) 2020-08-24 09:46:26 -07:00
Natalie Weizenbaum
9f640625e9
Improve the error messages for syntax errors (#1055)
* Produce a useful error for "@else i<EOF>"

* Produce a useful error for out-of-range hex escapes

Closes #1029, #1049, #1030
2020-08-10 13:55:13 -07:00
Jennifer Thakar
9375ada8e6
Fix a selector parsing bug in indented syntax (#1005)
Fixes #1002.

In the indented syntax, a selector list may continue onto another line
if the previous line ends with a comma. Previously, if there was a
comment after the comma, it wouldn't be recognized and the selector
would be broken in two (with the first selector having no properties).

This fixes the parser to ignore comments when looking for the comma at
the end of a line.

Also disables the formatting check to work around dart-lang/dart_style#940.
2020-08-06 15:43:16 -07:00
Jennifer Thakar
6565b45a6c
Fix a null pointer bug (#1041)
Fixes #1038.
2020-07-06 15:35:09 -07:00
Jennifer Thakar
7933e9e602
Replace use of deprecated mapMap with map literals (#1034) 2020-06-22 13:35:28 -07:00
Jennifer Thakar
7d6dae02a4
Always use absolute URLs in stdout source maps (#1021)
Fixes #1020.
2020-06-04 17:03:06 -07:00
Jennifer Thakar
fba0ea37a1
Properly handle escaped @else (#1014)
Fixes #1011.

This also fixes a bug where `@else` was parsed case-insensitively
(unlike all other Sass at-rules, which must be lowercase).
2020-05-28 11:48:24 -07:00
Jennifer Thakar
d155f3518e
Fix lints (#1010) 2020-05-21 13:48:01 -07:00
Natalie Weizenbaum
93dcf994d5
Update outdated docs for ImportCache.importCanonical(). (#982) 2020-05-13 12:47:52 -07:00
awjin
21a1c58b20 Don't read file if Node importer returns file and contents.
Instead, use `contents` with `file` as the canonical url.

Closes https://github.com/sass/dart-sass/issues/975.
2020-04-24 17:38:30 -07:00
Jennifer Thakar
7160b6426d
Add missing constants to JS API (#990)
Fixes #977.
2020-04-24 16:11:46 -07:00
Sam Rawlins
da6b2c5d01
Remove two unused constructors named '_none' (#979) 2020-04-23 12:24:59 -07:00
Natalie Weizenbaum
83ec64a1f2
Work around dart-lang/sdk#41259 (#984) 2020-04-21 16:03:58 -07:00
Natalie Weizenbaum
bf35513a4c
Avoid adding duplicate modules when importing forwarded stylesheets (#973)
Avoid adding duplicate modules when importing forwarded stylesheets

In Google stylesheets that imported import-only stylesheets with many
forwards many of times, we were seeing Environment._globalModules grow
large enough that variable accesses were a problem. This addresses
that in several ways:

* Forwarded modules are now ignored if the module is already being
  forwarded.

* Module equality is more intelligent, so that shadowed and forwarded
  modules can be effectively de-duplicated.

* If a module would be fully shadowed by a later import *and* that
  module has no CSS, we no longer add an empty ShadowedModule to the
  module list.
2020-03-24 15:31:06 -07:00
georgpukk
4d78316cb7
Fix a check that prevents compiling .css files to themselves (#968)
Co-Authored-By: Natalie Weizenbaum <nweiz@google.com>
2020-03-11 14:48:00 -07:00
Natalie Weizenbaum
cb8a048e58
Refactor Extender._extendOrReplace() (#965)
This combines all targets into a single extender invocation, which is
more efficient and allows it to more aggressively do redundant
selector elimination.
2020-02-28 15:48:36 -08:00
Natalie Weizenbaum
116165f76e Don't do a bunch of useless initial recanonicalization 2020-02-24 20:18:03 -08:00
Natalie Weizenbaum
a333059e71 Keep recompiling downstream dependencies after an error in --watch
Prior to this, the watcher handled all the logic around recompiling
stylesheets if an upstream file was deleted or added in a way that
could affect their import resolution. This left a gap where the
stylesheet graph wouldn't be aware that a newly-added file had become
upstream dependency of an existing downstream file, leading to
recompilation failures.

This commit fixes that by moving all that logic into the stylesheet
graph. The graph now has full and sole responsibility for providing a
consistent view of which stylesheets depend on one another even as the
shape of the graph changes, and the watcher is just a client of that
logic.

Closes #550
2020-02-24 20:18:03 -08:00
Natalie Weizenbaum
6d388248b6
Eagerly initialize Environment._globalModules (#952)
We had been lazily initializing this to be more efficient when no
global modules were used, but this meant that the object wasn't shared
with closures created for mixins and functions that were created when
it was still `null`, so later imported forwards weren't visible to
those members.
2020-02-13 15:23:53 -08:00
Natalie Weizenbaum
0a2142dc86
Don't include leading underscores in implicit namespaces (#955)
Closes #934
See sass/sass#2800
2020-02-12 12:52:53 -08:00
Natalie Weizenbaum
3e47570847
Properly check for double-forwarded functions and mixins (#951)
See #946
See sass/sass#2820
2020-02-10 16:30:00 -08:00
Natalie Weizenbaum
718cfdd6e3
Fix a bug where the wrong module was used for identity comparisons (#949) 2020-02-07 17:03:05 -08:00
Natalie Weizenbaum
67c4e1bdea
Don't throw conflict errors for identical members (#947)
See sass/sass#2820
Closes #946
2020-02-07 15:17:05 -08:00
Natalie Weizenbaum
fa1ddd28ad Add a separate Environment method to create dummy import modules
This avoids triggering `assert(!atRoot)` for nested environments,
while still having that precaution for normal `toModule()` calls.
2020-02-07 01:00:41 -08:00
Natalie Weizenbaum
77a58b34b6 Never return a null expression node when source maps are enabled 2020-02-07 01:00:41 -08:00
Natalie Weizenbaum
a95c5b8ccb Do variable index adjustments when accessing variables, not nodes
Doing this for variable *nodes* was breaking in extremely specific
circumstances:

* A null node is passed into setVariable() and, if source maps are
  enabled, recorded in _variableNodes.

* Later on, getVariableNode() is called for that variable. Because
  that variable's node is null, it calls
  _getVariableNodeFromGlobalModule() even though the variable is
  actually defined.

* _getVariableNodeFromGlobalModule() sets _lastVariableIndex to 0 on
  the assumption that the variable is undefined, which turns out to be
  incorrect in this specific case.

The next commit will fix the issue where a null node can be passed
into setVariable() when source maps are enabled, but it makes more
sense to assign the variable index to 0 in the variable access anyway,
since it happens first and isn't skipped when source maps are
disabled.
2020-02-07 00:51:46 -08:00
Natalie Weizenbaum
5709d90aaa Rename Environment.global to Environment.forImport
The previous name was misleading, since the environment could exist in
a nested context and thus contain local members.
2020-02-06 01:54:55 -08:00
Natalie Weizenbaum
6234489eaa
Explicitly set the JS class names for SassNull and SassBoolean (#941)
For whatever reason the default name seems to have changed.
2020-01-24 15:51:50 -08:00
Natalie Weizenbaum
5450c1c07b
Use cli_pkg to build and release executables (#924) 2020-01-24 13:05:04 -08:00
Natalie Weizenbaum
eeeac1d689
Give JavaScript value objects useful constructor.name values (#936)
Closes #810
2020-01-17 14:46:10 -08:00
awjin
4c0c6b48e4 Merge branch 'master' into math-functions 2020-01-16 14:55:40 -08:00
Natalie Weizenbaum
e4db19be3f Resynchronize 2020-01-15 16:21:07 -08:00
Natalie Weizenbaum
aa18e65f57 Code review 2020-01-15 15:55:55 -08:00
Awjin Ahn
75cab86448 Add trigonometric math functions. (#921)
See https://github.com/sass/sass-spec/pull/1504
2020-01-15 14:44:13 -08:00
Awjin Ahn
3cbaec11b2 Add exponential math functions. (#909) 2020-01-15 14:44:13 -08:00
awjin
d487d761bd Revert "Revert "Add built-in variables e and pi. (#907)""
This reverts commit 3c64addbf3.
2020-01-15 14:44:13 -08:00
awjin
5f72acb14d Revert "Revert "Adds built-in clamp() and hypot() (#906)""
This reverts commit 76280409bd.
2020-01-15 14:44:13 -08:00
Natalie Weizenbaum
d67f341a17 Indicate the original configuration location for multi-config errors 2020-01-11 00:12:38 -08:00
Natalie Weizenbaum
c2baede4db Throw multi-span exceptions for argument errors 2020-01-10 23:24:23 -08:00
Natalie Weizenbaum
0c1370ce25 Allow errors to refer to multiple source spans at once
This makes error messages for issues like configuring a module after
it's loaded much clearer.
2020-01-10 22:31:48 -08:00
Natalie Weizenbaum
ca63b1ba7d
Don't try to resolve relative Node importer URLs for source maps (#923)
* Don't try to resolve relative Node importer URLs for source maps

Closes #922

* Reformat
2020-01-09 13:14:44 -08:00
Lasse R.H. Nielsen
31c09606b9 Avoid depending on iterator.current != null. (#877)
With the NNBD change to Dart, it's no longer safe to rely on an iterator returning `null` when it has hit the end (or before calling `moveNext` the first time). For non-nullable element types, it will have to throw instead.

This PR rewrites code that currently rely on a `null` value to recognize the end of an iterator.
2020-01-07 13:58:48 -08:00
Jennifer Thakar
bfdf4b35a4
Fix import-only files for Node importers (#919) 2020-01-03 15:41:12 -08:00
Jennifer Thakar
79d9a73474
Cache separate canonical URLs for @use and @import (#908)
Fixes #899.

The cache for canonical URLs is now keyed on *both* the rule URL and
whether that URL was canonicalized for an `@import` rule.
2020-01-02 15:25:02 -08:00
Natalie Weizenbaum
92a28feb25
Replace whitelist/blacklist with safelist/blocklist (#917)
Inspired by https://twitter.com/amlyhamm/status/1202684742069604353.
2020-01-02 14:53:39 -08:00
Jennifer Thakar
76280409bd Revert "Adds built-in clamp() and hypot() (#906)"
This reverts commit 24f84e2c88.
2020-01-02 13:45:51 -08:00
Jennifer Thakar
3c64addbf3 Revert "Add built-in variables e and pi. (#907)"
This reverts commit 2cb69e70ab.
2020-01-02 13:45:49 -08:00
Awjin Ahn
2cb69e70ab
Add built-in variables e and pi. (#907) 2019-12-26 16:31:33 -08:00
Awjin Ahn
24f84e2c88
Adds built-in clamp() and hypot() (#906) 2019-12-26 12:40:08 -08:00
Awjin Ahn
0cddc095b9
Support latest protocol updates (#11)
* Remove support for InboundMessage.FunctionCallRequest

Context: https://github.com/sass/embedded-protocol/issues/28

* Remove support for CanonicalizeResponse.file

Context: https://github.com/sass/embedded-protocol/issues/25

* Stub CompileRequest.Importer.fileImporterId support
2019-12-23 15:43:16 -08:00
Natalie Weizenbaum
46be33e030 Merge branch 'master' of github.com:sass/dart-sass into forward-with 2019-12-19 16:10:51 -08:00
Natalie Weizenbaum
64cc529421 Reformat 2019-12-18 17:00:19 -08:00
Natalie Weizenbaum
ec3d0ddc19 Fix new pedantic lints 2019-12-18 15:46:36 -08:00
Natalie Weizenbaum
e35b51135b Code review 2019-12-17 15:26:43 -08:00
Natalie Weizenbaum
de3f3208e9 Support @forward ... with
See sass/sass#2744
Closes #846
2019-11-27 16:03:43 -08:00
Natalie Weizenbaum
af648bfa7c Drop Configuration.clone()
There was no reason not to use the original configuration.
2019-11-27 13:42:43 -08:00
Jennifer Thakar
8270dc1664
Support configuring modules through imports (#885)
Fixes #882

See sass/sass-spec#1497
2019-11-26 09:46:51 -08:00
Natalie Weizenbaum
15be59be31
Make SassFormatException implement SourceSpanFormatException (#891) 2019-11-25 18:54:45 -08:00
Natalie Weizenbaum
9635a523b7
Merge pull request #890 from sass/import-forward-twice
Fix some @import edge cases
2019-11-21 11:42:45 -08:00
Natalie Weizenbaum
731bd441ca Don't produce name conflict errors due to imports
Closes #888
2019-11-20 16:25:48 -08:00
Natalie Weizenbaum
3ec2f3faaa
Fix a documentation typo (#889) 2019-11-20 16:25:37 -08:00
Natalie Weizenbaum
aa76c8ab3b Always create scopes for nested imports 2019-11-20 16:21:03 -08:00
Natalie Weizenbaum
0d782fbccf
Fix inline comments in the indented syntax (#881)
Closes #880
2019-11-15 15:45:11 -08:00
Awjin Ahn
07b5c84b7d
Fix arity in overloaded function argument error (#883)
When overloaded functions receive an incorrect number of positional
arguments, determine which overload has the most similar number of
arguments, and then correctly display that number in the error.

Closes #520
sass/sass-spec#1496
2019-11-15 14:26:11 -08:00
Awjin Ahn
3d1dab3563 Print call-site for @errors in mixins and functions (#878)
For any @errors encountered in mixins or functions, use the call-site
(instead of the @error rule) as the span printed in the error message.

Closes #474
See sass/sass-spec#1494
2019-11-13 17:56:35 -08:00
Natalie Weizenbaum
03805ce1ce
Add support for first-class function value types (#10) 2019-11-11 13:36:13 -08:00
Natalie Weizenbaum
6b34ffd7f3
Add the ability to invoke functions (#9)
This doesn't yet support first-class function values.
2019-11-08 15:25:42 -08:00
Natalie Weizenbaum
95bb3aceb6
Add support for importers (#8) 2019-11-07 16:03:47 -08:00
Nate Bosch
7b0faec321 Migrate to stream_transform extension methods
The non-extension implementation will be removed in the next version.

Bump the min SDK to 2.6.0 to reflect the fact that extension methods are
used.
2019-11-06 14:47:24 -08:00
Natalie Weizenbaum
20978e0320 Fix new strict inference hints from Dart 2.6 2019-11-06 14:47:24 -08:00
Natalie Weizenbaum
ec05600af2
Emit LogEvents (#6) 2019-11-05 13:51:08 -08:00
Natalie Weizenbaum
3de78be2f0
Plug in the actual Sass compiler (#5)
This now supports real CompileRequest and CompileResponses, although
it's missing features like importers, custom functions, and source
maps.
2019-11-04 19:50:50 -08:00
Natalie Weizenbaum
44059573bb
Watch files through @forward rules (#871)
Closes #870
2019-11-04 13:32:27 -08:00
Natalie Weizenbaum
7489d5796d Add a very basic protocol dispatcher and a few tests
Currently this doesn't actually invoke the compiler, it just always
returns the expanded output for "a {b: c}".
2019-11-01 19:02:12 -07:00
Natalie Weizenbaum
be4ca60045 Propagate selector source specificity between modules
Closes #866
2019-10-30 15:11:25 -07:00
Natalie Weizenbaum
df5f3af4e9 Remove some unused specificity calculations 2019-10-30 14:23:55 -07:00
Natalie Weizenbaum
3392db0074
Don't compile .css files in directories to themselves (#862)
This also adds support for compiling .css files in directories *at
all*, which had previously only worked in --watch mode.

Closes #853
2019-10-29 23:48:21 +00:00
Natalie Weizenbaum
be35dbb7cc
Add a length-delimited StreamChannelTransformer (#1)
This implements the packet scheme that the embedded protocol uses when
communicating over stdin and stdout.
2019-10-29 21:05:18 +00:00
Natalie Weizenbaum
1b17ab76cf
Reset the forwarded config to empty for @use and meta.load-module() (#855)
In #827 I made configuration never be null, but this turns out to be
overkill: we still need a way for _loadModule() and _execute() to
distinguish between "use the existing configuration" (for @forward)
and "use no configuration" (for an unconfigured @use or
meta.load-module()). We now use null as a sentinel value there, while
still ensuring that _configuration is non-nullable.

Closes #854
2019-10-22 01:35:11 +01:00
Natalie Weizenbaum
73de08b817
Only generate and update selectors, not rules, in Extender (#856)
We switched to *updating* selectors a while ago so that cloned rules
would continue to see updates in their selectors, but we were still
generating and tracking rules in the Extender. This caused skew
between what rules the extender knew about and what rules actually
existed in situations where rules were copied (such as when resolving
nested media queries).

There's no principled reason the extender needs to know about style
rules at all, so now it just tracks modifiable wrappers of selectors.
These are re-used even when style rules are cloned, so they're safe
from the skew problem.

Closes #843
2019-10-21 21:07:51 +01:00
Natalie Weizenbaum
6b8c168779
Improve error messages for color functions that aren't in sass:color (#844) 2019-10-14 17:56:13 -07:00
Natalie Weizenbaum
e68592f8f3
Allow saturate() in plain CSS files (#845)
Closes #840
2019-10-14 11:47:16 -07:00
XhmikosR
a95d61e886 Typo fixes (#842) 2019-10-10 15:33:36 -07:00
Jennifer Thakar
c663995f50
Only error for directly configured core modules (#839)
Fixes #838.
2019-10-10 14:33:54 -07:00
Natalie Weizenbaum
97203f1527 Merge branch 'feature.use' 2019-10-01 14:26:32 -07:00
Natalie Weizenbaum
fa3c657b56
Support multiple global uses in one file (#833)
Closes #832
2019-09-27 21:36:37 +01:00
Natalie Weizenbaum
7d3440698f
Remove adjust-hue() from sass:color (#828)
See sass/sass#2740
2019-09-27 21:27:26 +01:00
Natalie Weizenbaum
75305a1d21
Always use a non-null map for _EvaluateVisitor._configuration (#827)
We had been using null to represent an empty configuration, but that
caused problems when an empty map snuck its way in as well. Now we
always use maps, with a const empty map for the common case.

See sass/sass#2744
2019-09-27 21:19:24 +01:00
Natalie Weizenbaum
93a3a6f9f3 Merge branch 'master' into feature.use 2019-09-24 17:20:39 +01:00
Jennifer Thakar
553cf9a6d5 Fix bugs in RecursiveStatementVisitor (#824)
`AtRootRule.query` and `Declaration.value` can be null, so this should be checked before passing them on to `visitInterpolation` and `visitExpression`.
2019-09-23 07:33:28 -07:00
Natalie Weizenbaum
d901bcb00c
Properly handle some CSS identifier edge cases (#816)
See sass/sass#2738
Closes #815
2019-09-06 16:54:54 -07:00
Natalie Weizenbaum
aea990d4fc
Properly watch .css files for changes (#814)
Closes #806
2019-09-03 16:42:21 -07:00
Natalie Weizenbaum
4ccddf8b13
Dash-normalize user-defined functions (#813)
Closes #811
2019-09-03 16:00:07 -07:00
Natalie Weizenbaum
35880d171f
Check fs.existsSync() before running fs.statSync() (#812)
This produces non-negligible speed improvements for Node users with
lots of imports.
2019-09-03 13:26:57 -07:00
Natalie Weizenbaum
75c0452c1d Merge branch 'master' into feature.use 2019-09-02 13:58:21 -07:00
Natalie Weizenbaum
8dea51d410
Change variable syntax to namespace.$name (#803)
See sass/sass#2731
2019-08-29 15:31:03 -07:00
Natalie Weizenbaum
a89c67b563
Fix unquoted plain-CSS imports (#800)
Closes #799
2019-08-28 14:09:35 -07:00
Natalie Weizenbaum
fc8c987fc1
Fix a few @extend edge cases (#797) 2019-08-16 14:00:14 -07:00
Natalie Weizenbaum
0e5ed4a37d
Fix dash-insensitivity in get-function() (#795)
Closes #792
2019-08-14 12:20:47 -07:00
Natalie Weizenbaum
5349042994
Allow @use in the REPL (#784) 2019-07-30 00:51:54 +01:00
Natalie Weizenbaum
6775490251 Merge remote-tracking branch 'origin/master' into merge-master 2019-07-25 17:15:27 -07:00
Natalie Weizenbaum
d840b84b59 Clarify the error for the wrong number of positional arguments
Closes #776
2019-07-25 08:37:01 +01:00
Natalie Weizenbaum
d408a5994e Add a missing trailing "." to an error message
Closes #775
2019-07-25 08:37:01 +01:00
Natalie Weizenbaum
382af499e0 Avoid double "Error:" headers when reporting selector parse errors
Closes #774
2019-07-25 08:37:01 +01:00
Natalie Weizenbaum
44b542fcef Include argument names when reporting selector parse errors 2019-07-25 08:37:01 +01:00
Natalie Weizenbaum
8d5e3d9a67 Include argument names when reporting range errors
Closes #771
2019-07-25 08:37:00 +01:00
Natalie Weizenbaum
c971615fbf
Remove an unused Parser.scanWhitespace() method (#770)
Closes #767
2019-07-18 21:50:41 +01:00
Natalie Weizenbaum
e454647d27
Improve the error message for a global member conflict (#762) 2019-07-18 01:47:56 +01:00
Natalie Weizenbaum
0f8f7577a5 Don't create an intermediate stylesheet for @import if possible
We really only need this stylesheet when we're resolving imported
cross-module @extends, which doesn't come up very often.
2019-07-17 15:45:26 -07:00
Natalie Weizenbaum
c8770da29b Short-circuit combineCSS() if no upstream modules contain CSS 2019-07-17 15:45:00 -07:00
Natalie Weizenbaum
66c2c26a7e Use whereType() to avoid a cast 2019-07-17 15:45:00 -07:00
Natalie Weizenbaum
7b3a2adc12 Properly indicate the error location in the REPL
Previously, errors in variable assignment lines would be reported
incorrectly.
2019-07-17 15:45:00 -07:00
Natalie Weizenbaum
83cf390406 Delete a fixed TODO 2019-07-17 15:45:00 -07:00
Natalie Weizenbaum
c794abd858 Eagerly dash-normalize Sass identifiers
This avoids using maps and sets with custom equality, which are
moderately inefficient relative to built-in maps and sets on both Node
and the Dart VM. In order to make error messages continue to use the
original identifiers where possible, this updates some of them to rely
more heavily on their associated source spans for context.
2019-07-16 19:42:38 -07:00
Natalie Weizenbaum
437e04ea0b Merge remote-tracking branch 'origin/master' into feature.use 2019-07-16 18:49:15 -07:00
Natalie Weizenbaum
7f2055e775 Make colorsByName a normal map
There was no reason for this to be a normalized map, since color names
don't contain dashes or underscores.
2019-07-16 13:37:03 -07:00
Marcel Greter
d91e758889 Fix typo in silent comment error message (#761) 2019-07-16 00:44:32 +01:00
Natalie Weizenbaum
58e9e74b37 Use list comprehensions in *Evaluate._evaluateArguments
As well as being arguably more readable, the toList() method was
running a type check that was showing up as a minor bottleneck in JS
profiles.
2019-07-15 21:59:54 +01:00
Natalie Weizenbaum
a8e99e9152 Pass a dummy isValidKey callback to normalized map and set
The default implementation runs a type check, which was a performance
bottleneck when compiled to JS. There's no need for this type check in
practice, since we never pass a non-String value to the contains(),
containsKey(), or remove() methods (and if we do, it will throw a
TypeError in our tests).
2019-07-15 21:59:54 +01:00
Natalie Weizenbaum
0e47e03305
Fix at-rules in nested imports (#758)
Closes #755
2019-07-12 01:55:30 +01:00