diff --git a/benchmark/benchmark.dart b/benchmark/benchmark.dart
index 946693f..c741fa3 100644
--- a/benchmark/benchmark.dart
+++ b/benchmark/benchmark.dart
@@ -22,7 +22,9 @@
     '/',
     '/home/user/dart/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart',
   ],
-  p.Style.url: ['https://example.server.org/443643002/path?top=yes#fragment',],
+  p.Style.url: [
+    'https://example.server.org/443643002/path?top=yes#fragment',
+  ],
   p.Style.windows: [
     r'C:\User\me\',
     r'\\server\share\my\folders\some\file.data',
diff --git a/lib/path.dart b/lib/path.dart
index d3c7512..8e87c33 100644
--- a/lib/path.dart
+++ b/lib/path.dart
@@ -118,9 +118,14 @@
 /// Equivalent to [join()] with [current] as the first argument. Example:
 ///
 ///     p.absolute('path', 'to/foo'); // -> '/your/current/dir/path/to/foo'
-String absolute(String part1, [String part2, String part3, String part4,
-    String part5, String part6, String part7]) =>
-        context.absolute(part1, part2, part3, part4, part5, part6, part7);
+String absolute(String part1,
+        [String part2,
+        String part3,
+        String part4,
+        String part5,
+        String part6,
+        String part7]) =>
+    context.absolute(part1, part2, part3, part4, part5, part6, part7);
 
 /// Gets the part of [path] after the last separator.
 ///
@@ -240,9 +245,15 @@
 /// If a part is an absolute path, then anything before that will be ignored:
 ///
 ///     p.join('path', '/to', 'foo'); // -> '/to/foo'
-String join(String part1, [String part2, String part3, String part4,
-    String part5, String part6, String part7, String part8]) =>
-        context.join(part1, part2, part3, part4, part5, part6, part7, part8);
+String join(String part1,
+        [String part2,
+        String part3,
+        String part4,
+        String part5,
+        String part6,
+        String part7,
+        String part8]) =>
+    context.join(part1, part2, part3, part4, part5, part6, part7, part8);
 
 /// Joins the given path parts into a single path using the current platform's
 /// [separator]. Example:
diff --git a/lib/src/context.dart b/lib/src/context.dart
index 8d022e0..badd247 100644
--- a/lib/src/context.dart
+++ b/lib/src/context.dart
@@ -72,8 +72,13 @@
   ///     context.absolute('path', 'to', 'foo'); // -> '/root/path/to/foo'
   ///
   /// If [current] isn't absolute, this won't return an absolute path.
-  String absolute(String part1, [String part2, String part3, String part4,
-      String part5, String part6, String part7]) {
+  String absolute(String part1,
+      [String part2,
+      String part3,
+      String part4,
+      String part5,
+      String part6,
+      String part7]) {
     _validateArgList(
         "absolute", [part1, part2, part3, part4, part5, part6, part7]);
 
@@ -205,8 +210,14 @@
   ///
   ///     context.join('path', '/to', 'foo'); // -> '/to/foo'
   ///
-  String join(String part1, [String part2, String part3, String part4,
-      String part5, String part6, String part7, String part8]) {
+  String join(String part1,
+      [String part2,
+      String part3,
+      String part4,
+      String part5,
+      String part6,
+      String part7,
+      String part8]) {
     var parts = <String>[
       part1,
       part2,
@@ -246,8 +257,8 @@
         // replaces the path after it.
         var parsed = _parse(part);
         var path = buffer.toString();
-        parsed.root = path.substring(
-            0, style.rootLength(path, withDrive: true));
+        parsed.root =
+            path.substring(0, style.rootLength(path, withDrive: true));
         if (style.needsSeparator(parsed.root)) {
           parsed.separators[0] = style.separator;
         }
@@ -378,8 +389,8 @@
         // enough that it's probably not going to cause performance issues.
         if (previous == chars.PERIOD &&
             (previousPrevious == null ||
-             previousPrevious == chars.PERIOD ||
-             style.isSeparator(previousPrevious))) {
+                previousPrevious == chars.PERIOD ||
+                style.isSeparator(previousPrevious))) {
           return true;
         }
       }
@@ -397,8 +408,8 @@
     // Single dots and double dots are normalized to directory traversals.
     if (previous == chars.PERIOD &&
         (previousPrevious == null ||
-         style.isSeparator(previousPrevious) ||
-         previousPrevious == chars.PERIOD)) {
+            style.isSeparator(previousPrevious) ||
+            previousPrevious == chars.PERIOD)) {
       return true;
     }
 
@@ -493,8 +504,8 @@
     if (fromParsed.parts.length > 0 && fromParsed.parts[0] == '..') {
       throw new PathException('Unable to find a path to "$path" from "$from".');
     }
-    pathParsed.parts.insertAll(
-        0, new List.filled(fromParsed.parts.length, '..'));
+    pathParsed.parts
+        .insertAll(0, new List.filled(fromParsed.parts.length, '..'));
     pathParsed.separators[0] = '';
     pathParsed.separators.insertAll(
         1, new List.filled(fromParsed.parts.length, style.separator));
@@ -580,7 +591,7 @@
     if (relative == '..') return _PathRelation.different;
     return (relative.length >= 3 &&
             relative.startsWith('..') &&
-             style.isSeparator(relative.codeUnitAt(2)))
+            style.isSeparator(relative.codeUnitAt(2)))
         ? _PathRelation.different
         : _PathRelation.within;
   }
@@ -739,8 +750,8 @@
         lastParentSeparator ??= math.max(0, parentRootLength - 1);
       }
 
