OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library dart_style.src.source_visitor; | 5 library dart_style.src.source_visitor; |
6 | 6 |
7 import 'package:analyzer/analyzer.dart'; | 7 import 'package:analyzer/analyzer.dart'; |
8 import 'package:analyzer/src/generated/scanner.dart'; | 8 import 'package:analyzer/src/generated/scanner.dart'; |
9 import 'package:analyzer/src/generated/source.dart'; | 9 import 'package:analyzer/src/generated/source.dart'; |
10 | 10 |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 space(); | 526 space(); |
527 | 527 |
528 visit(node.elseExpression); | 528 visit(node.elseExpression); |
529 | 529 |
530 builder.endRule(); | 530 builder.endRule(); |
531 builder.endSpan(); | 531 builder.endSpan(); |
532 builder.endBlockArgumentNesting(); | 532 builder.endBlockArgumentNesting(); |
533 builder.unnest(); | 533 builder.unnest(); |
534 } | 534 } |
535 | 535 |
| 536 visitConfiguration(Configuration node) { |
| 537 token(node.ifKeyword); |
| 538 space(); |
| 539 token(node.leftParenthesis); |
| 540 visit(node.name); |
| 541 |
| 542 if (node.equalToken != null) { |
| 543 builder.nestExpression(); |
| 544 space(); |
| 545 token(node.equalToken); |
| 546 soloSplit(); |
| 547 visit(node.value); |
| 548 builder.unnest(); |
| 549 } |
| 550 |
| 551 token(node.rightParenthesis); |
| 552 space(); |
| 553 visit(node.libraryUri); |
| 554 } |
| 555 |
536 visitConstructorDeclaration(ConstructorDeclaration node) { | 556 visitConstructorDeclaration(ConstructorDeclaration node) { |
537 visitMemberMetadata(node.metadata); | 557 visitMemberMetadata(node.metadata); |
538 | 558 |
539 modifier(node.externalKeyword); | 559 modifier(node.externalKeyword); |
540 modifier(node.constKeyword); | 560 modifier(node.constKeyword); |
541 modifier(node.factoryKeyword); | 561 modifier(node.factoryKeyword); |
542 visit(node.returnType); | 562 visit(node.returnType); |
543 token(node.period); | 563 token(node.period); |
544 visit(node.name); | 564 visit(node.name); |
545 | 565 |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 token(node.whileKeyword); | 679 token(node.whileKeyword); |
660 space(); | 680 space(); |
661 token(node.leftParenthesis); | 681 token(node.leftParenthesis); |
662 soloZeroSplit(); | 682 soloZeroSplit(); |
663 visit(node.condition); | 683 visit(node.condition); |
664 token(node.rightParenthesis); | 684 token(node.rightParenthesis); |
665 token(node.semicolon); | 685 token(node.semicolon); |
666 builder.unnest(); | 686 builder.unnest(); |
667 } | 687 } |
668 | 688 |
| 689 visitDottedName(DottedName node) { |
| 690 for (var component in node.components) { |
| 691 // Write the preceding ".". |
| 692 if (component != node.components.first) { |
| 693 token(component.beginToken.previous); |
| 694 } |
| 695 |
| 696 visit(component); |
| 697 } |
| 698 } |
| 699 |
669 visitDoubleLiteral(DoubleLiteral node) { | 700 visitDoubleLiteral(DoubleLiteral node) { |
670 token(node.literal); | 701 token(node.literal); |
671 } | 702 } |
672 | 703 |
673 visitEmptyFunctionBody(EmptyFunctionBody node) { | 704 visitEmptyFunctionBody(EmptyFunctionBody node) { |
674 token(node.semicolon); | 705 token(node.semicolon); |
675 } | 706 } |
676 | 707 |
677 visitEmptyStatement(EmptyStatement node) { | 708 visitEmptyStatement(EmptyStatement node) { |
678 token(node.semicolon); | 709 token(node.semicolon); |
(...skipping 17 matching lines...) Expand all Loading... |
696 } | 727 } |
697 | 728 |
698 visitExportDirective(ExportDirective node) { | 729 visitExportDirective(ExportDirective node) { |
699 visitDeclarationMetadata(node.metadata); | 730 visitDeclarationMetadata(node.metadata); |
700 | 731 |
701 _simpleStatement(node, () { | 732 _simpleStatement(node, () { |
702 token(node.keyword); | 733 token(node.keyword); |
703 space(); | 734 space(); |
704 visit(node.uri); | 735 visit(node.uri); |
705 | 736 |
| 737 _visitConfigurations(node.configurations); |
| 738 |
706 builder.startRule(new CombinatorRule()); | 739 builder.startRule(new CombinatorRule()); |
707 visitNodes(node.combinators); | 740 visitNodes(node.combinators); |
708 builder.endRule(); | 741 builder.endRule(); |
709 }); | 742 }); |
710 } | 743 } |
711 | 744 |
712 visitExpressionFunctionBody(ExpressionFunctionBody node) { | 745 visitExpressionFunctionBody(ExpressionFunctionBody node) { |
713 // Space after the parameter list. | 746 // Space after the parameter list. |
714 space(); | 747 space(); |
715 | 748 |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1055 } | 1088 } |
1056 | 1089 |
1057 visitImportDirective(ImportDirective node) { | 1090 visitImportDirective(ImportDirective node) { |
1058 visitDeclarationMetadata(node.metadata); | 1091 visitDeclarationMetadata(node.metadata); |
1059 | 1092 |
1060 _simpleStatement(node, () { | 1093 _simpleStatement(node, () { |
1061 token(node.keyword); | 1094 token(node.keyword); |
1062 space(); | 1095 space(); |
1063 visit(node.uri); | 1096 visit(node.uri); |
1064 | 1097 |
| 1098 _visitConfigurations(node.configurations); |
| 1099 |
1065 if (node.asKeyword != null) { | 1100 if (node.asKeyword != null) { |
1066 soloSplit(); | 1101 soloSplit(); |
1067 token(node.deferredKeyword, after: space); | 1102 token(node.deferredKeyword, after: space); |
1068 token(node.asKeyword); | 1103 token(node.asKeyword); |
1069 space(); | 1104 space(); |
1070 visit(node.prefix); | 1105 visit(node.prefix); |
1071 } | 1106 } |
1072 | 1107 |
1073 builder.startRule(new CombinatorRule()); | 1108 builder.startRule(new CombinatorRule()); |
1074 visitNodes(node.combinators); | 1109 visitNodes(node.combinators); |
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1990 | 2025 |
1991 builder = builder.endBlock(ignoredRule, | 2026 builder = builder.endBlock(ignoredRule, |
1992 forceSplit: hasLeadingNewline || forceSplit); | 2027 forceSplit: hasLeadingNewline || forceSplit); |
1993 | 2028 |
1994 builder.endRule(); | 2029 builder.endRule(); |
1995 | 2030 |
1996 // Now write the delimiter itself. | 2031 // Now write the delimiter itself. |
1997 _writeText(rightBracket.lexeme, rightBracket.offset); | 2032 _writeText(rightBracket.lexeme, rightBracket.offset); |
1998 } | 2033 } |
1999 | 2034 |
| 2035 /// Visits a list of configurations in an import or export directive. |
| 2036 void _visitConfigurations(NodeList<Configuration> configurations) { |
| 2037 if (configurations.isEmpty) return; |
| 2038 |
| 2039 builder.startRule(); |
| 2040 |
| 2041 for (var configuration in configurations) { |
| 2042 split(); |
| 2043 visit(configuration); |
| 2044 } |
| 2045 |
| 2046 builder.endRule(); |
| 2047 } |
| 2048 |
2000 /// Visits a "combinator". | 2049 /// Visits a "combinator". |
2001 /// | 2050 /// |
2002 /// This is a [keyword] followed by a list of [nodes], with specific line | 2051 /// This is a [keyword] followed by a list of [nodes], with specific line |
2003 /// splitting rules. As the name implies, this is used for [HideCombinator] | 2052 /// splitting rules. As the name implies, this is used for [HideCombinator] |
2004 /// and [ShowCombinator], but it also used for "with" and "implements" | 2053 /// and [ShowCombinator], but it also used for "with" and "implements" |
2005 /// clauses in class declarations, which are formatted the same way. | 2054 /// clauses in class declarations, which are formatted the same way. |
2006 /// | 2055 /// |
2007 /// This assumes the current rule is a [CombinatorRule]. | 2056 /// This assumes the current rule is a [CombinatorRule]. |
2008 void _visitCombinator(Token keyword, Iterable<AstNode> nodes) { | 2057 void _visitCombinator(Token keyword, Iterable<AstNode> nodes) { |
2009 // Allow splitting before the keyword. | 2058 // Allow splitting before the keyword. |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2362 /// Gets the 1-based line number that the beginning of [token] lies on. | 2411 /// Gets the 1-based line number that the beginning of [token] lies on. |
2363 int _startLine(Token token) => _lineInfo.getLocation(token.offset).lineNumber; | 2412 int _startLine(Token token) => _lineInfo.getLocation(token.offset).lineNumber; |
2364 | 2413 |
2365 /// Gets the 1-based line number that the end of [token] lies on. | 2414 /// Gets the 1-based line number that the end of [token] lies on. |
2366 int _endLine(Token token) => _lineInfo.getLocation(token.end).lineNumber; | 2415 int _endLine(Token token) => _lineInfo.getLocation(token.end).lineNumber; |
2367 | 2416 |
2368 /// Gets the 1-based column number that the beginning of [token] lies on. | 2417 /// Gets the 1-based column number that the beginning of [token] lies on. |
2369 int _startColumn(Token token) => | 2418 int _startColumn(Token token) => |
2370 _lineInfo.getLocation(token.offset).columnNumber; | 2419 _lineInfo.getLocation(token.offset).columnNumber; |
2371 } | 2420 } |
OLD | NEW |