| Index: lib/src/source_visitor.dart
|
| diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
|
| index 3d028cec9f67d57a9dfc448d6662ff40b0317d32..2ad1df12d0c96c407eb9156eb6a0167e711a4881 100644
|
| --- a/lib/src/source_visitor.dart
|
| +++ b/lib/src/source_visitor.dart
|
| @@ -718,7 +718,11 @@ class SourceVisitor implements AstVisitor {
|
| if (_isInLambda(node)) builder.startSpan();
|
|
|
| token(node.functionDefinition); // "=>".
|
| - soloSplit(Cost.arrow);
|
| +
|
| + // Split after the "=>", using the rule created before the parameters
|
| + // by _visitBody().
|
| + split();
|
| + builder.endRule();
|
|
|
| if (_isInLambda(node)) builder.endSpan();
|
|
|
| @@ -1567,13 +1571,34 @@ class SourceVisitor implements AstVisitor {
|
| void _visitBody(FormalParameterList parameters, FunctionBody body,
|
| [afterParameters()]) {
|
| // If the body is "=>", add an extra level of indentation around the
|
| - // parameters and the body. This ensures that if the parameters wrap, they
|
| - // wrap more deeply than the "=>" does, as in:
|
| + // parameters and a rule that spans the parameters and the "=>". This
|
| + // ensures that if the parameters wrap, they wrap more deeply than the "=>"
|
| + // does, as in:
|
| //
|
| // someFunction(parameter,
|
| // parameter, parameter) =>
|
| // "the body";
|
| - if (body is ExpressionFunctionBody) builder.nestExpression();
|
| + //
|
| + // Also, it ensures that if the parameters wrap, we split at the "=>" too
|
| + // to avoid:
|
| + //
|
| + // someFunction(parameter,
|
| + // parameter) => function(
|
| + // argument);
|
| + //
|
| + // This is confusing because it looks like those two lines are at the same
|
| + // level when they are actually unrelated. Splitting at "=>" forces:
|
| + //
|
| + // someFunction(parameter,
|
| + // parameter) =>
|
| + // function(
|
| + // argument);
|
| + if (body is ExpressionFunctionBody) {
|
| + builder.nestExpression();
|
| +
|
| + // This rule is ended by visitExpressionFunctionBody().
|
| + builder.startRule(new SimpleRule(cost: Cost.arrow));
|
| + }
|
|
|
| if (parameters != null) {
|
| builder.nestExpression();
|
|
|