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

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

Issue 1252323003: Allow arguments before and after block-formatted functions. (Closed) Base URL: https://github.com/dart-lang/dart_style.git@master
Patch Set: Update pubspec and changelog. Created 5 years, 5 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 | « lib/src/chunk.dart ('k') | lib/src/source_visitor.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/rule/argument.dart
diff --git a/lib/src/rule/argument.dart b/lib/src/rule/argument.dart
index 95768a4f6e1c7a6e65c8f79446801d6156018bab..8e08fba37414278cd14cf63eb7e1378b7dc9e49a 100644
--- a/lib/src/rule/argument.dart
+++ b/lib/src/rule/argument.dart
@@ -9,36 +9,36 @@ import 'rule.dart';
/// Base class for a rule that handles argument or parameter lists.
abstract class ArgumentRule extends Rule {
- /// The rule used to split block arguments in the argument list, if any.
- final Rule _blockRule;
+ /// 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 block arguments so that they can be
+ /// 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 block rule splits.
+ /// Don't split when an inner collection rule splits.
bool get splitsOnInnerRules => _trackInnerRules;
/// Creates a new rule for a positional argument list.
///
- /// If [_blockRule] is given, it is the rule used to split the block
- /// arguments in the list.
- ArgumentRule(this._blockRule);
+ /// If [_collectionRule] is given, it is the rule used to split the
+ /// collections in the list.
+ ArgumentRule(this._collectionRule);
- /// Called before a block argument is written.
+ /// Called before a collection argument is written.
///
- /// Disables tracking inner rules while a block argument is being written.
- void beforeBlockArgument() {
+ /// Disables tracking inner rules while a collection argument is written.
+ void beforeCollection() {
assert(_trackInnerRules == true);
_trackInnerRules = false;
}
- /// Called after a block argument is complete.
+ /// Called after a collection argument is complete.
///
- /// Re-enables tracking inner rules after a block argument is complete.
- void afterBlockArgument() {
+ /// Re-enables tracking inner rules.
+ void afterCollection() {
assert(_trackInnerRules == false);
_trackInnerRules = true;
}
@@ -55,9 +55,9 @@ abstract class PositionalRule extends ArgumentRule {
/// Creates a new rule for a positional argument list.
///
- /// If [blockRule] is given, it is the rule used to split the block arguments
- /// in the list.
- PositionalRule(Rule blockRule) : super(blockRule);
+ /// 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.
@@ -96,20 +96,26 @@ abstract class PositionalRule extends ArgumentRule {
}
/// Split rule for a call with a single positional argument (which may or may
-/// not be a block argument.)
+/// not be a collection argument.)
class SinglePositionalRule extends PositionalRule {
int get numValues => 2;
- /// If there is only a single argument, allow it to split internally without
- /// forcing a split before the argument.
- bool get splitsOnInnerRules => false;
+ /// 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 [blockRule] is given, it is the rule used to split the block arguments
- /// in the list. If [isSingleArgument] is `true`, then the argument list will
- /// only contain a single argument.
- SinglePositionalRule(Rule blockRule) : super(blockRule);
+ /// 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;
@@ -117,12 +123,12 @@ class SinglePositionalRule extends PositionalRule {
var constrained = super.constrain(value, other);
if (constrained != null) return constrained;
- if (other != _blockRule) return null;
+ if (other != _collectionRule) return null;
- // If we aren't splitting any args, we can split the block.
+ // If we aren't splitting any args, we can split the collection.
if (value == 0) return null;
- // We are splitting before a block, so don't let it split internally.
+ // We are splitting before a collection, so don't let it split internally.
return 0;
}
@@ -143,40 +149,41 @@ class SinglePositionalRule extends PositionalRule {
///
/// Then there is a value that splits before every argument.
///
-/// Finally, if there are block arguments, there is another value that splits
-/// before all of the non-block arguments, but does not split before the block
-/// ones, so that they can split internally.
+/// 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 block arguments.
+ /// The number of leading collection arguments.
///
- /// This and [_trailingBlocks] cannot both be positive. If every argument is
- /// a block, this will be [_arguments.length] and [_trailingBlocks] will be 0.
- final int _leadingBlocks;
+ /// 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 block arguments.
+ /// The number of trailing collections.
///
- /// This and [_leadingBlocks] cannot both be positive.
- final int _trailingBlocks;
+ /// 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 block arguments, there are two ways we can split on "all"
- // arguments:
+ // When there are collection arguments, there are two ways we can split on
+ // "all" arguments:
//
- // - Split on just the non-block arguments, and force the block arguments
- // to split internally.
- // - Split on all of them including the block arguments, and do not allow
- // the block arguments to split internally.
- if (_leadingBlocks > 0 || _trailingBlocks > 0) result++;
+ // - 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 blockRule, this._leadingBlocks, this._trailingBlocks)
- : super(blockRule);
+ Rule collectionRule, this._leadingCollections, this._trailingCollections)
+ : super(collectionRule);
String toString() => "*Pos${super.toString()}";
@@ -195,24 +202,13 @@ class MultiplePositionalRule extends PositionalRule {
return chunk == _arguments[argument];
}
- // Only split before the non-block arguments. Note that we consider this
- // case to correctly prefer this over the latter case because function
- // block arguments always split internally. Preferring this case ensures we
- // avoid:
- //
- // function( // <-- :(
- // () {
- // ...
- // }),
- // argument,
- // ...
- // argument;
+ // Only split before the non-collection arguments.
if (value == _arguments.length + 1) {
- for (var i = 0; i < _leadingBlocks; i++) {
+ for (var i = 0; i < _leadingCollections; i++) {
if (chunk == _arguments[i]) return false;
}
- for (var i = _arguments.length - _trailingBlocks;
+ for (var i = _arguments.length - _trailingCollections;
i < _arguments.length;
i++) {
if (chunk == _arguments[i]) return false;
@@ -221,7 +217,7 @@ class MultiplePositionalRule extends PositionalRule {
return true;
}
- // Split before all of the arguments, even the block ones.
+ // Split before all of the arguments, even the collections.
return true;
}
@@ -229,37 +225,38 @@ class MultiplePositionalRule extends PositionalRule {
var constrained = super.constrain(value, other);
if (constrained != null) return constrained;
- if (other != _blockRule) return null;
+ if (other != _collectionRule) return null;
- // If we aren't splitting any args, we can split the block.
+ // 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 (_leadingBlocks > 0) {
- // We are splitting before a block, so don't let it split internally.
+ 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 blocks so they can split or not.
+ // 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 block
+ // 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 < _leadingBlocks) return 0;
- if (argument >= _arguments.length - _trailingBlocks) return 0;
+ if (argument < _leadingCollections) return 0;
+ if (argument >= _arguments.length - _trailingCollections) return 0;
return null;
}
- // Only split before the non-block arguments. This case only comes into
- // play when we do want to split the blocks, so force that here.
+ // 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 block ones, so don't let
+ // Split before all of the arguments, even the collection, so don't let
// them split.
return 0;
}
@@ -276,7 +273,7 @@ class NamedRule extends ArgumentRule {
int get numValues => 3;
- NamedRule(Rule blockRule) : super(blockRule);
+ NamedRule(Rule collectionRule) : super(collectionRule);
void beforeArguments(Chunk chunk) {
assert(_first == null);
@@ -300,12 +297,12 @@ class NamedRule extends ArgumentRule {
var constrained = super.constrain(value, other);
if (constrained != null) return constrained;
- if (other != _blockRule) return null;
+ if (other != _collectionRule) return null;
- // If we aren't splitting any args, we can split the block.
+ // 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 block ones, so don't let
+ // Split before all of the arguments, even the collections, so don't let
// them split.
return 0;
}
« no previous file with comments | « lib/src/chunk.dart ('k') | lib/src/source_visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698