diff --git a/benchmark/lib/benchmarks/get_strings.dart b/benchmark/lib/benchmarks/get_strings.dart
index 6b737f1..94017e4 100644
--- a/benchmark/lib/benchmarks/get_strings.dart
+++ b/benchmark/lib/benchmarks/get_strings.dart
@@ -55,7 +55,7 @@
   }
 
   static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x+1}'); // assume x start from 1
+    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
   }
 
   @override
diff --git a/benchmark/lib/benchmarks/has_strings.dart b/benchmark/lib/benchmarks/has_strings.dart
index 1dc9cd4..3b46eee 100644
--- a/benchmark/lib/benchmarks/has_strings.dart
+++ b/benchmark/lib/benchmarks/has_strings.dart
@@ -55,7 +55,7 @@
   }
 
   static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x+1}'); // assume x start from 1
+    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
   }
 
   @override
diff --git a/benchmark/lib/benchmarks/int32_json.dart b/benchmark/lib/benchmarks/int32_json.dart
index 414ce41..5efb61e 100644
--- a/benchmark/lib/benchmarks/int32_json.dart
+++ b/benchmark/lib/benchmarks/int32_json.dart
@@ -54,7 +54,7 @@
   }
 
   static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x+1}'); // assume x start from 1
+    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
   }
 
   @override
diff --git a/benchmark/lib/benchmarks/int64_json.dart b/benchmark/lib/benchmarks/int64_json.dart
index 7b0c452..c691749 100644
--- a/benchmark/lib/benchmarks/int64_json.dart
+++ b/benchmark/lib/benchmarks/int64_json.dart
@@ -56,7 +56,7 @@
   }
 
   static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x+1}'); // assume x start from 1
+    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
   }
 
   @override
diff --git a/benchmark/lib/benchmarks/set_strings.dart b/benchmark/lib/benchmarks/set_strings.dart
index 7b1bd71..bf9d349 100644
--- a/benchmark/lib/benchmarks/set_strings.dart
+++ b/benchmark/lib/benchmarks/set_strings.dart
@@ -55,7 +55,7 @@
   }
 
   static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x+1}'); // assume x start from 1
+    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
   }
 
   @override
diff --git a/benchmark/lib/benchmarks/string_json.dart b/benchmark/lib/benchmarks/string_json.dart
index 7d3cab2..acd88d6 100644
--- a/benchmark/lib/benchmarks/string_json.dart
+++ b/benchmark/lib/benchmarks/string_json.dart
@@ -62,7 +62,7 @@
   }
 
   static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x+1}'); // assume x start from 1
+    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
   }
 
   @override
diff --git a/benchmark/lib/dashboard.dart b/benchmark/lib/dashboard.dart
index dda133f..ed3db3c 100644
--- a/benchmark/lib/dashboard.dart
+++ b/benchmark/lib/dashboard.dart
@@ -55,7 +55,8 @@
       for (pb.Report report in runSuite(requests, profiler: profiler)) {
         await render(report);
       }
-    }().whenComplete(() {
+    }()
+        .whenComplete(() {
       running = false;
     });
   }
diff --git a/test/repeated_field_test.dart b/test/repeated_field_test.dart
index bc58989..77e97ed 100644
--- a/test/repeated_field_test.dart
+++ b/test/repeated_field_test.dart
@@ -31,8 +31,8 @@
     }, returnsNormally);
 
     expect(() {
-      TestAllTypes_RepeatedGroup
-          .$checkItem(cast(new TestAllTypes_OptionalGroup()));
+      TestAllTypes_RepeatedGroup.$checkItem(
+          cast(new TestAllTypes_OptionalGroup()));
     }, throwsATypeError);
   });
 
