@@ -359,10 +359,11 @@ class SourceVisitor extends ThrowingAstVisitor {
359
359
// appears before the first operand.
360
360
builder.startLazyRule ();
361
361
362
- // Flatten out a tree/chain of the same precedence. If we need to split on
363
- // any of them , we split on all of them.
362
+ // Flatten out a tree/chain of the same precedence. If we split on this
363
+ // precedence level , we will break all of them.
364
364
var precedence = node.operator .type.precedence;
365
365
366
+ @override
366
367
void traverse (Expression e) {
367
368
if (e is BinaryExpression && e.operator .type.precedence == precedence) {
368
369
traverse (e.leftOperand);
@@ -390,46 +391,6 @@ class SourceVisitor extends ThrowingAstVisitor {
390
391
builder.endRule ();
391
392
}
392
393
393
- @override
394
- void visitBinaryPattern (BinaryPattern node) {
395
- builder.startSpan ();
396
- builder.nestExpression (now: true );
397
-
398
- // Start lazily so we don't force the operator to split if a line comment
399
- // appears before the first operand.
400
- builder.startLazyRule ();
401
-
402
- // Flatten out a tree/chain of the same precedence. If we need to split on
403
- // any of them, we split on all of them.
404
- var precedence = node.operator .type.precedence;
405
-
406
- void traverse (DartPattern p) {
407
- if (p is BinaryPattern && p.operator .type.precedence == precedence) {
408
- traverse (p.leftOperand);
409
-
410
- space ();
411
- token (p.operator );
412
-
413
- split ();
414
- traverse (p.rightOperand);
415
- } else {
416
- visit (p);
417
- }
418
- }
419
-
420
- // Blocks as operands to infix patterns should always nest like regular
421
- // operands.
422
- builder.startBlockArgumentNesting ();
423
-
424
- traverse (node);
425
-
426
- builder.endBlockArgumentNesting ();
427
-
428
- builder.unnest ();
429
- builder.endSpan ();
430
- builder.endRule ();
431
- }
432
-
433
394
@override
434
395
void visitBlock (Block node) {
435
396
// Treat empty blocks specially. In most cases, they are not allowed to
@@ -794,12 +755,6 @@ class SourceVisitor extends ThrowingAstVisitor {
794
755
visit (node.uri);
795
756
}
796
757
797
- @override
798
- void visitConstantPattern (ConstantPattern node) {
799
- token (node.constKeyword, after: space);
800
- visit (node.expression);
801
- }
802
-
803
758
@override
804
759
void visitConstructorDeclaration (ConstructorDeclaration node) {
805
760
visitMetadata (node.metadata);
@@ -1819,8 +1774,12 @@ class SourceVisitor extends ThrowingAstVisitor {
1819
1774
1820
1775
var hasInnerControlFlow = false ;
1821
1776
for (var element in ifElements) {
1822
- _visitIfCondition (element.ifKeyword, element.leftParenthesis,
1823
- element.condition, element.caseClause, element.rightParenthesis);
1777
+ // The condition.
1778
+ token (element.ifKeyword);
1779
+ space ();
1780
+ token (element.leftParenthesis);
1781
+ visit (element.condition);
1782
+ token (element.rightParenthesis);
1824
1783
1825
1784
visitChild (element, element.thenElement);
1826
1785
if (element.thenElement.isControlFlowElement) {
@@ -1863,8 +1822,13 @@ class SourceVisitor extends ThrowingAstVisitor {
1863
1822
1864
1823
@override
1865
1824
void visitIfStatement (IfStatement node) {
1866
- _visitIfCondition (node.ifKeyword, node.leftParenthesis, node.condition,
1867
- node.caseClause, node.rightParenthesis);
1825
+ builder.nestExpression ();
1826
+ token (node.ifKeyword);
1827
+ space ();
1828
+ token (node.leftParenthesis);
1829
+ visit (node.condition);
1830
+ token (node.rightParenthesis);
1831
+ builder.unnest ();
1868
1832
1869
1833
void visitClause (Statement clause) {
1870
1834
if (clause is Block || clause is IfStatement ) {
@@ -2258,15 +2222,6 @@ class SourceVisitor extends ThrowingAstVisitor {
2258
2222
token (node.rightParenthesis);
2259
2223
}
2260
2224
2261
- @override
2262
- void visitParenthesizedPattern (ParenthesizedPattern node) {
2263
- builder.nestExpression ();
2264
- token (node.leftParenthesis);
2265
- visit (node.pattern);
2266
- builder.unnest ();
2267
- token (node.rightParenthesis);
2268
- }
2269
-
2270
2225
@override
2271
2226
void visitPartDirective (PartDirective node) {
2272
2227
_visitDirectiveMetadata (node);
@@ -2447,13 +2402,6 @@ class SourceVisitor extends ThrowingAstVisitor {
2447
2402
});
2448
2403
}
2449
2404
2450
- @override
2451
- void visitRelationalPattern (RelationalPattern node) {
2452
- token (node.operator );
2453
- space ();
2454
- visit (node.operand);
2455
- }
2456
-
2457
2405
@override
2458
2406
void visitRethrowExpression (RethrowExpression node) {
2459
2407
token (node.rethrowKeyword);
@@ -2590,6 +2538,7 @@ class SourceVisitor extends ThrowingAstVisitor {
2590
2538
token (node.colon);
2591
2539
2592
2540
builder.indent ();
2541
+ // TODO(rnystrom): Allow inline cases?
2593
2542
newline ();
2594
2543
2595
2544
visitNodes (node.statements, between: oneOrTwoNewlines);
@@ -2603,29 +2552,7 @@ class SourceVisitor extends ThrowingAstVisitor {
2603
2552
token (node.colon);
2604
2553
2605
2554
builder.indent ();
2606
- newline ();
2607
-
2608
- visitNodes (node.statements, between: oneOrTwoNewlines);
2609
- builder.unindent ();
2610
- }
2611
-
2612
- @override
2613
- void visitSwitchPatternCase (SwitchPatternCase node) {
2614
- _visitLabels (node.labels);
2615
-
2616
- token (node.keyword);
2617
- space ();
2618
-
2619
- builder.startBlockArgumentNesting ();
2620
- builder.nestExpression ();
2621
- visit (node.guardedPattern.pattern);
2622
- builder.unnest ();
2623
- builder.endBlockArgumentNesting ();
2624
-
2625
- visit (node.guardedPattern.whenClause);
2626
- token (node.colon);
2627
-
2628
- builder.indent ();
2555
+ // TODO(rnystrom): Allow inline cases?
2629
2556
newline ();
2630
2557
2631
2558
visitNodes (node.statements, between: oneOrTwoNewlines);
@@ -2784,20 +2711,6 @@ class SourceVisitor extends ThrowingAstVisitor {
2784
2711
});
2785
2712
}
2786
2713
2787
- @override
2788
- void visitWhenClause (WhenClause node) {
2789
- builder.startRule ();
2790
- split ();
2791
- token (node.whenKeyword);
2792
- space ();
2793
- builder.startBlockArgumentNesting ();
2794
- builder.nestExpression ();
2795
- visit (node.expression);
2796
- builder.unnest ();
2797
- builder.endBlockArgumentNesting ();
2798
- builder.endRule ();
2799
- }
2800
-
2801
2714
@override
2802
2715
void visitWhileStatement (WhileStatement node) {
2803
2716
builder.nestExpression ();
@@ -3417,45 +3330,6 @@ class SourceVisitor extends ThrowingAstVisitor {
3417
3330
builder.endRule ();
3418
3331
}
3419
3332
3420
- /// Visits the `if (<expr> [case <pattern> [when <expr>]])` header of an if
3421
- /// statement or element.
3422
- void _visitIfCondition (Token ifKeyword, Token leftParenthesis,
3423
- AstNode condition, CaseClause ? caseClause, Token rightParenthesis) {
3424
- builder.nestExpression ();
3425
- token (ifKeyword);
3426
- space ();
3427
- token (leftParenthesis);
3428
-
3429
- if (caseClause != null ) {
3430
- // Wrap the rule for splitting before "case" around the value expression
3431
- // so that if the value splits, we split before "case" too.
3432
- builder.startRule ();
3433
-
3434
- // Nest the condition so that it indents deeper than the case clause.
3435
- builder.nestExpression ();
3436
- }
3437
-
3438
- visit (condition);
3439
-
3440
- // If-case clause.
3441
- if (caseClause != null ) {
3442
- split ();
3443
- token (caseClause.caseKeyword);
3444
- space ();
3445
- builder.startBlockArgumentNesting ();
3446
- builder.nestExpression ();
3447
- visit (caseClause.guardedPattern.pattern);
3448
- builder.unnest ();
3449
- builder.endBlockArgumentNesting ();
3450
- builder.endRule ();
3451
- visit (caseClause.guardedPattern.whenClause);
3452
- }
3453
-
3454
- token (rightParenthesis);
3455
- if (caseClause != null ) builder.unnest ();
3456
- builder.unnest ();
3457
- }
3458
-
3459
3333
/// Writes the separator between a type annotation and a variable or
3460
3334
/// parameter. If the preceding type annotation ends in a delimited list of
3461
3335
/// elements that have block formatting, then we don't split between the
0 commit comments