Handle metadata annotations in parameter lists with trailing commas.
Fix #520.
R=nweiz@google.com
Review URL: https://codereview.chromium.org//2298993002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df88585..da338c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
# 0.2.10
+* Handle metadata annotations before parameters with trailing commas (#520).
* Always split enum declarations if they end in a trailing comma (#529).
# 0.2.9
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index 5f6e064..73f10ab 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -2043,6 +2043,8 @@
// Can't have a trailing comma if there are no parameters.
assert(parameters.parameters.isNotEmpty);
+ _metadataRules.add(new MetadataRule());
+
// Always split the parameters.
builder.startRule(new Rule.hard());
@@ -2067,7 +2069,6 @@
builder = builder.startBlock(null);
for (var parameter in parameters.parameters) {
- builder.nestExpression();
visit(parameter);
// The comma after the parameter.
@@ -2083,7 +2084,6 @@
lastRequired = null;
}
- builder.unnest();
newline();
}
@@ -2094,6 +2094,8 @@
builder = builder.endBlock(null, forceSplit: true);
builder.endRule();
+ _metadataRules.removeLast();
+
// Now write the delimiter itself.
_writeText(firstDelimiter.lexeme, firstDelimiter.offset);
if (firstDelimiter != parameters.rightParenthesis) {
diff --git a/test/regression/0500/0520.unit b/test/regression/0500/0520.unit
new file mode 100644
index 0000000..a7c2817
--- /dev/null
+++ b/test/regression/0500/0520.unit
@@ -0,0 +1,18 @@
+>>>
+import 'package:meta/meta.dart';
+
+class Foo {
+ final int bar;
+ Foo({
+ @required this.bar,
+ });
+}
+<<<
+import 'package:meta/meta.dart';
+
+class Foo {
+ final int bar;
+ Foo({
+ @required this.bar,
+ });
+}
\ No newline at end of file
diff --git a/test/whitespace/metadata.unit b/test/whitespace/metadata.unit
index 0c73076..08a3966 100644
--- a/test/whitespace/metadata.unit
+++ b/test/whitespace/metadata.unit
@@ -209,8 +209,26 @@
positional([@foo bar]) {}
named({@foo bar}) {}
>>> split between metadata and parameter indents
-function(@VeryLongMetadataAnnotation longParameter) {}
+function(@Annotation @VeryLongMetadataAnnotation longParameter) {}
<<<
function(
+ @Annotation
@VeryLongMetadataAnnotation
- longParameter) {}
\ No newline at end of file
+ longParameter) {}
+>>> unsplit with trailing commas
+function(@Annotation longParameter,@Annotation @Other longParameter2,) {}
+<<<
+function(
+ @Annotation longParameter,
+ @Annotation @Other longParameter2,
+) {}
+>>> split with trailing commas
+function(@Annotation longParameter,@Annotation @Other @Third longParameter2,) {}
+<<<
+function(
+ @Annotation longParameter,
+ @Annotation
+ @Other
+ @Third
+ longParameter2,
+) {}
\ No newline at end of file