diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4dc3916..4e50cfa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-# 1.0.7-dev
+# 1.0.7
 
 * Format multiline strings as block arguments (#570).
 * Fix call to analyzer API.
diff --git a/bin/format.dart b/bin/format.dart
index 7af4d16..a27e818 100644
--- a/bin/format.dart
+++ b/bin/format.dart
@@ -14,7 +14,7 @@
 import 'package:dart_style/src/source_code.dart';
 
 // Note: The following line of code is modified by tool/grind.dart.
-const version = "1.0.6";
+const version = "1.0.7";
 
 void main(List<String> args) {
   var parser = new ArgParser(allowTrailingOptions: true);
diff --git a/lib/src/argument_list_visitor.dart b/lib/src/argument_list_visitor.dart
index 632a60f..f59dd71 100644
--- a/lib/src/argument_list_visitor.dart
+++ b/lib/src/argument_list_visitor.dart
@@ -370,8 +370,8 @@
       blocks.clear();
     }
 
-    return new ArgumentSublist._(allArguments, positional, named, blocks,
-        leadingBlocks, trailingBlocks);
+    return new ArgumentSublist._(
+        allArguments, positional, named, blocks, leadingBlocks, trailingBlocks);
   }
 
   ArgumentSublist._(this._allArguments, this._positional, this._named,
@@ -394,8 +394,7 @@
     // Only count the blocks in the positional rule.
     var leadingBlocks = math.min(_leadingBlocks, _positional.length);
     var trailingBlocks = math.max(_trailingBlocks - _named.length, 0);
-    var rule = new PositionalRule(
-        _blockRule, leadingBlocks, trailingBlocks);
+    var rule = new PositionalRule(_blockRule, leadingBlocks, trailingBlocks);
     _visitArguments(visitor, _positional, rule);
 
     return rule;
@@ -406,11 +405,9 @@
     if (_named.isEmpty) return;
 
     // Only count the blocks in the named rule.
-    var leadingBlocks =
-        math.max(_leadingBlocks - _positional.length, 0);
+    var leadingBlocks = math.max(_leadingBlocks - _positional.length, 0);
     var trailingBlocks = math.min(_trailingBlocks, _named.length);
-    var namedRule =
-        new NamedRule(_blockRule, leadingBlocks, trailingBlocks);
+    var namedRule = new NamedRule(_blockRule, leadingBlocks, trailingBlocks);
 
     // Let the positional args force the named ones to split.
     if (positionalRule != null) {
diff --git a/pubspec.yaml b/pubspec.yaml
index 89ee60a..7c26225 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: dart_style
 # Note: See tool/grind.dart for how to bump the version.
-version: 1.0.7-dev
+version: 1.0.7
 author: Dart Team <misc@dartlang.org>
 description: Opinionated, automatic Dart source code formatter.
 homepage: https://github.com/dart-lang/dart_style
diff --git a/test/formatter_test.dart b/test/formatter_test.dart
index d71b747..1fc383e 100644
--- a/test/formatter_test.dart
+++ b/test/formatter_test.dart
@@ -39,14 +39,12 @@
 
   test("FormatterException describes parse errors", () {
     try {
-      new DartFormatter().format(
-          """
+      new DartFormatter().format("""
 
       var a = some error;
 
       var b = another one;
-      """,
-          uri: "my_file.dart");
+      """, uri: "my_file.dart");
 
       fail("Should throw.");
     } on FormatterException catch (err) {
