Skip to content

Commit 429e0aa

Browse files
authored
fixed a regression parsing declaration values containing spaces (dart-archive/csslib#172)
1 parent 43187f6 commit 429e0aa

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

pkgs/csslib/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- Add markdown badges to the readme.
44
- Adopted `package:dart_flutter_team_lints` linting rules.
55
- Fixed the reported span for `Expression` nodes.
6+
- Fixed a regression parsing declaration values containing spaces.
67

78
## 0.17.2
89

pkgs/csslib/lib/parser.dart

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2402,17 +2402,17 @@ class _Parser {
24022402
}
24032403

24042404
/// Process all dimension units.
2405-
LiteralTerm processDimension(Token? t, Object value, SourceSpan span) {
2405+
LiteralTerm processDimension(Token? t, Object value, FileSpan span) {
24062406
LiteralTerm term;
24072407
var unitType = _peek();
24082408

24092409
switch (unitType) {
24102410
case TokenKind.UNIT_EM:
2411-
span = span.union(_next().span);
2411+
span = span.expand(_next().span);
24122412
term = EmTerm(value, t!.text, span);
24132413
break;
24142414
case TokenKind.UNIT_EX:
2415-
span = span.union(_next().span);
2415+
span = span.expand(_next().span);
24162416
term = ExTerm(value, t!.text, span);
24172417
break;
24182418
case TokenKind.UNIT_LENGTH_PX:
@@ -2421,53 +2421,53 @@ class _Parser {
24212421
case TokenKind.UNIT_LENGTH_IN:
24222422
case TokenKind.UNIT_LENGTH_PT:
24232423
case TokenKind.UNIT_LENGTH_PC:
2424-
span = span.union(_next().span);
2424+
span = span.expand(_next().span);
24252425
term = LengthTerm(value, t!.text, span, unitType);
24262426
break;
24272427
case TokenKind.UNIT_ANGLE_DEG:
24282428
case TokenKind.UNIT_ANGLE_RAD:
24292429
case TokenKind.UNIT_ANGLE_GRAD:
24302430
case TokenKind.UNIT_ANGLE_TURN:
2431-
span = span.union(_next().span);
2431+
span = span.expand(_next().span);
24322432
term = AngleTerm(value, t!.text, span, unitType);
24332433
break;
24342434
case TokenKind.UNIT_TIME_MS:
24352435
case TokenKind.UNIT_TIME_S:
2436-
span = span.union(_next().span);
2436+
span = span.expand(_next().span);
24372437
term = TimeTerm(value, t!.text, span, unitType);
24382438
break;
24392439
case TokenKind.UNIT_FREQ_HZ:
24402440
case TokenKind.UNIT_FREQ_KHZ:
2441-
span = span.union(_next().span);
2441+
span = span.expand(_next().span);
24422442
term = FreqTerm(value, t!.text, span, unitType);
24432443
break;
24442444
case TokenKind.PERCENT:
2445-
span = span.union(_next().span);
2445+
span = span.expand(_next().span);
24462446
term = PercentageTerm(value, t!.text, span);
24472447
break;
24482448
case TokenKind.UNIT_FRACTION:
2449-
span = span.union(_next().span);
2449+
span = span.expand(_next().span);
24502450
term = FractionTerm(value, t!.text, span);
24512451
break;
24522452
case TokenKind.UNIT_RESOLUTION_DPI:
24532453
case TokenKind.UNIT_RESOLUTION_DPCM:
24542454
case TokenKind.UNIT_RESOLUTION_DPPX:
2455-
span = span.union(_next().span);
2455+
span = span.expand(_next().span);
24562456
term = ResolutionTerm(value, t!.text, span, unitType);
24572457
break;
24582458
case TokenKind.UNIT_CH:
2459-
span = span.union(_next().span);
2459+
span = span.expand(_next().span);
24602460
term = ChTerm(value, t!.text, span, unitType);
24612461
break;
24622462
case TokenKind.UNIT_REM:
2463-
span = span.union(_next().span);
2463+
span = span.expand(_next().span);
24642464
term = RemTerm(value, t!.text, span, unitType);
24652465
break;
24662466
case TokenKind.UNIT_VIEWPORT_VW:
24672467
case TokenKind.UNIT_VIEWPORT_VH:
24682468
case TokenKind.UNIT_VIEWPORT_VMIN:
24692469
case TokenKind.UNIT_VIEWPORT_VMAX:
2470-
span = span.union(_next().span);
2470+
span = span.expand(_next().span);
24712471
term = ViewportTerm(value, t!.text, span, unitType);
24722472
break;
24732473
default:

pkgs/csslib/test/repro_136_test.dart renamed to pkgs/csslib/test/repros_test.dart

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ const options = PreprocessorOptions(
1313
);
1414

1515
void main() {
16+
// Repro test for https://github.com/dart-lang/csslib/issues/136.
1617
test('repro_136', () {
17-
// Repro test for https://github.com/dart-lang/csslib/issues/136.
1818
final errors = <Message>[];
1919

2020
final css = '''
@@ -35,4 +35,27 @@ void main() {
3535
// This should be empty.
3636
expect(errors, hasLength(3));
3737
});
38+
39+
// Repro test for https://github.com/dart-lang/csslib/issues/171.
40+
test('repro_171', () {
41+
final errors = <Message>[];
42+
var stylesheet =
43+
parse('body { width: 1000 px; }', errors: errors, options: options);
44+
expect(errors, isEmpty);
45+
46+
expect(stylesheet.topLevels, hasLength(1));
47+
var ruleset = stylesheet.topLevels.first as RuleSet;
48+
expect(ruleset.selectorGroup!.selectors, hasLength(1));
49+
expect(ruleset.declarationGroup.declarations, hasLength(1));
50+
51+
errors.clear();
52+
stylesheet =
53+
parse('body { width: 1000px; }', errors: errors, options: options);
54+
expect(errors, isEmpty);
55+
56+
expect(stylesheet.topLevels, hasLength(1));
57+
ruleset = stylesheet.topLevels.first as RuleSet;
58+
expect(ruleset.selectorGroup!.selectors, hasLength(1));
59+
expect(ruleset.declarationGroup.declarations, hasLength(1));
60+
});
3861
}

0 commit comments

Comments
 (0)