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

Side by Side Diff: packages/dart_style/lib/src/rule/metadata.dart

Issue 1521693002: Roll Observatory deps (charted -> ^0.3.0) (Closed) Base URL: https://chromium.googlesource.com/external/github.com/dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years 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
(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 Rule {
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 == Rule.unsplit) return null;
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 }
OLDNEW
« no previous file with comments | « packages/dart_style/lib/src/rule/combinator.dart ('k') | packages/dart_style/lib/src/rule/rule.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698