Skip to content
This repository was archived by the owner on Nov 1, 2024. It is now read-only.

Commit e6c8308

Browse files
authored
fix the reported span for expressions (#167)
* fix the reported span for expressions * update changelog
1 parent a190358 commit e6c8308

File tree

6 files changed

+69
-65
lines changed

6 files changed

+69
-65
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- Add markdown badges to the readme.
44
- Adopted `package:dart_flutter_team_lints` linting rules.
5+
- Fixed the reported span for `Expression` nodes.
56

67
## 0.17.2
78

lib/parser.dart

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ class _Parser {
324324
messages.warning(message, location);
325325
}
326326

327-
SourceSpan _makeSpan(FileSpan start) {
327+
FileSpan _makeSpan(FileSpan start) {
328328
// TODO(terry): there are places where we are creating spans before we eat
329329
// the tokens, so using _previousToken is not always valid.
330330
// TODO(nweiz): use < rather than compareTo when SourceSpan supports it.
@@ -933,7 +933,7 @@ class _Parser {
933933
dynamic expr;
934934
var keepGoing = true;
935935
while (keepGoing && (expr = processTerm()) != null) {
936-
// VarUsage is returns as a list
936+
// VarUsage is returned as a list
937937
terms.add((expr is List ? expr[0] : expr) as Expression);
938938
keepGoing = !_peekKind(TokenKind.RPAREN);
939939
if (keepGoing) {
@@ -981,7 +981,7 @@ class _Parser {
981981

982982
_eat(TokenKind.RPAREN);
983983

984-
var arguments = Expressions(_makeSpan(argumentSpan as FileSpan))
984+
var arguments = Expressions(_makeSpan(argumentSpan))
985985
..add(LiteralTerm(argument, argument, argumentSpan));
986986
function = FunctionTerm(ident.name, ident.name, arguments,
987987
_makeSpan(ident.span as FileSpan));
@@ -2408,67 +2408,67 @@ class _Parser {
24082408

24092409
switch (unitType) {
24102410
case TokenKind.UNIT_EM:
2411+
span = span.union(_next().span);
24112412
term = EmTerm(value, t!.text, span);
2412-
_next(); // Skip the unit
24132413
break;
24142414
case TokenKind.UNIT_EX:
2415+
span = span.union(_next().span);
24152416
term = ExTerm(value, t!.text, span);
2416-
_next(); // Skip the unit
24172417
break;
24182418
case TokenKind.UNIT_LENGTH_PX:
24192419
case TokenKind.UNIT_LENGTH_CM:
24202420
case TokenKind.UNIT_LENGTH_MM:
24212421
case TokenKind.UNIT_LENGTH_IN:
24222422
case TokenKind.UNIT_LENGTH_PT:
24232423
case TokenKind.UNIT_LENGTH_PC:
2424+
span = span.union(_next().span);
24242425
term = LengthTerm(value, t!.text, span, unitType);
2425-
_next(); // Skip the unit
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);
24312432
term = AngleTerm(value, t!.text, span, unitType);
2432-
_next(); // Skip the unit
24332433
break;
24342434
case TokenKind.UNIT_TIME_MS:
24352435
case TokenKind.UNIT_TIME_S:
2436+
span = span.union(_next().span);
24362437
term = TimeTerm(value, t!.text, span, unitType);
2437-
_next(); // Skip the unit
24382438
break;
24392439
case TokenKind.UNIT_FREQ_HZ:
24402440
case TokenKind.UNIT_FREQ_KHZ:
2441+
span = span.union(_next().span);
24412442
term = FreqTerm(value, t!.text, span, unitType);
2442-
_next(); // Skip the unit
24432443
break;
24442444
case TokenKind.PERCENT:
2445+
span = span.union(_next().span);
24452446
term = PercentageTerm(value, t!.text, span);
2446-
_next(); // Skip the %
24472447
break;
24482448
case TokenKind.UNIT_FRACTION:
2449+
span = span.union(_next().span);
24492450
term = FractionTerm(value, t!.text, span);
2450-
_next(); // Skip the unit
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);
24552456
term = ResolutionTerm(value, t!.text, span, unitType);
2456-
_next(); // Skip the unit
24572457
break;
24582458
case TokenKind.UNIT_CH:
2459+
span = span.union(_next().span);
24592460
term = ChTerm(value, t!.text, span, unitType);
2460-
_next(); // Skip the unit
24612461
break;
24622462
case TokenKind.UNIT_REM:
2463+
span = span.union(_next().span);
24632464
term = RemTerm(value, t!.text, span, unitType);
2464-
_next(); // Skip the unit
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);
24702471
term = ViewportTerm(value, t!.text, span, unitType);
2471-
_next(); // Skip the unit
24722472
break;
24732473
default:
24742474
if (value is Identifier) {

lib/src/preprocessor_options.dart

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,17 @@ class PreprocessorOptions {
3434
/// File to process by the compiler.
3535
final String? inputFile;
3636

37-
const PreprocessorOptions(
38-
{this.verbose = false,
39-
this.checked = false,
40-
this.lessSupport = true,
41-
this.warningsAsErrors = false,
42-
this.throwOnErrors = false,
43-
this.throwOnWarnings = false,
44-
this.useColors = true,
45-
this.polyfill = false,
46-
this.inputFile});
37+
// TODO: Should less support really default to being enabled?
38+
39+
const PreprocessorOptions({
40+
this.verbose = false,
41+
this.checked = false,
42+
this.lessSupport = true,
43+
this.warningsAsErrors = false,
44+
this.throwOnErrors = false,
45+
this.throwOnWarnings = false,
46+
this.useColors = true,
47+
this.polyfill = false,
48+
this.inputFile,
49+
});
4750
}

lib/src/tree.dart

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ class Negation extends TreeNode {
6666
class CalcTerm extends LiteralTerm {
6767
final LiteralTerm expr;
6868

69-
CalcTerm(Object value, String t, this.expr, SourceSpan? span)
70-
: super(value, t, span);
69+
CalcTerm(Object value, String text, this.expr, SourceSpan? span)
70+
: super(value, text, span);
7171

7272
@override
7373
CalcTerm clone() => CalcTerm(value, text, expr.clone(), span);
@@ -1244,7 +1244,7 @@ class LiteralTerm extends Expression {
12441244
}
12451245

12461246
class NumberTerm extends LiteralTerm {
1247-
NumberTerm(super.value, super.t, super.span);
1247+
NumberTerm(super.value, super.text, super.span);
12481248
@override
12491249
NumberTerm clone() => NumberTerm(value, text, span);
12501250
@override
@@ -1254,7 +1254,7 @@ class NumberTerm extends LiteralTerm {
12541254
class UnitTerm extends LiteralTerm {
12551255
final int unit;
12561256

1257-
UnitTerm(super.value, super.t, super.span, this.unit);
1257+
UnitTerm(super.value, super.text, super.span, this.unit);
12581258

12591259
@override
12601260
UnitTerm clone() => UnitTerm(value, text, span, unit);
@@ -1269,7 +1269,7 @@ class UnitTerm extends LiteralTerm {
12691269
}
12701270

12711271
class LengthTerm extends UnitTerm {
1272-
LengthTerm(super.value, super.t, super.span,
1272+
LengthTerm(super.value, super.text, super.span,
12731273
[super.unit = TokenKind.UNIT_LENGTH_PX]) {
12741274
assert(unit == TokenKind.UNIT_LENGTH_PX ||
12751275
unit == TokenKind.UNIT_LENGTH_CM ||
@@ -1285,31 +1285,31 @@ class LengthTerm extends UnitTerm {
12851285
}
12861286

12871287
class PercentageTerm extends LiteralTerm {
1288-
PercentageTerm(super.value, super.t, super.span);
1288+
PercentageTerm(super.value, super.text, super.span);
12891289
@override
12901290
PercentageTerm clone() => PercentageTerm(value, text, span);
12911291
@override
12921292
dynamic visit(VisitorBase visitor) => visitor.visitPercentageTerm(this);
12931293
}
12941294

12951295
class EmTerm extends LiteralTerm {
1296-
EmTerm(super.value, super.t, super.span);
1296+
EmTerm(super.value, super.text, super.span);
12971297
@override
12981298
EmTerm clone() => EmTerm(value, text, span);
12991299
@override
13001300
dynamic visit(VisitorBase visitor) => visitor.visitEmTerm(this);
13011301
}
13021302

13031303
class ExTerm extends LiteralTerm {
1304-
ExTerm(super.value, super.t, super.span);
1304+
ExTerm(super.value, super.text, super.span);
13051305
@override
13061306
ExTerm clone() => ExTerm(value, text, span);
13071307
@override
13081308
dynamic visit(VisitorBase visitor) => visitor.visitExTerm(this);
13091309
}
13101310

13111311
class AngleTerm extends UnitTerm {
1312-
AngleTerm(super.value, super.t, super.span,
1312+
AngleTerm(super.value, super.text, super.span,
13131313
[super.unit = TokenKind.UNIT_LENGTH_PX]) {
13141314
assert(unit == TokenKind.UNIT_ANGLE_DEG ||
13151315
unit == TokenKind.UNIT_ANGLE_RAD ||
@@ -1324,7 +1324,7 @@ class AngleTerm extends UnitTerm {
13241324
}
13251325

13261326
class TimeTerm extends UnitTerm {
1327-
TimeTerm(super.value, super.t, super.span,
1327+
TimeTerm(super.value, super.text, super.span,
13281328
[super.unit = TokenKind.UNIT_LENGTH_PX]) {
13291329
assert(unit == TokenKind.UNIT_ANGLE_DEG ||
13301330
unit == TokenKind.UNIT_TIME_MS ||
@@ -1338,9 +1338,9 @@ class TimeTerm extends UnitTerm {
13381338
}
13391339

13401340
class FreqTerm extends UnitTerm {
1341-
FreqTerm(Object value, String t, SourceSpan? span,
1341+
FreqTerm(Object value, String text, SourceSpan? span,
13421342
[int unit = TokenKind.UNIT_LENGTH_PX])
1343-
: super(value, t, span, unit) {
1343+
: super(value, text, span, unit) {
13441344
assert(unit == TokenKind.UNIT_FREQ_HZ || unit == TokenKind.UNIT_FREQ_KHZ);
13451345
}
13461346

@@ -1351,7 +1351,7 @@ class FreqTerm extends UnitTerm {
13511351
}
13521352

13531353
class FractionTerm extends LiteralTerm {
1354-
FractionTerm(super.value, super.t, super.span);
1354+
FractionTerm(super.value, super.text, super.span);
13551355

13561356
@override
13571357
FractionTerm clone() => FractionTerm(value, text, span);
@@ -1369,9 +1369,9 @@ class UriTerm extends LiteralTerm {
13691369
}
13701370

13711371
class ResolutionTerm extends UnitTerm {
1372-
ResolutionTerm(Object value, String t, SourceSpan? span,
1372+
ResolutionTerm(Object value, String text, SourceSpan? span,
13731373
[int unit = TokenKind.UNIT_LENGTH_PX])
1374-
: super(value, t, span, unit) {
1374+
: super(value, text, span, unit) {
13751375
assert(unit == TokenKind.UNIT_RESOLUTION_DPI ||
13761376
unit == TokenKind.UNIT_RESOLUTION_DPCM ||
13771377
unit == TokenKind.UNIT_RESOLUTION_DPPX);
@@ -1384,9 +1384,9 @@ class ResolutionTerm extends UnitTerm {
13841384
}
13851385

13861386
class ChTerm extends UnitTerm {
1387-
ChTerm(Object value, String t, SourceSpan? span,
1387+
ChTerm(Object value, String text, SourceSpan? span,
13881388
[int unit = TokenKind.UNIT_LENGTH_PX])
1389-
: super(value, t, span, unit) {
1389+
: super(value, text, span, unit) {
13901390
assert(unit == TokenKind.UNIT_CH);
13911391
}
13921392

@@ -1397,9 +1397,9 @@ class ChTerm extends UnitTerm {
13971397
}
13981398

13991399
class RemTerm extends UnitTerm {
1400-
RemTerm(Object value, String t, SourceSpan? span,
1400+
RemTerm(Object value, String text, SourceSpan? span,
14011401
[int unit = TokenKind.UNIT_LENGTH_PX])
1402-
: super(value, t, span, unit) {
1402+
: super(value, text, span, unit) {
14031403
assert(unit == TokenKind.UNIT_REM);
14041404
}
14051405

@@ -1410,9 +1410,9 @@ class RemTerm extends UnitTerm {
14101410
}
14111411

14121412
class ViewportTerm extends UnitTerm {
1413-
ViewportTerm(Object value, String t, SourceSpan? span,
1413+
ViewportTerm(Object value, String text, SourceSpan? span,
14141414
[int unit = TokenKind.UNIT_LENGTH_PX])
1415-
: super(value, t, span, unit) {
1415+
: super(value, text, span, unit) {
14161416
assert(unit == TokenKind.UNIT_VIEWPORT_VW ||
14171417
unit == TokenKind.UNIT_VIEWPORT_VH ||
14181418
unit == TokenKind.UNIT_VIEWPORT_VMIN ||
@@ -1430,7 +1430,7 @@ class ViewportTerm extends UnitTerm {
14301430
class BAD_HEX_VALUE {}
14311431

14321432
class HexColorTerm extends LiteralTerm {
1433-
HexColorTerm(super.value, super.t, super.span);
1433+
HexColorTerm(super.value, super.text, super.span);
14341434

14351435
@override
14361436
HexColorTerm clone() => HexColorTerm(value, text, span);
@@ -1441,8 +1441,8 @@ class HexColorTerm extends LiteralTerm {
14411441
class FunctionTerm extends LiteralTerm {
14421442
final Expressions _params;
14431443

1444-
FunctionTerm(Object value, String t, this._params, SourceSpan? span)
1445-
: super(value, t, span);
1444+
FunctionTerm(Object value, String text, this._params, SourceSpan? span)
1445+
: super(value, text, span);
14461446

14471447
@override
14481448
FunctionTerm clone() => FunctionTerm(value, text, _params.clone(), span);
@@ -1477,7 +1477,7 @@ class GroupTerm extends Expression {
14771477
}
14781478

14791479
class ItemTerm extends NumberTerm {
1480-
ItemTerm(super.value, super.t, super.span);
1480+
ItemTerm(super.value, super.text, super.span);
14811481

14821482
@override
14831483
ItemTerm clone() => ItemTerm(value, text, span);

test/declaration_test.dart

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -721,14 +721,16 @@ src: url(ideal-sans-serif.woff) format("woff"),
721721
expect(errors.isEmpty, true, reason: errors.toString());
722722
expect(prettyPrint(stylesheet), generated2);
723723

724-
final input3 = '''@font-face {
724+
final input3 = '''
725+
@font-face {
725726
font-family: MyGentium Text Ornaments;
726727
src: local(Gentium Bold), /* full font name */
727728
local(Gentium-Bold), /* Postscript name */
728729
url(GentiumBold.ttf); /* otherwise, download it */
729730
font-weight: bold;
730731
}''';
731-
final generated3 = '''@font-face {
732+
final generated3 = '''
733+
@font-face {
732734
font-family: MyGentium Text Ornaments;
733735
src: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf");
734736
font-weight: bold;
@@ -1272,15 +1274,15 @@ void testHangs() {
12721274

12731275
void testExpressionSpans() {
12741276
final input = r'''.foo { width: 50px; }''';
1277+
12751278
var stylesheet = parseCss(input);
1276-
var decl = (stylesheet.topLevels.single as RuleSet)
1277-
.declarationGroup
1278-
.declarations
1279-
.single;
1280-
// This passes
1281-
expect(decl.span!.text, 'width: 50px');
1282-
// This currently fails
1283-
expect((decl as Declaration).expression!.span!.text, '50px');
1279+
var ruleSet = stylesheet.topLevels.single as RuleSet;
1280+
1281+
var declaration = ruleSet.declarationGroup.declarations.single as Declaration;
1282+
expect(declaration.span.text, 'width: 50px');
1283+
1284+
var expressions = declaration.expression as Expressions;
1285+
expect(expressions.expressions.first.span!.text, '50px');
12841286
}
12851287

12861288
void testComments() {
@@ -1380,9 +1382,7 @@ void main() {
13801382
test('IE stuff', testIE);
13811383
test('IE declaration syntax', testIEDeclaration);
13821384
test('Hanging bugs', testHangs);
1383-
test('Expression spans', testExpressionSpans,
1384-
skip: 'expression spans are broken'
1385-
' (https://github.com/dart-lang/csslib/issues/15)');
1385+
test('Expression spans', testExpressionSpans);
13861386
test('Comments', testComments);
13871387
group('calc function', () {
13881388
test('simple calc', simpleCalc);

test/error_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void testUnsupportedLineHeights() {
8181
error on line 1, column 24: Unexpected value for line-height
8282
,
8383
1 | .foobar { line-height: 120%; }
84-
| ^^^
84+
| ^^^^
8585
\'''');
8686
expect(prettyPrint(stylesheet), r'''
8787
.foobar {
@@ -98,7 +98,7 @@ error on line 1, column 24: Unexpected value for line-height
9898
error on line 1, column 24: Unexpected unit for line-height
9999
,
100100
1 | .foobar { line-height: 20cm; }
101-
| ^^
101+
| ^^^^
102102
\'''');
103103
expect(prettyPrint(stylesheet), r'''
104104
.foobar {

0 commit comments

Comments
 (0)