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

Unified Diff: dart_style/lib/src/rule/argument.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « dart_style/lib/src/nesting_level.dart ('k') | dart_style/lib/src/rule/combinator.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart_style/lib/src/rule/argument.dart
diff --git a/dart_style/lib/src/rule/argument.dart b/dart_style/lib/src/rule/argument.dart
deleted file mode 100644
index 813bfb1087dba662b5bf0bbfaaf10fa54ab317ee..0000000000000000000000000000000000000000
--- a/dart_style/lib/src/rule/argument.dart
+++ /dev/null
@@ -1,310 +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.argument;
-
-import '../chunk.dart';
-import 'rule.dart';
-
-/// Base class for a rule that handles argument or parameter lists.
-abstract class ArgumentRule extends Rule {
- /// The rule used to split collections in the argument list, if any.
- final Rule _collectionRule;
-
- /// If true, then inner rules that are written will force this rule to split.
- ///
- /// Temporarily disabled while writing collectio arguments so that they can be
- /// multi-line without forcing the whole argument list to split.
- bool _trackInnerRules = true;
-
- /// Don't split when an inner collection rule splits.
- bool get splitsOnInnerRules => _trackInnerRules;
-
- /// Creates a new rule for a positional argument list.
- ///
- /// If [_collectionRule] is given, it is the rule used to split the
- /// collections in the list.
- ArgumentRule(this._collectionRule);
-
- /// Called before a collection argument is written.
- ///
- /// Disables tracking inner rules while a collection argument is written.
- void beforeCollection() {
- assert(_trackInnerRules == true);
- _trackInnerRules = false;
- }
-
- /// Called after a collection argument is complete.
- ///
- /// Re-enables tracking inner rules.
- void afterCollection() {
- assert(_trackInnerRules == false);
- _trackInnerRules = true;
- }
-}
-
-/// Base class for a rule for handling positional argument lists.
-abstract class PositionalRule extends ArgumentRule {
- /// The chunks prior to each positional argument.
- final List<Chunk> _arguments = [];
-
- /// If there are named arguments following these positional ones, this will
- /// be their rule.
- Rule _namedArgsRule;
-
- /// Creates a new rule for a positional argument list.
- ///
- /// If [collectionRule] is given, it is the rule used to split the collection
- /// arguments in the list.
- PositionalRule(Rule collectionRule) : super(collectionRule);
-
- /// Remembers [chunk] as containing the split that occurs right before an
- /// argument in the list.
- void beforeArgument(Chunk chunk) {
- _arguments.add(chunk);
- }
-
- /// Remembers that [rule] is the [NamedArgsRule] immediately following this
- /// positional argument list.
- void setNamedArgsRule(NamedRule rule) {
- _namedArgsRule = rule;
- }
-
- /// Constrains the named argument list to at least move to the next line if
- /// there are any splits in the positional arguments. Prevents things like:
- ///
- /// function(
- /// argument,
- /// argument, named: argument);
- int constrain(int value, Rule other) {
- var constrained = super.constrain(value, other);
- if (constrained != null) return constrained;
-
- // Handle the relationship between the positional and named args.
- if (other == _namedArgsRule) {
- // If the positional args are one-per-line, the named args are too.
- if (value == fullySplitValue) return _namedArgsRule.fullySplitValue;
-
- // Otherwise, if there is any split in the positional arguments, don't
- // allow the named arguments on the same line as them.
- if (value != 0) return -1;
- }
-
- return null;
- }
-}
-
-/// Split rule for a call with a single positional argument (which may or may
-/// not be a collection argument.)
-class SinglePositionalRule extends PositionalRule {
- int get numValues => 2;
-
- /// If there is only a single non-collection argument, allow it to split
- /// internally without forcing a split before the argument.
- final bool splitsOnInnerRules;
-
- bool hack = false;
-
- /// Creates a new rule for a positional argument list.
- ///
- /// If [collectionRule] is given, it is the rule used to split the
- /// collections in the list. If [splitsOnInnerRules] is `true`, then we will
- /// split before the argument if the argument itself contains a split.
- SinglePositionalRule(Rule collectionRule, {bool splitsOnInnerRules})
- : super(collectionRule),
- splitsOnInnerRules =
- splitsOnInnerRules != null ? splitsOnInnerRules : false;
-
- bool isSplit(int value, Chunk chunk) => value == 1;
-
- int constrain(int value, Rule other) {
- var constrained = super.constrain(value, other);
- if (constrained != null) return constrained;
-
- if (other != _collectionRule) return null;
-
- // If we aren't splitting any args, we can split the collection.
- if (value == 0) return null;
-
- // We are splitting before a collection, so don't let it split internally.
- return 0;
- }
-
- String toString() => "1Pos${super.toString()}";
-}
-
-/// Split rule for a call with more than one positional argument.
-///
-/// The number of values is based on the number of arguments and whether or not
-/// there are bodies. The first two values are always:
-///
-/// * 0: Do not split at all.
-/// * 1: Split only before the first argument.
-///
-/// Then there is a value for each argument, to split before that argument.
-/// These values work back to front. So, for a two-argument list, value 2 splits
-/// after the second argument and value 3 splits after the first.
-///
-/// Then there is a value that splits before every argument.
-///
-/// Finally, if there are collection arguments, there is another value that
-/// splits before all of the non-collection arguments, but does not split
-/// before the collections, so that they can split internally.
-class MultiplePositionalRule extends PositionalRule {
- /// The number of leading collection arguments.
- ///
- /// This and [_trailingCollections] cannot both be positive. If every
- /// argument is a collection, this will be [_arguments.length] and
- /// [_trailingCollections] will be 0.
- final int _leadingCollections;
-
- /// The number of trailing collections.
- ///
- /// This and [_leadingCollections] cannot both be positive.
- final int _trailingCollections;
-
- int get numValues {
- // Can split before any one argument, none, or all.
- var result = 2 + _arguments.length;
-
- // When there are collection arguments, there are two ways we can split on
- // "all" arguments:
- //
- // - Split on just the non-collection arguments, and force the collection
- // arguments to split internally.
- // - Split on all of them including the collection arguments, and do not
- // allow the collection arguments to split internally.
- if (_leadingCollections > 0 || _trailingCollections > 0) result++;
-
- return result;
- }
-
- MultiplePositionalRule(
- Rule collectionRule, this._leadingCollections, this._trailingCollections)
- : super(collectionRule);
-
- String toString() => "*Pos${super.toString()}";
-
- bool isSplit(int value, Chunk chunk) {
- // Don't split at all.
- if (value == 0) return false;
-
- // Split only before the first argument. Keep the entire argument list
- // together on the next line.
- if (value == 1) return chunk == _arguments.first;
-
- // Split before a single argument. Try later arguments before earlier ones
- // to try to keep as much on the first line as possible.
- if (value <= _arguments.length) {
- var argument = _arguments.length - value + 1;
- return chunk == _arguments[argument];
- }
-
- // Only split before the non-collection arguments.
- if (value == _arguments.length + 1) {
- for (var i = 0; i < _leadingCollections; i++) {
- if (chunk == _arguments[i]) return false;
- }
-
- for (var i = _arguments.length - _trailingCollections;
- i < _arguments.length;
- i++) {
- if (chunk == _arguments[i]) return false;
- }
-
- return true;
- }
-
- // Split before all of the arguments, even the collections.
- return true;
- }
-
- int constrain(int value, Rule other) {
- var constrained = super.constrain(value, other);
- if (constrained != null) return constrained;
-
- if (other != _collectionRule) return null;
-
- // If we aren't splitting any args, we can split the collection.
- if (value == 0) return null;
-
- // Split only before the first argument.
- if (value == 1) {
- if (_leadingCollections > 0) {
- // We are splitting before a collection, so don't let it split
- // internally.
- return 0;
- } else {
- // The split is outside of the collections so they can split or not.
- return null;
- }
- }
-
- // Split before a single argument. If it's in the middle of the collection
- // arguments, don't allow them to split.
- if (value <= _arguments.length) {
- var argument = _arguments.length - value + 1;
- if (argument < _leadingCollections) return 0;
- if (argument >= _arguments.length - _trailingCollections) return 0;
-
- return null;
- }
-
- // Only split before the non-collection arguments. This case only comes into
- // play when we do want to split the collection, so force that here.
- if (value == _arguments.length + 1) return 1;
-
- // Split before all of the arguments, even the collection, so don't let
- // them split.
- return 0;
- }
-}
-
-/// Splitting rule for a list of named arguments or parameters. Its values mean:
-///
-/// * 0: Do not split at all.
-/// * 1: Split only before first argument.
-/// * 2: Split before all arguments, including the first.
-class NamedRule extends ArgumentRule {
- /// The chunk prior to the first named argument.
- Chunk _first;
-
- int get numValues => 3;
-
- NamedRule(Rule collectionRule) : super(collectionRule);
-
- void beforeArguments(Chunk chunk) {
- assert(_first == null);
- _first = chunk;
- }
-
- bool isSplit(int value, Chunk chunk) {
- switch (value) {
- case 0:
- return false;
- case 1:
- return chunk == _first;
- case 2:
- return true;
- }
-
- throw "unreachable";
- }
-
- int constrain(int value, Rule other) {
- var constrained = super.constrain(value, other);
- if (constrained != null) return constrained;
-
- if (other != _collectionRule) return null;
-
- // If we aren't splitting any args, we can split the collection.
- if (value == 0) return null;
-
- // Split before all of the arguments, even the collections, so don't let
- // them split.
- return 0;
- }
-
- String toString() => "Named${super.toString()}";
-}
« no previous file with comments | « dart_style/lib/src/nesting_level.dart ('k') | dart_style/lib/src/rule/combinator.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698