Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: lib/src/argument_list_visitor.dart

Issue 1182953003: Eat some dogfood! (Closed) Base URL: https://github.com/dart-lang/dart_style.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.argument_list_visitor; 5 library dart_style.src.argument_list_visitor;
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 8
9 import 'chunk.dart'; 9 import 'chunk.dart';
10 import 'rule/argument.dart'; 10 import 'rule/argument.dart';
(...skipping 29 matching lines...) Expand all
40 40
41 /// The rule used to split the bodies of all of the block arguments. 41 /// The rule used to split the bodies of all of the block arguments.
42 Rule get _blockArgumentRule { 42 Rule get _blockArgumentRule {
43 // Lazy initialize. 43 // Lazy initialize.
44 if (_blockRule == null && _blockArguments.isNotEmpty) { 44 if (_blockRule == null && _blockArguments.isNotEmpty) {
45 _blockRule = new SimpleRule(cost: Cost.splitBlocks); 45 _blockRule = new SimpleRule(cost: Cost.splitBlocks);
46 } 46 }
47 47
48 return _blockRule; 48 return _blockRule;
49 } 49 }
50
50 Rule _blockRule; 51 Rule _blockRule;
51 52
52 /// Returns `true` if there is only a single positional argument. 53 /// Returns `true` if there is only a single positional argument.
53 bool get _isSingle => _positional.length == 1 && _named.isEmpty; 54 bool get _isSingle => _positional.length == 1 && _named.isEmpty;
54 55
55 /// Whether this argument list has any block arguments that are functions. 56 /// Whether this argument list has any block arguments that are functions.
56 bool get hasFunctionBlockArguments => _blockArguments.any(_isBlockFunction); 57 bool get hasFunctionBlockArguments => _blockArguments.any(_isBlockFunction);
57 58
58 bool get hasBlockArguments => _blockArguments.isNotEmpty; 59 bool get hasBlockArguments => _blockArguments.isNotEmpty;
59 60
60 /// Whether this argument list should force the containing method chain to 61 /// Whether this argument list should force the containing method chain to
61 /// add a level of block nesting. 62 /// add a level of block nesting.
62 bool get nestMethodArguments { 63 bool get nestMethodArguments {
63 // If there are block arguments, we don't want the method to force them to 64 // If there are block arguments, we don't want the method to force them to
64 // the right. 65 // the right.
65 if (_blockArguments.isNotEmpty) return false; 66 if (_blockArguments.isNotEmpty) return false;
66 67
67 // Corner case: If there is just a single argument, don't bump the nesting. 68 // Corner case: If there is just a single argument, don't bump the nesting.
68 // This lets us avoid spurious indentation in cases like: 69 // This lets us avoid spurious indentation in cases like:
69 // 70 //
70 // object.method(function(() { 71 // object.method(function(() {
71 // body; 72 // body;
72 // })); 73 // }));
73 return _node.arguments.length > 1; 74 return _node.arguments.length > 1;
74 } 75 }
75 76
76 factory ArgumentListVisitor(SourceVisitor visitor, ArgumentList node) { 77 factory ArgumentListVisitor(SourceVisitor visitor, ArgumentList node) {
77 // Assumes named arguments follow all positional ones. 78 // Assumes named arguments follow all positional ones.
78 var positional = node.arguments 79 var positional =
79 .takeWhile((arg) => arg is! NamedExpression).toList(); 80 node.arguments.takeWhile((arg) => arg is! NamedExpression).toList();
80 var named = node.arguments.skip(positional.length).toList(); 81 var named = node.arguments.skip(positional.length).toList();
81 82
82 var blocks = node.arguments.where(_isBlockArgument).toSet(); 83 var blocks = node.arguments.where(_isBlockArgument).toSet();
83 84
84 // Count the leading arguments that are block literals. 85 // Count the leading arguments that are block literals.
85 var leadingBlocks = 0; 86 var leadingBlocks = 0;
86 for (var argument in node.arguments) { 87 for (var argument in node.arguments) {
87 if (!blocks.contains(argument)) break; 88 if (!blocks.contains(argument)) break;
88 leadingBlocks++; 89 leadingBlocks++;
89 } 90 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 var positionalRule = rule; 202 var positionalRule = rule;
202 var namedRule = new NamedRule(_blockArgumentRule); 203 var namedRule = new NamedRule(_blockArgumentRule);
203 _visitor.builder.startRule(namedRule); 204 _visitor.builder.startRule(namedRule);
204 205
205 // Let the positional args force the named ones to split. 206 // Let the positional args force the named ones to split.
206 if (positionalRule != null) { 207 if (positionalRule != null) {
207 positionalRule.setNamedArgsRule(namedRule); 208 positionalRule.setNamedArgsRule(namedRule);
208 } 209 }
209 210
210 // Split before the first named argument. 211 // Split before the first named argument.
211 namedRule.beforeArguments( 212 namedRule
212 _visitor.builder.split(space: _positional.isNotEmpty)); 213 .beforeArguments(_visitor.builder.split(space: _positional.isNotEmpty));
213 214
214 for (var argument in _named) { 215 for (var argument in _named) {
215 _writeArgument(namedRule, argument); 216 _writeArgument(namedRule, argument);
216 217
217 // Write the split. 218 // Write the split.
218 if (argument != _named.last) _visitor.split(); 219 if (argument != _named.last) _visitor.split();
219 } 220 }
220 221
221 _visitor.builder.endRule(); 222 _visitor.builder.endRule();
222 } 223 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 if (expression is NamedExpression) { 281 if (expression is NamedExpression) {
281 expression = (expression as NamedExpression).expression; 282 expression = (expression as NamedExpression).expression;
282 } 283 }
283 284
284 // Curly body functions are. 285 // Curly body functions are.
285 if (expression is! FunctionExpression) return false; 286 if (expression is! FunctionExpression) return false;
286 var function = expression as FunctionExpression; 287 var function = expression as FunctionExpression;
287 return function.body is BlockFunctionBody; 288 return function.body is BlockFunctionBody;
288 } 289 }
289 } 290 }
OLDNEW
« no previous file with comments | « bin/format.dart ('k') | lib/src/call_chain_visitor.dart » ('j') | lib/src/source_visitor.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698