| Index: dart_style/lib/src/rule/rule.dart
|
| diff --git a/dart_style/lib/src/rule/rule.dart b/dart_style/lib/src/rule/rule.dart
|
| deleted file mode 100644
|
| index 43a7f6aae2c14119d5c198a80997627560d981cd..0000000000000000000000000000000000000000
|
| --- a/dart_style/lib/src/rule/rule.dart
|
| +++ /dev/null
|
| @@ -1,120 +0,0 @@
|
| -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library dart_style.src.rule.rule;
|
| -
|
| -import '../chunk.dart';
|
| -import '../fast_hash.dart';
|
| -
|
| -/// A constraint that determines the different ways a related set of chunks may
|
| -/// be split.
|
| -abstract class Rule extends FastHash {
|
| - /// The number of different states this rule can be in.
|
| - ///
|
| - /// Each state determines which set of chunks using this rule are split and
|
| - /// which aren't. Values range from zero to one minus this. Value zero
|
| - /// always means "no chunks are split" and increasing values by convention
|
| - /// mean increasingly undesirable splits.
|
| - int get numValues;
|
| -
|
| - /// The rule value that forces this rule into its maximally split state.
|
| - ///
|
| - /// By convention, this is the highest of the range of allowed values.
|
| - int get fullySplitValue => numValues - 1;
|
| -
|
| - int get cost => Cost.normal;
|
| -
|
| - /// During line splitting [LineSplitter] sets this to the index of this
|
| - /// rule in its list of rules.
|
| - int index;
|
| -
|
| - /// The other [Rule]s that "surround" this one (and care about that fact).
|
| - ///
|
| - /// In many cases, if a split occurs inside an expression, surrounding rules
|
| - /// also want to split too. For example, a split in the middle of an argument
|
| - /// forces the entire argument list to also split.
|
| - ///
|
| - /// This tracks those relationships. If this rule splits, (sets its value to
|
| - /// [fullySplitValue]) then all of the outer rules will also be set to their
|
| - /// fully split value.
|
| - ///
|
| - /// This contains all direct as well as transitive relationships. If A
|
| - /// contains B which contains C, C's outerRules contains both B and A.
|
| - Iterable<Rule> get outerRules => _outerRules;
|
| - final Set<Rule> _outerRules = new Set<Rule>();
|
| -
|
| - /// Adds [inner] as an inner rule of this rule if it cares about inner rules.
|
| - ///
|
| - /// When an inner rule splits, it forces any surrounding outer rules to also
|
| - /// split.
|
| - void contain(Rule inner) {
|
| - if (!splitsOnInnerRules) return;
|
| - inner._outerRules.add(this);
|
| - }
|
| -
|
| - /// Whether this rule cares about rules that it contains.
|
| - ///
|
| - /// If `true` then inner rules will constrain this one and force it to split
|
| - /// when they split. Otherwise, it can split independently of any contained
|
| - /// rules.
|
| - bool get splitsOnInnerRules => true;
|
| -
|
| - bool isSplit(int value, Chunk chunk);
|
| -
|
| - /// Given that this rule has [value], determine if [other]'s value should be
|
| - /// constrained.
|
| - ///
|
| - /// Allows relationships between rules like "if I split, then this should
|
| - /// split too". Returns a non-negative value to force [other] to take that
|
| - /// value. Returns -1 to allow [other] to take any non-zero value. Returns
|
| - /// null to not constrain other.
|
| - int constrain(int value, Rule other) {
|
| - // By default, any implied rule will be fully split if this one is fully
|
| - // split.
|
| - if (value == 0) return null;
|
| - if (_outerRules.contains(other)) return other.fullySplitValue;
|
| -
|
| - return null;
|
| - }
|
| -
|
| - String toString() => "$id";
|
| -}
|
| -
|
| -/// A rule that always splits a chunk.
|
| -class HardSplitRule extends Rule {
|
| - int get numValues => 1;
|
| -
|
| - /// It's always going to be applied, so there's no point in penalizing it.
|
| - ///
|
| - /// Also, this avoids doubled counting in literal blocks where there is both
|
| - /// a split in the outer chunk containing the block and the inner hard split
|
| - /// between the elements or statements.
|
| - int get cost => 0;
|
| -
|
| - /// It's always split anyway.
|
| - bool get splitsOnInnerRules => false;
|
| -
|
| - bool isSplit(int value, Chunk chunk) => true;
|
| -
|
| - String toString() => "Hard";
|
| -}
|
| -
|
| -/// A basic rule that has two states: unsplit or split.
|
| -class SimpleRule extends Rule {
|
| - /// Two values: 0 is unsplit, 1 is split.
|
| - int get numValues => 2;
|
| -
|
| - final int cost;
|
| -
|
| - final bool splitsOnInnerRules;
|
| -
|
| - SimpleRule({int cost, bool splitsOnInnerRules})
|
| - : cost = cost != null ? cost : Cost.normal,
|
| - splitsOnInnerRules =
|
| - splitsOnInnerRules != null ? splitsOnInnerRules : true;
|
| -
|
| - bool isSplit(int value, Chunk chunk) => value == 1;
|
| -
|
| - String toString() => "Simple${super.toString()}";
|
| -}
|
|
|