Skip to content

Commit 73c0cb7

Browse files
authored
Revert "Start formatting patterns and other related syntax. (#1165)" (#1166)
This reverts commit b5ad63e.
1 parent b5ad63e commit 73c0cb7

File tree

8 files changed

+19
-433
lines changed

8 files changed

+19
-433
lines changed

lib/src/dart_formatter.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@ class DartFormatter {
9090
var featureSet = FeatureSet.fromEnableFlags2(
9191
sdkLanguageVersion: Version(2, 19, 0),
9292
flags: [
93-
// TODO(rnystrom): This breaks existing switch cases containing constant
94-
// expressions that aren't valid patterns. See:
95-
// https://github.com/dart-lang/dart_style/issues/1164
96-
'patterns',
9793
'records',
9894
'unnamed-libraries',
9995
],

lib/src/source_visitor.dart

Lines changed: 18 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -359,10 +359,11 @@ class SourceVisitor extends ThrowingAstVisitor {
359359
// appears before the first operand.
360360
builder.startLazyRule();
361361

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.
364364
var precedence = node.operator.type.precedence;
365365

366+
@override
366367
void traverse(Expression e) {
367368
if (e is BinaryExpression && e.operator.type.precedence == precedence) {
368369
traverse(e.leftOperand);
@@ -390,46 +391,6 @@ class SourceVisitor extends ThrowingAstVisitor {
390391
builder.endRule();
391392
}
392393

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-
433394
@override
434395
void visitBlock(Block node) {
435396
// Treat empty blocks specially. In most cases, they are not allowed to
@@ -794,12 +755,6 @@ class SourceVisitor extends ThrowingAstVisitor {
794755
visit(node.uri);
795756
}
796757

797-
@override
798-
void visitConstantPattern(ConstantPattern node) {
799-
token(node.constKeyword, after: space);
800-
visit(node.expression);
801-
}
802-
803758
@override
804759
void visitConstructorDeclaration(ConstructorDeclaration node) {
805760
visitMetadata(node.metadata);
@@ -1819,8 +1774,12 @@ class SourceVisitor extends ThrowingAstVisitor {
18191774

18201775
var hasInnerControlFlow = false;
18211776
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);
18241783

18251784
visitChild(element, element.thenElement);
18261785
if (element.thenElement.isControlFlowElement) {
@@ -1863,8 +1822,13 @@ class SourceVisitor extends ThrowingAstVisitor {
18631822

18641823
@override
18651824
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();
18681832

18691833
void visitClause(Statement clause) {
18701834
if (clause is Block || clause is IfStatement) {
@@ -2258,15 +2222,6 @@ class SourceVisitor extends ThrowingAstVisitor {
22582222
token(node.rightParenthesis);
22592223
}
22602224

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-
22702225
@override
22712226
void visitPartDirective(PartDirective node) {
22722227
_visitDirectiveMetadata(node);
@@ -2447,13 +2402,6 @@ class SourceVisitor extends ThrowingAstVisitor {
24472402
});
24482403
}
24492404

2450-
@override
2451-
void visitRelationalPattern(RelationalPattern node) {
2452-
token(node.operator);
2453-
space();
2454-
visit(node.operand);
2455-
}
2456-
24572405
@override
24582406
void visitRethrowExpression(RethrowExpression node) {
24592407
token(node.rethrowKeyword);
@@ -2590,6 +2538,7 @@ class SourceVisitor extends ThrowingAstVisitor {
25902538
token(node.colon);
25912539

25922540
builder.indent();
2541+
// TODO(rnystrom): Allow inline cases?
25932542
newline();
25942543

25952544
visitNodes(node.statements, between: oneOrTwoNewlines);
@@ -2603,29 +2552,7 @@ class SourceVisitor extends ThrowingAstVisitor {
26032552
token(node.colon);
26042553

26052554
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?
26292556
newline();
26302557

26312558
visitNodes(node.statements, between: oneOrTwoNewlines);
@@ -2784,20 +2711,6 @@ class SourceVisitor extends ThrowingAstVisitor {
27842711
});
27852712
}
27862713

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-
28012714
@override
28022715
void visitWhileStatement(WhileStatement node) {
28032716
builder.nestExpression();
@@ -3417,45 +3330,6 @@ class SourceVisitor extends ThrowingAstVisitor {
34173330
builder.endRule();
34183331
}
34193332

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-
34593333
/// Writes the separator between a type annotation and a variable or
34603334
/// parameter. If the preceding type annotation ends in a delimited list of
34613335
/// elements that have block formatting, then we don't split between the

test/comments/patterns.stmt

Lines changed: 0 additions & 78 deletions
This file was deleted.

0 commit comments

Comments
 (0)