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.call_chain_visitor; | 5 library dart_style.src.call_chain_visitor; |
6 | 6 |
7 import 'package:analyzer/analyzer.dart'; | 7 import 'package:analyzer/analyzer.dart'; |
8 | 8 |
9 import 'argument_list_visitor.dart'; | 9 import 'argument_list_visitor.dart'; |
10 import 'rule/argument.dart'; | 10 import 'rule/argument.dart'; |
(...skipping 12 matching lines...) Expand all Loading... |
23 final Expression _target; | 23 final Expression _target; |
24 | 24 |
25 /// The list of dotted names ([PropertyAccess] and [PrefixedIdentifier] at | 25 /// The list of dotted names ([PropertyAccess] and [PrefixedIdentifier] at |
26 /// the start of the call chain. | 26 /// the start of the call chain. |
27 /// | 27 /// |
28 /// This will be empty if the [_target] is not a [SimpleIdentifier]. | 28 /// This will be empty if the [_target] is not a [SimpleIdentifier]. |
29 final List<Expression> _properties; | 29 final List<Expression> _properties; |
30 | 30 |
31 /// The mixed method calls and property accesses in the call chain in the | 31 /// The mixed method calls and property accesses in the call chain in the |
32 /// order that they appear in the source. | 32 /// order that they appear in the source. |
33 final List <Expression> _calls; | 33 final List<Expression> _calls; |
34 | 34 |
35 /// Whether or not a [Rule] is currently active for the call chain. | 35 /// Whether or not a [Rule] is currently active for the call chain. |
36 bool _ruleEnabled = false; | 36 bool _ruleEnabled = false; |
37 | 37 |
38 /// Whether or not the span wrapping the call chain is currently active. | 38 /// Whether or not the span wrapping the call chain is currently active. |
39 bool _spanEnded = false; | 39 bool _spanEnded = false; |
40 | 40 |
41 /// Creates a new call chain visitor for [visitor] starting with [node]. | 41 /// Creates a new call chain visitor for [visitor] starting with [node]. |
42 /// | 42 /// |
43 /// The [node] is the outermost expression containing the chained "." | 43 /// The [node] is the outermost expression containing the chained "." |
(...skipping 23 matching lines...) Expand all Loading... |
67 | 67 |
68 // An expression that starts with a series of dotted names gets treated a | 68 // An expression that starts with a series of dotted names gets treated a |
69 // little specially. We don't force leading properties to split with the | 69 // little specially. We don't force leading properties to split with the |
70 // rest of the chain. Allows code like: | 70 // rest of the chain. Allows code like: |
71 // | 71 // |
72 // address.street.number | 72 // address.street.number |
73 // .toString() | 73 // .toString() |
74 // .length; | 74 // .length; |
75 var properties = []; | 75 var properties = []; |
76 if (target is SimpleIdentifier) { | 76 if (target is SimpleIdentifier) { |
77 properties = calls | 77 properties = |
78 .takeWhile((call) => call is! MethodInvocation) | 78 calls.takeWhile((call) => call is! MethodInvocation).toList(); |
79 .toList(); | |
80 } | 79 } |
81 | 80 |
82 calls.removeRange(0, properties.length); | 81 calls.removeRange(0, properties.length); |
83 | 82 |
84 return new CallChainVisitor._(visitor, target, properties, calls); | 83 return new CallChainVisitor._(visitor, target, properties, calls); |
85 } | 84 } |
86 | 85 |
87 CallChainVisitor._( | 86 CallChainVisitor._( |
88 this._visitor, this._target, this._properties, this._calls); | 87 this._visitor, this._target, this._properties, this._calls); |
89 | 88 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 } | 220 } |
222 | 221 |
223 /// Ends the span wrapping the call chain if it hasn't ended already. | 222 /// Ends the span wrapping the call chain if it hasn't ended already. |
224 void _endSpan() { | 223 void _endSpan() { |
225 if (_spanEnded) return; | 224 if (_spanEnded) return; |
226 | 225 |
227 _visitor.builder.endSpan(); | 226 _visitor.builder.endSpan(); |
228 _spanEnded = true; | 227 _spanEnded = true; |
229 } | 228 } |
230 } | 229 } |
OLD | NEW |