Skip to content

Commit

Permalink
Merge branch 'main' into browser
Browse files Browse the repository at this point in the history
* main:
  Deprecate duplicate !global and !default declarations (sass#1931)
  Fix the performance of selector span expansion (sass#1929)
  • Loading branch information
jgerigmeyer committed Apr 10, 2023
2 parents 38f1f5f + 283bdc0 commit 1dc4af3
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 20 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
## 1.62.0

* Deprecate the use of multiple `!global` or `!default` flags on the same
variable. This deprecation is named `duplicate-var-flags`.

## 1.61.0

* **Potentially breaking change:** Drop support for End-of-Life Node.js 12.

* Fix remaining cases for the performance regression introduced in 1.59.0.

### Embedded Sass

* The JS embedded host now loads files from the working directory when using the
Expand Down
5 changes: 5 additions & 0 deletions lib/src/deprecation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ enum Deprecation {
deprecatedIn: '1.56.0',
description: 'Passing invalid units to built-in functions.'),

duplicateVariableFlags('duplicate-var-flags',
deprecatedIn: '1.62.0',
description:
'Using !default or !global multiple times for one variable.'),

/// Deprecation for `@import` rules.
import.future('import', description: '@import rules.'),

Expand Down
32 changes: 16 additions & 16 deletions lib/src/interpolation_map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'dart:math' as math;

import 'package:charcode/charcode.dart';
import 'package:source_span/source_span.dart';
import 'package:string_scanner/string_scanner.dart';

import 'ast/sass.dart';
import 'util/character.dart';
Expand Down Expand Up @@ -125,21 +124,21 @@ class InterpolationMap {
/// comment before the expression, but since it's only used for error
/// reporting that's probably fine.
int _expandInterpolationSpanLeft(FileLocation start) {
var source = start.file.getText(0, start.offset);
var source = start.file.codeUnits;
var i = start.offset - 1;
while (true) {
var prev = source.codeUnitAt(i--);
while (i >= 0) {
var prev = source[i--];
if (prev == $lbrace) {
if (source.codeUnitAt(i) == $hash) break;
if (source[i] == $hash) break;
} else if (prev == $slash) {
var second = source.codeUnitAt(i--);
var second = source[i--];
if (second == $asterisk) {
while (true) {
var char = source.codeUnitAt(i--);
var char = source[i--];
if (char != $asterisk) continue;

do {
char = source.codeUnitAt(i--);
char = source[i--];
} while (char == $asterisk);
if (char == $slash) break;
}
Expand All @@ -153,28 +152,29 @@ class InterpolationMap {
/// Given the end of a [FileSpan] covering an interpolated expression, returns
/// the offset of the interpolation's closing `}`.
int _expandInterpolationSpanRight(FileLocation end) {
var scanner = StringScanner(end.file.getText(end.offset));
while (true) {
var next = scanner.readChar();
var source = end.file.codeUnits;
var i = end.offset;
while (i < source.length) {
var next = source[i++];
if (next == $rbrace) break;
if (next == $slash) {
var second = scanner.readChar();
var second = source[i++];
if (second == $slash) {
while (!isNewline(scanner.readChar())) {}
while (!isNewline(source[i++])) {}
} else if (second == $asterisk) {
while (true) {
var char = scanner.readChar();
var char = source[i++];
if (char != $asterisk) continue;

do {
char = scanner.readChar();
char = source[i++];
} while (char == $asterisk);
if (char == $slash) break;
}
}
}
}

return end.offset + scanner.position;
return i;
}
}
14 changes: 14 additions & 0 deletions lib/src/parse/stylesheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,25 @@ abstract class StylesheetParser extends Parser {
while (scanner.scanChar($exclamation)) {
var flag = identifier();
if (flag == 'default') {
if (guarded) {
logger.warnForDeprecation(
Deprecation.duplicateVariableFlags,
'!default should only be written once for each variable.\n'
'This will be an error in Dart Sass 2.0.0.',
span: scanner.spanFrom(flagStart));
}

guarded = true;
} else if (flag == 'global') {
if (namespace != null) {
error("!global isn't allowed for variables in other modules.",
scanner.spanFrom(flagStart));
} else if (global) {
logger.warnForDeprecation(
Deprecation.duplicateVariableFlags,
'!global should only be written once for each variable.\n'
'This will be an error in Dart Sass 2.0.0.',
span: scanner.spanFrom(flagStart));
}

global = true;
Expand Down
8 changes: 8 additions & 0 deletions pkg/sass_api/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## 6.3.0

* No user-visible changes.

## 6.2.0

* No user-visible changes.

## 6.1.0

* No user-visible changes.
Expand Down
4 changes: 2 additions & 2 deletions pkg/sass_api/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ name: sass_api
# Note: Every time we add a new Sass AST node, we need to bump the *major*
# version because it's a breaking change for anyone who's implementing the
# visitor interface(s).
version: 6.1.0
version: 6.3.0-dev
description: Additional APIs for Dart Sass.
homepage: https://github.com/sass/dart-sass

environment:
sdk: ">=2.17.0 <3.0.0"

dependencies:
sass: 1.60.0
sass: 1.62.0

dev_dependencies:
dartdoc: ^5.0.0
Expand Down
4 changes: 2 additions & 2 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: sass
version: 1.61.0-dev
version: 1.62.0-dev
description: A Sass implementation in Dart.
homepage: https://github.com/sass/dart-sass

Expand All @@ -23,7 +23,7 @@ dependencies:
path: ^1.8.0
pub_semver: ^2.0.0
source_maps: ^0.10.10
source_span: ^1.8.1
source_span: ^1.10.0
stack_trace: ^1.10.0
stream_transform: ^2.0.0
string_scanner: ^1.1.0
Expand Down

0 comments on commit 1dc4af3

Please sign in to comment.