-      var direction = _pathDirection(parent,
-          lastParentSeparator ?? parentRootLength - 1);
+      var direction =
+          _pathDirection(parent, lastParentSeparator ?? parentRootLength - 1);
       if (direction == _PathDirection.atRoot) return _PathRelation.equal;
       return direction == _PathDirection.aboveRoot
           ? _PathRelation.inconclusive
@@ -907,7 +918,7 @@
         if (!beginning &&
             next == chars.PERIOD &&
             (i + 2 == path.length ||
-             style.isSeparator(path.codeUnitAt(i + 2)))) {
+                style.isSeparator(path.codeUnitAt(i + 2)))) {
           return null;
         }
       }
@@ -1132,4 +1143,3 @@
 
   String toString() => name;
 }
-
diff --git a/lib/src/parsed_path.dart b/lib/src/parsed_path.dart
index 619ffbf..811e9f4 100644
--- a/lib/src/parsed_path.dart
+++ b/lib/src/parsed_path.dart
@@ -129,10 +129,13 @@
 
     // Canonicalize separators.
     var newSeparators = new List<String>.generate(
-        newParts.length, (_) => style.separator, growable: true);
-    newSeparators.insert(0, isAbsolute &&
-        newParts.length > 0 &&
-        style.needsSeparator(root) ? style.separator : '');
+        newParts.length, (_) => style.separator,
+        growable: true);
+    newSeparators.insert(
+        0,
+        isAbsolute && newParts.length > 0 && style.needsSeparator(root)
+            ? style.separator
+            : '');
 
     parts = newParts;
     separators = newSeparators;
diff --git a/lib/src/style/url.dart b/lib/src/style/url.dart
index 2e29aa7..9dc4442 100644
--- a/lib/src/style/url.dart
+++ b/lib/src/style/url.dart
@@ -63,8 +63,7 @@
     }
 
     var index = path.indexOf("/");
-    if (index > 0 && path.startsWith('://', index - 1)) {
-    }
+    if (index > 0 && path.startsWith('://', index - 1)) {}
     return 0;
   }
 
diff --git a/lib/src/style/windows.dart b/lib/src/style/windows.dart
index 31114db..c55d85e 100644
--- a/lib/src/style/windows.dart
+++ b/lib/src/style/windows.dart
@@ -80,9 +80,7 @@
       // Drive-letter paths look like "file:///C:/path/to/file". The
       // replaceFirst removes the extra initial slash. Otherwise, leave the
       // slash to match IE's interpretation of "/foo" as a root-relative path.
