Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 library dart_style.src.rule.metadata; | |
| 6 | |
| 7 import 'argument.dart'; | |
| 8 import 'rule.dart'; | |
| 9 | |
| 10 /// Rule for handling splits between parameter metadata annotations and the | |
| 11 /// following parameter. | |
| 12 /// | |
| 13 /// Metadata annotations for parameters (and type parameters) get some special | |
| 14 /// handling. We use a single rule for all annotations in the parameter list. | |
| 15 /// If any of the annotations split, they all do. | |
| 16 /// | |
| 17 /// Also, if the annotations split, we force the entire parameter list to fully | |
| 18 /// split, both named and positional. | |
| 19 class MetadataRule extends SimpleRule { | |
| 20 Rule _positionalRule; | |
| 21 Rule _namedRule; | |
| 22 | |
| 23 /// Remembers that [rule] is the [PositionalRule] used by the argument list | |
| 24 /// containing the parameter metadata using this rule. | |
| 25 void bindPositionalRule(PositionalRule rule) { | |
| 26 _positionalRule = rule; | |
| 27 } | |
| 28 | |
| 29 /// Remembers that [rule] is the [NamedRule] used by the argument list | |
| 30 /// containing the parameter metadata using this rule. | |
| 31 void bindNamedRule(NamedRule rule) { | |
| 32 _namedRule = rule; | |
| 33 } | |
| 34 | |
| 35 /// Constrains the surrounding argument list rules to fully split if the | |
| 36 /// metadata does. | |
| 37 int constrain(int value, Rule other) { | |
| 38 var constrained = super.constrain(value, other); | |
| 39 if (constrained != null) return constrained; | |
| 40 | |
| 41 // If the metadata doesn't split, we don't care what the arguments do. | |
| 42 if (value == 0) return null; | |
|
nweiz
2015/11/30 19:17:01
Consider making a getter for "value == 0", like is
Bob Nystrom
2015/11/30 21:36:14
Done.
| |
| 43 | |
| 44 // Otherwise, they have to split. | |
| 45 if (other == _positionalRule) return _positionalRule.fullySplitValue; | |
| 46 if (other == _namedRule) return _namedRule.fullySplitValue; | |
| 47 | |
| 48 return null; | |
| 49 } | |
| 50 | |
| 51 void addConstrainedRules(Set<Rule> rules) { | |
| 52 if (_positionalRule != null) rules.add(_positionalRule); | |
| 53 if (_namedRule != null) rules.add(_namedRule); | |
| 54 } | |
| 55 | |
| 56 void forgetUnusedRules() { | |
| 57 super.forgetUnusedRules(); | |
| 58 if (_positionalRule != null && _positionalRule.index == null) { | |
| 59 _positionalRule = null; | |
| 60 } | |
| 61 | |
| 62 if (_namedRule != null && _namedRule.index == null) { | |
| 63 _namedRule = null; | |
| 64 } | |
| 65 } | |
| 66 } | |
| OLD | NEW |