Skip to content

Commit

Permalink
Merge pull request #528 from sass/dart-2-everywhere
Browse files Browse the repository at this point in the history
Enable support for Dart 2.1
  • Loading branch information
nex3 authored Nov 16, 2018
2 parents 0aca829 + 487e502 commit d4adea7
Show file tree
Hide file tree
Showing 183 changed files with 2,018 additions and 2,162 deletions.
13 changes: 4 additions & 9 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,20 @@
# Set the language to Ruby so that we can run sass-spec tests.
language: ruby

# TODO(nweiz): We're currently locked to Dart 2.0.0 and 2.0.0-dev.5.0 because
# 2.0.0-dev.6.0 removes the --preview-dart-2 flag, which we use because it's
# faster than Dart 2 mode (at least in 2.0.0). Re-enable tracking the latest
# stable and dev versions once a stable release is out where Dart 2 mode is
# verified to be faster than Dart 1 mode was in Dart 2.1.0.

env:
global:
- DART_CHANNEL=stable
- DART_VERSION=2.0.0
- DART_VERSION=latest
matrix:
# Language specs, defined in sass/sass-spec
- TASK=specs
- TASK=specs DART_CHANNEL=dev DART_VERSION=2.1.0-dev.5.0
- TASK=specs DART_CHANNEL=dev
- TASK=specs ASYNC=true

# Unit tests, defined in test/.
- TASK=tests
- TASK=tests DART_CHANNEL=dev DART_VERSION=2.1.0-dev.5.0
- TASK=tests DART_VERSION=2.0.0
- TASK=tests DART_CHANNEL=dev
- TASK=tests NODE_VERSION=stable

