mirror of
https://github.com/danog/dart-sass.git
synced 2025-01-22 05:41:14 +01:00
Validate dynamic children.
This commit is contained in:
parent
0f20b58044
commit
c4cda30bc0
@ -13,7 +13,6 @@ class CssMediaRule extends CssParentNode {
|
||||
|
||||
final FileSpan span;
|
||||
|
||||
// TODO: validate that children contains only at-rule and style rule nodes?
|
||||
CssMediaRule(this.queries, {this.span});
|
||||
|
||||
/*=T*/ accept/*<T>*/(CssVisitor/*<T>*/ visitor) =>
|
||||
|
@ -38,7 +38,6 @@ abstract class CssParentNode extends CssNode {
|
||||
children = new UnmodifiableListView<CssNode>(children);
|
||||
|
||||
void addChild(CssNode child) {
|
||||
// TODO: validate that children are valid?
|
||||
child._parent = this;
|
||||
child._indexInParent = _children.length;
|
||||
_children.add(child);
|
||||
|
@ -17,8 +17,6 @@ class AtRule implements Statement {
|
||||
|
||||
final FileSpan span;
|
||||
|
||||
// TODO: validate that children only contains variable, at-rule, declaration,
|
||||
// or style nodes?
|
||||
AtRule(this.name, {this.value, Iterable<Statement> children, this.span})
|
||||
: children = children == null ? null : new List.unmodifiable(children);
|
||||
|
||||
|
@ -15,8 +15,6 @@ class StyleRule implements Statement {
|
||||
|
||||
final FileSpan span;
|
||||
|
||||
// TODO: validate that children only contains variable, at-rule, declaration,
|
||||
// or style nodes?
|
||||
StyleRule(this.selector, Iterable<Statement> children, {this.span})
|
||||
: children = new List.unmodifiable(children);
|
||||
|
||||
|
@ -98,6 +98,10 @@ class PerformVisitor extends StatementVisitor
|
||||
}
|
||||
|
||||
void visitExtendRule(ExtendRule node) {
|
||||
if (_selector == null || _declarationName != null) {
|
||||
throw node.span.message("@extend may only be used within style rules.");
|
||||
}
|
||||
|
||||
var targetText = _interpolationToValue(node.selector);
|
||||
|
||||
// TODO: recontextualize parse errors.
|
||||
@ -107,6 +111,11 @@ class PerformVisitor extends StatementVisitor
|
||||
}
|
||||
|
||||
void visitAtRule(AtRule node) {
|
||||
if (_declarationName != null) {
|
||||
throw node.span.message(
|
||||
"At-rules may not be used within nested declarations.");
|
||||
}
|
||||
|
||||
var value = node.value == null
|
||||
? null
|
||||
: _interpolationToValue(node.value, trim: true);
|
||||
@ -171,6 +180,11 @@ class PerformVisitor extends StatementVisitor
|
||||
}
|
||||
|
||||
void visitMediaRule(MediaRule node) {
|
||||
if (_declarationName != null) {
|
||||
throw node.span.message(
|
||||
"Media rules may not be used within nested declarations.");
|
||||
}
|
||||
|
||||
var queryIterable = node.queries.map(_visitMediaQuery);
|
||||
var queries = _mediaQueries == null
|
||||
? new List<CssMediaQuery>.unmodifiable(queryIterable)
|
||||
@ -224,6 +238,11 @@ class PerformVisitor extends StatementVisitor
|
||||
Value visitReturn(Return node) => node.expression.accept(this);
|
||||
|
||||
void visitStyleRule(StyleRule node) {
|
||||
if (_declarationName != null) {
|
||||
throw node.span.message(
|
||||
"Style rules may not be used within nested declarations.");
|
||||
}
|
||||
|
||||
var selectorText = _interpolationToValue(node.selector, trim: true);
|
||||
var parsedSelector = new Parser(selectorText.value).parseSelector();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user