-      if (path.length >= 3 &&
-          path.startsWith('/') &&
-          isDriveLetter(path, 1)) {
+      if (path.length >= 3 && path.startsWith('/') && isDriveLetter(path, 1)) {
         path = path.replaceFirst("/", "");
       }
     } else {
@@ -123,8 +121,8 @@
 
       // Get rid of the trailing "\" in "C:\" because the URI constructor will
       // add a separator on its own.
-      parsed.parts.insert(
-          0, parsed.root.replaceAll("/", "").replaceAll("\\", ""));
+      parsed.parts
+          .insert(0, parsed.root.replaceAll("/", "").replaceAll("\\", ""));
 
       return new Uri(scheme: 'file', pathSegments: parsed.parts);
     }
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 3d71e56..561ff63 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -8,7 +8,7 @@
 /// lowercase).
 bool isAlphabetic(int char) =>
     (char >= chars.UPPER_A && char <= chars.UPPER_Z) ||
-        (char >= chars.LOWER_A && char <= chars.LOWER_Z);
+    (char >= chars.LOWER_A && char <= chars.LOWER_Z);
 
 /// Returns whether [char] is the code for an ASCII digit.
 bool isNumeric(int char) => char >= chars.ZERO && char <= chars.NINE;
diff --git a/test/url_test.dart b/test/url_test.dart
index 8f912b7..91e4339 100644
--- a/test/url_test.dart
+++ b/test/url_test.dart
@@ -220,7 +220,8 @@
       expect(context.join('a', '/', 'b', 'c'), '/b/c');
       expect(context.join('a', '/b', 'http://dartlang.org/c', 'd'),
           'http://dartlang.org/c/d');
-      expect(context.join(
+      expect(
+          context.join(
               'a', 'http://google.com/b', 'http://dartlang.org/c', 'd'),
           'http://dartlang.org/c/d');
       expect(context.join('a', '/b', '/c', 'd'), '/c/d');
@@ -266,10 +267,10 @@
     });
 
     test('treats drive letters as part of the root for file: URLs', () {
-      expect(context.join('file:///c:/foo/bar', '/baz/qux'),
-          'file:///c:/baz/qux');
-      expect(context.join('file:///D:/foo/bar', '/baz/qux'),
-          'file:///D:/baz/qux');
+      expect(
+          context.join('file:///c:/foo/bar', '/baz/qux'), 'file:///c:/baz/qux');
+      expect(
+          context.join('file:///D:/foo/bar', '/baz/qux'), 'file:///D:/baz/qux');
       expect(context.join('file:///c:/', '/baz/qux'), 'file:///c:/baz/qux');
       expect(context.join('file:///c:', '/baz/qux'), 'file:///c:/baz/qux');
       expect(context.join('file://host/c:/foo/bar', '/baz/qux'),
@@ -281,8 +282,8 @@
           'http://foo.com/baz/qux');
       expect(context.join('misfile:///c:/foo/bar', '/baz/qux'),
           'misfile:///baz/qux');
-      expect(context.join('filer:///c:/foo/bar', '/baz/qux'),
-          'filer:///baz/qux');
+      expect(
+          context.join('filer:///c:/foo/bar', '/baz/qux'), 'filer:///baz/qux');
     });
   });
 
@@ -299,12 +300,10 @@
       expect(context.joinAll(['a', '/', 'b', 'c']), '/b/c');
       expect(context.joinAll(['a', '/b', 'http://dartlang.org/c', 'd']),
           'http://dartlang.org/c/d');
