Skip to content

Commit 44d6bb6

Browse files
authoredNov 1, 2022
Add full support for Media Queries 4 (#1822)
Closes #1728
1 parent 558640b commit 44d6bb6

File tree

5 files changed

+76
-42
lines changed

5 files changed

+76
-42
lines changed
 

‎CHANGELOG.md

+29-1
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,50 @@
1-
## 1.55.1
1+
## 1.56.0
2+
3+
* **Potentially breaking change:** To match the CSS spec, SassScript expressions
4+
beginning with `not` or `(` are no longer supported at the beginning of
5+
parenthesized sections of media queries. For example,
6+
7+
```scss
8+
@media (width >= 500px) and (not (grid))
9+
```
10+
11+
will now be emitted unchanged, instead of producing
12+
13+
```scss
14+
@media (width >= 500px) and (false)
15+
```
16+
17+
See [the Sass website](https://sass-lang.com/d/media-logic) for details.
218

319
* **Potentially breaking bug fix:** Angle units like `rad` or `turn` are now
420
properly converted to equivalent `deg` values for `hsl()`, `hsla()`,
521
`adjust-hue()`, `color.adjust()`, and `color.change()`.
622

23+
See [the Sass website](https://sass-lang.com/d/function-units#hue) for
24+
details.
25+
726
* Fix indentation for selectors that span multiple lines in a `@media` query.
827

928
* Emit a deprecation warning when passing `$alpha` values with units to
1029
`color.adjust()` or `color.change()`. This will be an error in Dart Sass
1130
2.0.0.
1231

32+
See [the Sass website](https://sass-lang.com/d/function-units#alpha) for
33+
details.
34+
1335
* Emit a deprecation warning when passing a `$weight` value with no units or
1436
with units other than `%` to `color.mix()`. This will be an error in Dart Sass
1537
2.0.0.
1638

39+
See [the Sass website](https://sass-lang.com/d/function-units#weight) for
40+
details.
41+
1742
* Emit a deprecation warning when passing `$n` values with units to `list.nth()`
1843
or `list.set-nth()`. This will be an error in Dart Sass 2.0.0.
1944

45+
See [the Sass website](https://sass-lang.com/d/function-units#index) for
46+
details.
47+
2048
* Improve existing deprecation warnings to wrap `/`-as-division suggestions in
2149
`calc()` expressions.
2250

‎lib/src/parse/stylesheet.dart

+40-38
Original file line numberDiff line numberDiff line change
@@ -3594,52 +3594,54 @@ abstract class StylesheetParser extends Parser {
35943594
buffer.writeCharCode($lparen);
35953595
whitespace();
35963596

3597-
var needsParenDeprecation = scanner.peekChar() == $lparen;
3598-
var needsNotDeprecation = matchesIdentifier("not");
3599-
3600-
var expression = _expressionUntilComparison();
3601-
if (needsParenDeprecation || needsNotDeprecation) {
3602-
logger.warn(
3603-
'Starting a @media query with "${needsParenDeprecation ? '(' : 'not'}" '
3604-
"is deprecated because it conflicts with official CSS syntax.\n"
3605-
"\n"
3606-
"To preserve existing behavior: #{$expression}\n"
3607-
'To migrate to new behavior: #{"$expression"}\n'
3608-
"\n"
3609-
"For details, see https://sass-lang.com/d/media-logic",
3610-
span: expression.span,
3611-
deprecation: true);
3612-
}
3613-
3614-
buffer.add(expression);
3615-
if (scanner.scanChar($colon)) {
3597+
if (scanner.peekChar() == $lparen) {
3598+
_mediaInParens(buffer);
36163599
whitespace();
3617-
buffer.writeCharCode($colon);
3618-
buffer.writeCharCode($space);
3619-
buffer.add(_expression());
3600+
if (scanIdentifier("and")) {
3601+
buffer.write(" and ");
3602+
expectWhitespace();
3603+
_mediaLogicSequence(buffer, "and");
3604+
} else if (scanIdentifier("or")) {
3605+
buffer.write(" or ");
3606+
expectWhitespace();
3607+
_mediaLogicSequence(buffer, "or");
3608+
}
3609+
} else if (scanIdentifier("not")) {
3610+
buffer.write("not ");
3611+
expectWhitespace();
3612+
_mediaOrInterp(buffer);
36203613
} else {
3621-
var next = scanner.peekChar();
3622-
if (next == $langle || next == $rangle || next == $equal) {
3623-
buffer.writeCharCode($space);
3624-
buffer.writeCharCode(scanner.readChar());
3625-
if ((next == $langle || next == $rangle) && scanner.scanChar($equal)) {
3626-
buffer.writeCharCode($equal);
3627-
}
3628-
buffer.writeCharCode($space);
3629-
3614+
buffer.add(_expressionUntilComparison());
3615+
if (scanner.scanChar($colon)) {
36303616
whitespace();
3631-
buffer.add(_expressionUntilComparison());
3632-
3633-
if ((next == $langle || next == $rangle) &&
3634-
// dart-lang/sdk#45356
3635-
scanner.scanChar(next!)) {
3617+
buffer.writeCharCode($colon);
3618+
buffer.writeCharCode($space);
3619+
buffer.add(_expression());
3620+
} else {
3621+
var next = scanner.peekChar();
3622+
if (next == $langle || next == $rangle || next == $equal) {
36363623
buffer.writeCharCode($space);
3637-
buffer.writeCharCode(next);
3638-
if (scanner.scanChar($equal)) buffer.writeCharCode($equal);
3624+
buffer.writeCharCode(scanner.readChar());
3625+
if ((next == $langle || next == $rangle) &&
3626+
scanner.scanChar($equal)) {
3627+
buffer.writeCharCode($equal);
3628+
}
36393629
buffer.writeCharCode($space);
36403630

36413631
whitespace();
36423632
buffer.add(_expressionUntilComparison());
3633+
3634+
if ((next == $langle || next == $rangle) &&
3635+
// dart-lang/sdk#45356
3636+
scanner.scanChar(next!)) {
3637+
buffer.writeCharCode($space);
3638+
buffer.writeCharCode(next);
3639+
if (scanner.scanChar($equal)) buffer.writeCharCode($equal);
3640+
buffer.writeCharCode($space);
3641+
3642+
whitespace();
3643+
buffer.add(_expressionUntilComparison());
3644+
}
36433645
}
36443646
}
36453647
}

‎pkg/sass_api/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 4.1.0
2+
3+
* No user-visible changes.
4+
15
## 4.0.0
26

37
### Dart API

‎pkg/sass_api/pubspec.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ name: sass_api
22
# Note: Every time we add a new Sass AST node, we need to bump the *major*
33
# version because it's a breaking change for anyone who's implementing the
44
# visitor interface(s).
5-
version: 4.0.0
5+
version: 4.1.0
66
description: Additional APIs for Dart Sass.
77
homepage: https://github.com/sass/dart-sass
88

99
environment:
1010
sdk: ">=2.17.0 <3.0.0"
1111

1212
dependencies:
13-
sass: 1.55.0
13+
sass: 1.56.0
1414

1515
dev_dependencies:
1616
dartdoc: ^5.0.0

‎pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: sass
2-
version: 1.55.1-dev
2+
version: 1.56.0
33
description: A Sass implementation in Dart.
44
homepage: https://github.com/sass/dart-sass
55

0 commit comments

Comments
 (0)
Please sign in to comment.