| Index: lib/src/line_prefix.dart
|
| diff --git a/lib/src/line_prefix.dart b/lib/src/line_prefix.dart
|
| deleted file mode 100644
|
| index f8a707599b677d1625e2100958876e8055393353..0000000000000000000000000000000000000000
|
| --- a/lib/src/line_prefix.dart
|
| +++ /dev/null
|
| @@ -1,120 +0,0 @@
|
| -// Copyright (c) 2014, 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.line_prefix;
|
| -
|
| -import 'chunk.dart';
|
| -import 'nesting.dart';
|
| -import 'rule/rule.dart';
|
| -
|
| -/// A prefix of a series of chunks and the context needed to uniquely describe
|
| -/// any shared state between the preceding and following chunks.
|
| -///
|
| -/// This is used by [LineSplitter] to memoize suffixes whose best splits have
|
| -/// previously been calculated. For each unique [LinePrefix], there is a single
|
| -/// set of best splits for the remainder of the line following it.
|
| -///
|
| -/// [LinePrefix] is a value type. It overloads [hashCode] and [==] and it's
|
| -/// critical that those be correct and efficient. These objects are used as
|
| -/// keys in the [LineSplitter]'s memoization table.
|
| -class LinePrefix {
|
| - /// The number of chunks in the prefix.
|
| - ///
|
| - /// The suffix is the remaining chunks starting at index [length].
|
| - final int length;
|
| -
|
| - /// The [Rule]s that apply to chunks in the prefix and have thus already had
|
| - /// their values selected.
|
| - ///
|
| - /// Does not include rules that do not also appear in the suffix since they
|
| - /// don't affect the suffix.
|
| - final Map<Rule, int> ruleValues;
|
| -
|
| - /// The number of characters of "statement-based" indentation of the line
|
| - /// after the prefix.
|
| - ///
|
| - /// This handles things like control flow, switch cases, and constructor
|
| - /// initialization lists that tweak the per-line indentation.
|
| - ///
|
| - /// For nested blocks, this also includes the indentation to push the entire
|
| - /// block over.
|
| - final int _indent;
|
| -
|
| - final NestingSplitter _nesting;
|
| -
|
| - /// The absolute starting column of the line after this chunk.
|
| - ///
|
| - /// This takes into account whether the line should be flush left or not.
|
| - int get column => _flushLeft ? 0 : _indent + _nesting.indent;
|
| - final bool _flushLeft;
|
| -
|
| - /// Creates a new zero-length prefix with initial [indent] whose suffix is
|
| - /// the entire line.
|
| - LinePrefix(int indent, {bool flushLeft})
|
| - : this._(0, {}, indent, new NestingSplitter(), flushLeft: flushLeft);
|
| -
|
| - LinePrefix._(this.length, this.ruleValues, this._indent, this._nesting,
|
| - {bool flushLeft: false})
|
| - : _flushLeft = flushLeft;
|
| -
|
| - bool operator ==(other) {
|
| - if (other is! LinePrefix) return false;
|
| -
|
| - if (length != other.length) return false;
|
| - if (_indent != other._indent) return false;
|
| - if (_flushLeft != other._flushLeft) return false;
|
| - if (_nesting != other._nesting) return false;
|
| -
|
| - // Compare rule values.
|
| - if (ruleValues.length != other.ruleValues.length) return false;
|
| -
|
| - for (var key in ruleValues.keys) {
|
| - if (other.ruleValues[key] != ruleValues[key]) return false;
|
| - }
|
| -
|
| - return true;
|
| - }
|
| -
|
| - int get hashCode => length.hashCode ^ _indent ^ _nesting.hashCode;
|
| -
|
| - /// Create a new LinePrefix one chunk longer than this one using [ruleValues],
|
| - /// and assuming that we do not split before that chunk.
|
| - LinePrefix extend(Map<Rule, int> ruleValues) =>
|
| - new LinePrefix._(length + 1, ruleValues, _indent, _nesting,
|
| - flushLeft: _flushLeft);
|
| -
|
| - /// Create a series of new LinePrefixes one chunk longer than this one using
|
| - /// [ruleValues], and assuming that the new [chunk] splits at an expression
|
| - /// boundary so there may be multiple possible different nesting stacks.
|
| - ///
|
| - /// If this prefix is for a nested block, [blockIndentation] may be nonzero
|
| - /// to push the output to the right.
|
| - Iterable<LinePrefix> split(
|
| - Chunk chunk, int blockIndentation, Map<Rule, int> ruleValues) {
|
| - var indent = chunk.indent + blockIndentation;
|
| - var flushLeft = chunk.flushLeft;
|
| -
|
| - // If the chunk has a block, then its flushLeft property is for the first
|
| - // line of the block, not the line after the block. The line after the block
|
| - // is never flush left since it will always be for a `}` or `]`.
|
| - if (chunk.blockChunks.isNotEmpty) flushLeft = false;
|
| -
|
| - return _nesting.update(chunk.nesting).map((nesting) => new LinePrefix._(
|
| - length + 1, ruleValues, indent, nesting,
|
| - flushLeft: flushLeft));
|
| - }
|
| -
|
| - String toString() {
|
| - var result = "prefix $length";
|
| - if (_indent != 0) result += " indent ${_indent}";
|
| - if (_nesting.indent != 0) result += " nesting ${_nesting.indent}";
|
| - if (ruleValues.isNotEmpty) {
|
| - var rules =
|
| - ruleValues.keys.map((key) => "$key:${ruleValues[key]}").join(" ");
|
| -
|
| - result += " rules $rules";
|
| - }
|
| - return result;
|
| - }
|
| -}
|
|
|