# Keep these up-to-date with the latest LTA Node releases. They next need to be
Expand Down
20 changes: 10 additions & 10 deletions lib/sass.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export 'src/visitor/serialize.dart' show OutputStyle;
///
/// Throws a [SassException] if conversion fails.
String compile(String path,
{bool color: false,
{bool color = false,
Logger logger,
Iterable<Importer> importers,
Iterable<String> loadPaths,
Expand All @@ -87,7 +87,7 @@ String compile(String path,
OutputStyle style,
void sourceMap(SingleMapping map)}) {
var result = c.compile(path,
logger: logger ?? new Logger.stderr(color: color),
logger: logger ?? Logger.stderr(color: color),
importers: importers,
loadPaths: loadPaths,
packageResolver: packageResolver,
Expand Down Expand Up @@ -156,7 +156,7 @@ String compile(String path,
/// Throws a [SassException] if conversion fails.
String compileString(String source,
{Syntax syntax,
bool color: false,
bool color = false,
Logger logger,
Iterable<Importer> importers,
SyncPackageResolver packageResolver,
Expand All @@ -166,10 +166,10 @@ String compileString(String source,
Importer importer,
url,
void sourceMap(SingleMapping map),
@Deprecated("Use syntax instead.") bool indented: false}) {
@Deprecated("Use syntax instead.") bool indented = false}) {
var result = c.compileString(source,
syntax: syntax ?? (indented ? Syntax.sass : Syntax.scss),
logger: logger ?? new Logger.stderr(color: color),
logger: logger ?? Logger.stderr(color: color),
importers: importers,
packageResolver: packageResolver,
loadPaths: loadPaths,
Expand All @@ -188,7 +188,7 @@ String compileString(String source,
/// synchronous [Importer]s. However, running asynchronously is also somewhat
/// slower, so [compile] should be preferred if possible.
Future<String> compileAsync(String path,
{bool color: false,
{bool color = false,
Logger logger,
Iterable<AsyncImporter> importers,
SyncPackageResolver packageResolver,
Expand All @@ -197,7 +197,7 @@ Future<String> compileAsync(String path,
OutputStyle style,
void sourceMap(SingleMapping map)}) async {
var result = await c.compileAsync(path,
logger: logger ?? new Logger.stderr(color: color),
logger: logger ?? Logger.stderr(color: color),
importers: importers,
loadPaths: loadPaths,
packageResolver: packageResolver,
Expand All @@ -215,7 +215,7 @@ Future<String> compileAsync(String path,
/// slower, so [compileString] should be preferred if possible.
Future<String> compileStringAsync(String source,
{Syntax syntax,
bool color: false,
bool color = false,
Logger logger,
Iterable<AsyncImporter> importers,
SyncPackageResolver packageResolver,
Expand All @@ -225,10 +225,10 @@ Future<String> compileStringAsync(String source,
AsyncImporter importer,
url,
void sourceMap(SingleMapping map),
@Deprecated("Use syntax instead.") bool indented: false}) async {
@Deprecated("Use syntax instead.") bool indented = false}) async {
var result = await c.compileStringAsync(source,
syntax: syntax ?? (indented ? Syntax.sass : Syntax.scss),
logger: logger ?? new Logger.stderr(color: color),
logger: logger ?? Logger.stderr(color: color),
importers: importers,
packageResolver: packageResolver,
loadPaths: loadPaths,
Expand Down
4 changes: 2 additions & 2 deletions lib/src/ast/css/at_rule.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ class CssAtRule extends CssParentNode {

final FileSpan span;

CssAtRule(this.name, this.span, {bool childless: false, this.value})
CssAtRule(this.name, this.span, {bool childless = false, this.value})
: isChildless = childless;

T accept<T>(CssVisitor<T> visitor) => visitor.visitAtRule(this);

CssAtRule copyWithoutChildren() =>
new CssAtRule(name, span, childless: isChildless, value: value);
CssAtRule(name, span, childless: isChildless, value: value);

void addChild(CssNode child) {
assert(!isChildless);
Expand Down
2 changes: 1 addition & 1 deletion lib/src/ast/css/import.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class CssImport extends CssNode {
final FileSpan span;

CssImport(this.url, this.span, {this.supports, Iterable<CssMediaQuery> media})
: media = media == null ? null : new List.unmodifiable(media);
: media = media == null ? null : List.unmodifiable(media);

T accept<T>(CssVisitor<T> visitor) => visitor.visitImport(this);
}
3 changes: 1 addition & 2 deletions lib/src/ast/css/keyframe_block.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,5 @@ class CssKeyframeBlock extends CssParentNode {

T accept<T>(CssVisitor<T> visitor) => visitor.visitKeyframeBlock(this);

CssKeyframeBlock copyWithoutChildren() =>
new CssKeyframeBlock(selector, span);
CssKeyframeBlock copyWithoutChildren() => CssKeyframeBlock(selector, span);
}
17 changes: 8 additions & 9 deletions lib/src/ast/css/media_query.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,17 @@ class CssMediaQuery {
///
/// Throws a [SassFormatException] if parsing fails.
static List<CssMediaQuery> parseList(String contents, {url, Logger logger}) =>
new MediaQueryParser(contents, url: url, logger: logger).parse();
MediaQueryParser(contents, url: url, logger: logger).parse();

/// Creates a media query specifies a type and, optionally, features.
CssMediaQuery(this.type, {this.modifier, Iterable<String> features})
: features =
features == null ? const [] : new List.unmodifiable(features);
: features = features == null ? const [] : List.unmodifiable(features);

/// Creates a media query that only specifies features.
CssMediaQuery.condition(Iterable<String> features)
: modifier = null,
type = null,
features = new List.unmodifiable(features);
features = List.unmodifiable(features);

/// Merges this with [other] to return a query that matches the intersection
/// of both inputs.
Expand All @@ -52,7 +51,7 @@ class CssMediaQuery {
var theirType = other.type?.toLowerCase();

if (ourType == null && theirType == null) {
return new MediaQuerySuccessfulMergeResult._(new CssMediaQuery.condition(
return MediaQuerySuccessfulMergeResult._(CssMediaQuery.condition(
this.features.toList()..addAll(other.features)));
}

Expand Down Expand Up @@ -129,7 +128,7 @@ class CssMediaQuery {
features = this.features.toList()..addAll(other.features);
}

return new MediaQuerySuccessfulMergeResult._(new CssMediaQuery(
return MediaQuerySuccessfulMergeResult._(CssMediaQuery(
type == ourType ? this.type : other.type,
modifier: modifier == ourModifier ? this.modifier : other.modifier,
features: features));
Expand All @@ -144,7 +143,7 @@ class CssMediaQuery {
int get hashCode => modifier.hashCode ^ type.hashCode ^ listHash(features);

String toString() {
var buffer = new StringBuffer();
var buffer = StringBuffer();
if (modifier != null) buffer.write("$modifier ");
if (type != null) {
buffer.write(type);
Expand All @@ -162,12 +161,12 @@ class CssMediaQuery {
abstract class MediaQueryMergeResult {
/// A singleton value indicating that there are no contexts that match both
/// input queries.
static const empty = const _SingletonCssMediaQueryMergeResult("empty");
static const empty = _SingletonCssMediaQueryMergeResult("empty");

/// A singleton value indicating that the contexts that match both input
/// queries can't be represented by a Level 3 media query.
static const unrepresentable =
const _SingletonCssMediaQueryMergeResult("unrepresentable");
_SingletonCssMediaQueryMergeResult("unrepresentable");
}

/// The subclass [MediaQueryMergeResult] that represents singleton enum values.
Expand Down
6 changes: 3 additions & 3 deletions lib/src/ast/css/media_rule.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ class CssMediaRule extends CssParentNode {
final FileSpan span;

CssMediaRule(Iterable<CssMediaQuery> queries, this.span)
: queries = new List.unmodifiable(queries) {
: queries = List.unmodifiable(queries) {
if (queries.isEmpty) {
throw new ArgumentError.value(queries, "queries", "may not be empty.");
throw ArgumentError.value(queries, "queries", "may not be empty.");
}
}

T accept<T>(CssVisitor<T> visitor) => visitor.visitMediaRule(this);

CssMediaRule copyWithoutChildren() => new CssMediaRule(queries, span);
CssMediaRule copyWithoutChildren() => CssMediaRule(queries, span);
}
4 changes: 2 additions & 2 deletions lib/src/ast/css/node.dart
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ abstract class CssNode extends AstNode {
/// Throws a [StateError] if [parent] is `null`.
void remove() {
if (_parent == null) {
throw new StateError("Can't remove a node without a parent.");
throw StateError("Can't remove a node without a parent.");
}

_parent._children.removeAt(_indexInParent);
Expand Down Expand Up @@ -98,7 +98,7 @@ abstract class CssParentNode extends CssNode {
/// for [this.children].
CssParentNode._(List<CssNode> children)
: _children = children,
children = new UnmodifiableListView<CssNode>(children);
children = UnmodifiableListView<CssNode>(children);

/// Returns a copy of [this] with an empty [children] list.
CssParentNode copyWithoutChildren();
Expand Down
2 changes: 1 addition & 1 deletion lib/src/ast/css/style_rule.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@ class CssStyleRule extends CssParentNode {
T accept<T>(CssVisitor<T> visitor) => visitor.visitStyleRule(this);

CssStyleRule copyWithoutChildren() =>
new CssStyleRule(selector, span, originalSelector: originalSelector);
CssStyleRule(selector, span, originalSelector: originalSelector);
}
2 changes: 1 addition & 1 deletion lib/src/ast/css/stylesheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ class CssStylesheet extends CssParentNode {

T accept<T>(CssVisitor<T> visitor) => visitor.visitStylesheet(this);

CssStylesheet copyWithoutChildren() => new CssStylesheet(span);
CssStylesheet copyWithoutChildren() => CssStylesheet(span);
}
2 changes: 1 addition & 1 deletion lib/src/ast/css/supports_rule.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@ class CssSupportsRule extends CssParentNode {

T accept<T>(CssVisitor<T> visitor) => visitor.visitSupportsRule(this);

CssSupportsRule copyWithoutChildren() => new CssSupportsRule(condition, span);
CssSupportsRule copyWithoutChildren() => CssSupportsRule(condition, span);
}
14 changes: 7 additions & 7 deletions lib/src/ast/sass/argument_declaration.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ArgumentDeclaration implements SassNode {

ArgumentDeclaration(Iterable<Argument> arguments,
{this.restArgument, this.span})
: arguments = new List.unmodifiable(arguments);
: arguments = List.unmodifiable(arguments);

/// Creates a declaration that declares no arguments.
ArgumentDeclaration.empty({this.span})
Expand All @@ -41,7 +41,7 @@ class ArgumentDeclaration implements SassNode {
///
/// Throws a [SassFormatException] if parsing fails.
factory ArgumentDeclaration.parse(String contents, {url, Logger logger}) =>
new ScssParser("($contents)", url: url, logger: logger)
ScssParser("($contents)", url: url, logger: logger)
.parseArgumentDeclaration();

/// Throws a [SassScriptException] if [positional] and [names] aren't valid
Expand All @@ -52,21 +52,21 @@ class ArgumentDeclaration implements SassNode {
var argument = arguments[i];
if (i < positional) {
if (names.contains(argument.name)) {
throw new SassScriptException(
throw SassScriptException(
"Argument \$${argument.name} was passed both by position and by "
"name.");
}
} else if (names.contains(argument.name)) {
namedUsed++;
} else if (argument.defaultValue == null) {
throw new SassScriptException("Missing argument \$${argument.name}.");
throw SassScriptException("Missing argument \$${argument.name}.");
}
}

if (restArgument != null) return;

if (positional > arguments.length) {
throw new SassScriptException("Only ${arguments.length} "
throw SassScriptException("Only ${arguments.length} "
"${pluralize('argument', arguments.length)} allowed, but "
"${positional} ${pluralize('was', positional, plural: 'were')} "
"passed.");
Expand All @@ -75,7 +75,7 @@ class ArgumentDeclaration implements SassNode {
if (namedUsed < names.length) {
var unknownNames = normalizedSet(names)
..removeAll(arguments.map((argument) => argument.name));
throw new SassScriptException(
throw SassScriptException(
"No ${pluralize('argument', unknownNames.length)} named "
"${toSentence(unknownNames.map((name) => "\$$name"), 'or')}.");
}
Expand All @@ -101,7 +101,7 @@ class ArgumentDeclaration implements SassNode {
}

String toString() {
var components = new List.of(arguments.map((arg) => arg.toString()));
var components = List.of(arguments.map((arg) => arg.toString()));
if (restArgument != null) components.add('$restArgument...');
return components.join(', ');
}
Expand Down
6 changes: 3 additions & 3 deletions lib/src/ast/sass/argument_invocation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ class ArgumentInvocation implements SassNode {
ArgumentInvocation(
Iterable<Expression> positional, Map<String, Expression> named, this.span,
{this.rest, this.keywordRest})
: positional = new List.unmodifiable(positional),
named = new Map.unmodifiable(named) {
: positional = List.unmodifiable(positional),
named = Map.unmodifiable(named) {
assert(rest != null || keywordRest == null);
}

Expand All @@ -42,7 +42,7 @@ class ArgumentInvocation implements SassNode {
keywordRest = null;

String toString() {
var components = new List<Object>.from(positional)
var components = List<Object>.from(positional)
..addAll(named.keys.map((name) => "$name: ${named[name]}"));
if (rest != null) components.add("$rest...");
if (keywordRest != null) components.add("$keywordRest...");
Expand Down
4 changes: 2 additions & 2 deletions lib/src/ast/sass/at_root_query.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import '../css.dart';
/// A query for the `@at-root` rule.
class AtRootQuery {
/// The default at-root query, which excludes only style rules.
static const defaultQuery = const AtRootQuery._default();
static const defaultQuery = AtRootQuery._default();

/// Whether the query includes or excludes rules with the specified names.
final bool include;
Expand Down Expand Up @@ -56,7 +56,7 @@ class AtRootQuery {
///
/// Throws a [SassFormatException] if parsing fails.
factory AtRootQuery.parse(String contents, {url, Logger logger}) =>
new AtRootQueryParser(contents, url: url, logger: logger).parse();
AtRootQueryParser(contents, url: url, logger: logger).parse();

/// Returns whether [this] excludes [node].
bool excludes(CssParentNode node) {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/ast/sass/expression.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@ abstract class Expression implements SassNode {
///
/// Throws a [SassFormatException] if parsing fails.
factory Expression.parse(String contents, {url, Logger logger}) =>
new ScssParser(contents, url: url, logger: logger).parseExpression();
ScssParser(contents, url: url, logger: logger).parseExpression();
}
Loading

0 comments on commit d4adea7

Please sign in to comment.