Allow splitting in redirecting constructors.
Fix #475.
R=kevmoo@google.com
Review URL: https://codereview.chromium.org//1498283002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b720884..28a7dd8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,7 @@
* Allow splitting before `get` and `set` (#462).
* Add `--indent` to specify leading indent (#464).
* Ensure collection elements line split separately (#474).
+* Allow redirecting constructors to wrap (#475).
* Handle index expressions in the middle of call chains.
* Optimize splitting lines with many rules.
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index 1cdd0be..0da60dd 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -538,10 +538,15 @@
// ":" if the parameters and initialization list don't all fit on one line.
builder.startRule();
+ // If the redirecting constructor happens to wrap, we want to make sure
+ // the parameter list gets more deeply indented.
+ if (node.redirectedConstructor != null) builder.nestExpression();
+
_visitBody(node.parameters, node.body, () {
// Check for redirects or initializer lists.
if (node.redirectedConstructor != null) {
_visitConstructorRedirects(node);
+ builder.unnest();
} else if (node.initializers.isNotEmpty) {
_visitConstructorInitializers(node);
}
@@ -549,7 +554,8 @@
}
void _visitConstructorRedirects(ConstructorDeclaration node) {
- token(node.separator /* = */, before: space, after: space);
+ token(node.separator /* = */, before: space);
+ soloSplit();
visitCommaSeparatedNodes(node.initializers);
visit(node.redirectedConstructor);
}
diff --git a/test/regression/0400/0475.unit b/test/regression/0400/0475.unit
new file mode 100644
index 0000000..0240a3d
--- /dev/null
+++ b/test/regression/0400/0475.unit
@@ -0,0 +1,12 @@
+>>>
+class ListResultDescriptor {
+ factory ListResultDescriptor(String name, List<E> defaultValue,
+ {ResultCachingPolicy<
+ List<E>> cachingPolicy}) = ListResultDescriptorImpl<E>;
+}
+<<<
+class ListResultDescriptor {
+ factory ListResultDescriptor(String name, List<E> defaultValue,
+ {ResultCachingPolicy<List<E>> cachingPolicy}) =
+ ListResultDescriptorImpl<E>;
+}
\ No newline at end of file