in lib/parser.dart [1158:1213]
DeclarationGroup processDeclarations({bool checkBrace = true}) {
var start = _peekToken.span;
if (checkBrace) _eat(TokenKind.LBRACE);
var decls = <TreeNode>[];
var dartStyles =
<DartStyleExpression>[]; // List of latest styles exposed to Dart.
do {
var selectorGroup = _nestedSelector();
while (selectorGroup != null) {
// Nested selector so process as a ruleset.
var ruleset = processRule(selectorGroup)!;
decls.add(ruleset);
selectorGroup = _nestedSelector();
}
var decl = processDeclaration(dartStyles);
if (decl != null) {
if (decl.hasDartStyle) {
var newDartStyle = decl.dartStyle!;
// Replace or add latest Dart style.
var replaced = false;
for (var i = 0; i < dartStyles.length; i++) {
var dartStyle = dartStyles[i];
if (dartStyle.isSame(newDartStyle)) {
dartStyles[i] = newDartStyle;
replaced = true;
break;
}
}
if (!replaced) {
dartStyles.add(newDartStyle);
}
}
decls.add(decl);
}
} while (_maybeEat(TokenKind.SEMICOLON));
if (checkBrace) _eat(TokenKind.RBRACE);
// Fixup declaration to only have dartStyle that are live for this set of
// declarations.
for (var decl in decls) {
if (decl is Declaration) {
if (decl.hasDartStyle && !dartStyles.contains(decl.dartStyle)) {
// Dart style not live, ignore these styles in this Declarations.
decl.dartStyle = null;
}
}
}
return DeclarationGroup(decls, _makeSpan(start));
}