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 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 builder.startRule(); | 842 builder.startRule(); |
843 | 843 |
844 // The initialization clause. | 844 // The initialization clause. |
845 if (node.initialization != null) { | 845 if (node.initialization != null) { |
846 visit(node.initialization); | 846 visit(node.initialization); |
847 } else if (node.variables != null) { | 847 } else if (node.variables != null) { |
848 // Indent split variables more so they aren't at the same level | 848 // Indent split variables more so they aren't at the same level |
849 // as the rest of the loop clauses. | 849 // as the rest of the loop clauses. |
850 builder.indent(Indent.loopVariable); | 850 builder.indent(Indent.loopVariable); |
851 | 851 |
| 852 // Allow the variables to stay unsplit even if the clauses split. |
| 853 builder.startRule(); |
| 854 |
852 var declaration = node.variables; | 855 var declaration = node.variables; |
853 visitDeclarationMetadata(declaration.metadata); | 856 visitDeclarationMetadata(declaration.metadata); |
854 modifier(declaration.keyword); | 857 modifier(declaration.keyword); |
855 visit(declaration.type, after: space); | 858 visit(declaration.type, after: space); |
856 | 859 |
857 visitCommaSeparatedNodes(declaration.variables, between: () { | 860 visitCommaSeparatedNodes(declaration.variables, between: () { |
858 split(); | 861 split(); |
859 }); | 862 }); |
860 | 863 |
| 864 builder.endRule(); |
861 builder.unindent(); | 865 builder.unindent(); |
862 } | 866 } |
863 | 867 |
864 token(node.leftSeparator); | 868 token(node.leftSeparator); |
865 | 869 |
866 // The condition clause. | 870 // The condition clause. |
867 if (node.condition != null) split(); | 871 if (node.condition != null) split(); |
868 visit(node.condition); | 872 visit(node.condition); |
869 token(node.rightSeparator); | 873 token(node.rightSeparator); |
870 | 874 |
871 // The update clause. | 875 // The update clause. |
872 if (node.updaters.isNotEmpty) { | 876 if (node.updaters.isNotEmpty) { |
873 split(); | 877 split(); |
| 878 |
| 879 // Allow the updates to stay unsplit even if the clauses split. |
| 880 builder.startRule(); |
| 881 |
874 visitCommaSeparatedNodes(node.updaters, between: split); | 882 visitCommaSeparatedNodes(node.updaters, between: split); |
| 883 |
| 884 builder.endRule(); |
875 } | 885 } |
876 | 886 |
877 token(node.rightParenthesis); | 887 token(node.rightParenthesis); |
878 builder.endRule(); | 888 builder.endRule(); |
879 builder.unnest(); | 889 builder.unnest(); |
880 | 890 |
881 // The body. | 891 // The body. |
882 if (node.body is! EmptyStatement) space(); | 892 if (node.body is! EmptyStatement) space(); |
883 visit(node.body); | 893 visit(node.body); |
884 } | 894 } |
(...skipping 1251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2136 /// Gets the 1-based line number that the beginning of [token] lies on. | 2146 /// Gets the 1-based line number that the beginning of [token] lies on. |
2137 int _startLine(Token token) => _lineInfo.getLocation(token.offset).lineNumber; | 2147 int _startLine(Token token) => _lineInfo.getLocation(token.offset).lineNumber; |
2138 | 2148 |
2139 /// Gets the 1-based line number that the end of [token] lies on. | 2149 /// Gets the 1-based line number that the end of [token] lies on. |
2140 int _endLine(Token token) => _lineInfo.getLocation(token.end).lineNumber; | 2150 int _endLine(Token token) => _lineInfo.getLocation(token.end).lineNumber; |
2141 | 2151 |
2142 /// Gets the 1-based column number that the beginning of [token] lies on. | 2152 /// Gets the 1-based column number that the beginning of [token] lies on. |
2143 int _startColumn(Token token) => | 2153 int _startColumn(Token token) => |
2144 _lineInfo.getLocation(token.offset).columnNumber; | 2154 _lineInfo.getLocation(token.offset).columnNumber; |
2145 } | 2155 } |
OLD | NEW |