Skip to content

Commit

Permalink
Improve the error message for extending compound selectors. (#294)
Browse files Browse the repository at this point in the history
Closes #286
  • Loading branch information
nex3 committed Apr 14, 2018
1 parent 2e42c74 commit 6fd0f6d
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 11 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
* Properly parse `#{$var} -#{$var}` as two separate values in a list rather than
one value being subtracted from another.

* Improve the error message for extending compound selectors.

## 1.1.1

* Add a commit that was accidentally left out of 1.1.0.
Expand Down
2 changes: 1 addition & 1 deletion lib/src/parse/selector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class SelectorParser extends Parser {
SimpleSelector parseSimpleSelector() {
return wrapSpanFormatException(() {
var simple = _simpleSelector();
if (!scanner.isDone) scanner.error("expected selector.");
if (!scanner.isDone) scanner.error("unexpected token.");
return simple;
});
}
Expand Down
26 changes: 22 additions & 4 deletions lib/src/visitor/async_evaluate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -537,10 +537,28 @@ class _EvaluateVisitor
var targetText =
await _interpolationToValue(node.selector, warnForColor: true);

var target = _adjustParseError(
targetText.span,
() => new SimpleSelector.parse(targetText.value.trim(),
logger: _logger, allowParent: false));
var target = _adjustParseError(targetText.span, () {
try {
return new SimpleSelector.parse(targetText.value.trim(),
logger: _logger, allowParent: false);
} on SassFormatException catch (error) {
CompoundSelector compound;
try {
compound = new CompoundSelector.parse(targetText.value.trim(),
logger: _logger, allowParent: false);
} on SassFormatException {
throw error;
}

// If the selector was a compound selector but not a simple
// selector, emit a more explicit error.
throw new SassFormatException(
"compound selectors may longer be extended.\n"
"Consider `@extend ${compound.components.join(', ')}` instead.\n"
"See http://bit.ly/ExtendCompound for details.\n",
error.span);
}
});
_extender.addExtension(_styleRule.selector, target, node, _mediaQueries);
return null;
}
Expand Down
28 changes: 23 additions & 5 deletions lib/src/visitor/evaluate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// DO NOT EDIT. This file was generated from async_evaluate.dart.
// See tool/synchronize.dart for details.
//
// Checksum: 9b5790272f09f8932a01ef9bfa0fd4ebc6b75eaa
// Checksum: 3360e4065a1e1ceeabcaad34f5c09066e7d0c1d2

import 'dart:math' as math;

Expand Down Expand Up @@ -534,10 +534,28 @@ class _EvaluateVisitor

var targetText = _interpolationToValue(node.selector, warnForColor: true);

var target = _adjustParseError(
targetText.span,
() => new SimpleSelector.parse(targetText.value.trim(),
logger: _logger, allowParent: false));
var target = _adjustParseError(targetText.span, () {
try {
return new SimpleSelector.parse(targetText.value.trim(),
logger: _logger, allowParent: false);
} on SassFormatException catch (error) {
CompoundSelector compound;
try {
compound = new CompoundSelector.parse(targetText.value.trim(),
logger: _logger, allowParent: false);
} on SassFormatException {
throw error;
}

// If the selector was a compound selector but not a simple
// selector, emit a more explicit error.
throw new SassFormatException(
"compound selectors may longer be extended.\n"
"Consider `@extend ${compound.components.join(', ')}` instead.\n"
"See http://bit.ly/ExtendCompound for details.\n",
error.span);
}
});
_extender.addExtension(_styleRule.selector, target, node, _mediaQueries);
return null;
}
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: sass
version: 1.2.0-dev
version: 1.2.0
description: A Sass implementation in Dart.
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/sass/dart-sass
Expand Down

0 comments on commit 6fd0f6d

Please sign in to comment.