-      expect(context.joinAll([
-        'a',
-        'http://google.com/b',
-        'http://dartlang.org/c',
-        'd'
-      ]), 'http://dartlang.org/c/d');
+      expect(
+          context.joinAll(
+              ['a', 'http://google.com/b', 'http://dartlang.org/c', 'd']),
+          'http://dartlang.org/c/d');
       expect(context.joinAll(['a', '/b', '/c', 'd']), '/c/d');
       expect(context.joinAll(['a', r'c:\b', 'c', 'd']), r'c:\b/c/d');
       expect(context.joinAll(['a', 'package:foo/bar', 'c', 'd']),
@@ -538,10 +537,14 @@
 
       // Regression
       test('from root-only path', () {
-        expect(context.relative('http://dartlang.org',
-            from: 'http://dartlang.org'), '.');
-        expect(context.relative('http://dartlang.org/root/path',
-            from: 'http://dartlang.org'), 'root/path');
+        expect(
+            context.relative('http://dartlang.org',
+                from: 'http://dartlang.org'),
+            '.');
+        expect(
+            context.relative('http://dartlang.org/root/path',
+                from: 'http://dartlang.org'),
+            'root/path');
       });
     });
 
@@ -608,10 +611,14 @@
       expect(
           context.relative('http://dartlang.org/foo/bar/baz', from: '/foo/bar'),
           equals('baz'));
-      expect(context.relative('http://dartlang.org/foo/bar/baz',
-          from: 'file:///foo/bar'), equals('http://dartlang.org/foo/bar/baz'));
-      expect(context.relative('http://dartlang.org/foo/bar/baz',
-          from: 'http://dartlang.org/foo/bar'), equals('baz'));
+      expect(
+          context.relative('http://dartlang.org/foo/bar/baz',
+              from: 'file:///foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(
+          context.relative('http://dartlang.org/foo/bar/baz',
+              from: 'http://dartlang.org/foo/bar'),
+          equals('baz'));
       expect(context.relative('/foo/bar/baz', from: 'file:///foo/bar'),
           equals('http://dartlang.org/foo/bar/baz'));
       expect(context.relative('file:///foo/bar/baz', from: '/foo/bar'),
@@ -642,10 +649,14 @@
           equals('/foo/bar/baz'));
       expect(r.relative('http://dartlang.org/foo/bar/baz', from: '/foo/bar'),
           equals('http://dartlang.org/foo/bar/baz'));
-      expect(r.relative('http://dartlang.org/foo/bar/baz',
-          from: 'file:///foo/bar'), equals('http://dartlang.org/foo/bar/baz'));
-      expect(r.relative('http://dartlang.org/foo/bar/baz',
-          from: 'http://dartlang.org/foo/bar'), equals('baz'));
+      expect(
+          r.relative('http://dartlang.org/foo/bar/baz',
+              from: 'file:///foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(
+          r.relative('http://dartlang.org/foo/bar/baz',
+              from: 'http://dartlang.org/foo/bar'),
+          equals('baz'));
 
       expect(r.relative('http://dartlang.org/foo/bar/baz', from: 'foo/bar'),
           equals('http://dartlang.org/foo/bar/baz'));
@@ -673,10 +684,14 @@
       expect(context.isWithin('foo/bar', 'foo/bar/baz'), isTrue);
       expect(context.isWithin('foo/bar', 'foo/baz'), isFalse);
       expect(context.isWithin('foo/bar', '../path/foo/bar/baz'), isTrue);
-      expect(context.isWithin(
-          'http://dartlang.org', 'http://dartlang.org/foo/bar'), isTrue);
-      expect(context.isWithin(
-          'http://dartlang.org', 'http://pub.dartlang.org/foo/bar'), isFalse);
+      expect(
+          context.isWithin(
+              'http://dartlang.org', 'http://dartlang.org/foo/bar'),
+          isTrue);
+      expect(
+          context.isWithin(
+              'http://dartlang.org', 'http://pub.dartlang.org/foo/bar'),
+          isFalse);
       expect(context.isWithin('http://dartlang.org', '/foo/bar'), isTrue);
       expect(context.isWithin('http://dartlang.org/foo', '/foo/bar'), isTrue);
       expect(context.isWithin('http://dartlang.org/foo', '/bar/baz'), isFalse);
