diff --git a/lib/src/file.dart b/lib/src/file.dart
index 27dae5d..5a193d3 100644
--- a/lib/src/file.dart
+++ b/lib/src/file.dart
@@ -72,7 +72,7 @@
   /// or equal to `0xFFFF`.
   SourceFile.decoded(Iterable<int> decodedChars, {url})
       : url = url is String ? Uri.parse(url) : url,
-        _decodedChars = new Uint32List.fromList(decodedChars.toList()) {
+        _decodedChars = Uint32List.fromList(decodedChars.toList()) {
     for (var i = 0; i < _decodedChars.length; i++) {
       var c = _decodedChars[i];
       if (c == _CR) {
@@ -89,18 +89,18 @@
   /// If [end] isn't passed, it defaults to the end of the file.
   FileSpan span(int start, [int end]) {
     if (end == null) end = length;
-    return new _FileSpan(this, start, end);
+    return _FileSpan(this, start, end);
   }
 
   /// Returns a location in [this] at [offset].
-  FileLocation location(int offset) => new FileLocation._(this, offset);
+  FileLocation location(int offset) => FileLocation._(this, offset);
 
   /// Gets the 0-based line corresponding to [offset].
   int getLine(int offset) {
     if (offset < 0) {
-      throw new RangeError("Offset may not be negative, was $offset.");
+      throw RangeError("Offset may not be negative, was $offset.");
     } else if (offset > length) {
-      throw new RangeError("Offset $offset must not be greater than the number "
+      throw RangeError("Offset $offset must not be greater than the number "
           "of characters in the file, $length.");
     }
 
@@ -163,24 +163,24 @@
   /// is used to more efficiently compute the column.
   int getColumn(int offset, {int line}) {
     if (offset < 0) {
-      throw new RangeError("Offset may not be negative, was $offset.");
+      throw RangeError("Offset may not be negative, was $offset.");
     } else if (offset > length) {
-      throw new RangeError("Offset $offset must be not be greater than the "
+      throw RangeError("Offset $offset must be not be greater than the "
           "number of characters in the file, $length.");
     }
 
     if (line == null) {
       line = getLine(offset);
     } else if (line < 0) {
-      throw new RangeError("Line may not be negative, was $line.");
+      throw RangeError("Line may not be negative, was $line.");
     } else if (line >= lines) {
-      throw new RangeError("Line $line must be less than the number of "
+      throw RangeError("Line $line must be less than the number of "
           "lines in the file, $lines.");
     }
 
     var lineStart = _lineStarts[line];
     if (lineStart > offset) {
-      throw new RangeError("Line $line comes after offset $offset.");
+      throw RangeError("Line $line comes after offset $offset.");
     }
 
     return offset - lineStart;
@@ -193,18 +193,18 @@
     if (column == null) column = 0;
 
     if (line < 0) {
-      throw new RangeError("Line may not be negative, was $line.");
+      throw RangeError("Line may not be negative, was $line.");
     } else if (line >= lines) {
-      throw new RangeError("Line $line must be less than the number of "
+      throw RangeError("Line $line must be less than the number of "
           "lines in the file, $lines.");
     } else if (column < 0) {
-      throw new RangeError("Column may not be negative, was $column.");
+      throw RangeError("Column may not be negative, was $column.");
     }
 
     var result = _lineStarts[line] + column;
     if (result > length ||
         (line + 1 < lines && result >= _lineStarts[line + 1])) {
-      throw new RangeError("Line $line doesn't have $column columns.");
+      throw RangeError("Line $line doesn't have $column columns.");
     }
 
     return result;
@@ -214,7 +214,7 @@
   ///
   /// If [end] isn't passed, it defaults to the end of the file.
   String getText(int start, [int end]) =>
-      new String.fromCharCodes(_decodedChars.sublist(start, end));
+      String.fromCharCodes(_decodedChars.sublist(start, end));
 }
 
 /// A [SourceLocation] within a [SourceFile].
@@ -234,14 +234,14 @@
 
   FileLocation._(this.file, this.offset) {
     if (offset < 0) {
-      throw new RangeError("Offset may not be negative, was $offset.");
+      throw RangeError("Offset may not be negative, was $offset.");
     } else if (offset > file.length) {
-      throw new RangeError("Offset $offset must not be greater than the number "
+      throw RangeError("Offset $offset must not be greater than the number "
           "of characters in the file, ${file.length}.");
     }
   }
 
-  FileSpan pointSpan() => new _FileSpan(file, offset, offset);
+  FileSpan pointSpan() => _FileSpan(file, offset, offset);
 }
 
 /// A [SourceSpan] within a [SourceFile].
@@ -288,8 +288,8 @@
 
   Uri get sourceUrl => file.url;
   int get length => _end - _start;
-  FileLocation get start => new FileLocation._(file, _start);
-  FileLocation get end => new FileLocation._(file, _end);
+  FileLocation get start => FileLocation._(file, _start);
+  FileLocation get end => FileLocation._(file, _end);
   String get text => file.getText(_start, _end);
 
   String get context {
@@ -327,12 +327,12 @@
 
   _FileSpan(this.file, this._start, this._end) {
     if (_end < _start) {
-      throw new ArgumentError('End $_end must come after start $_start.');
+      throw ArgumentError('End $_end must come after start $_start.');
     } else if (_end > file.length) {
-      throw new RangeError("End $_end must not be greater than the number "
+      throw RangeError("End $_end must not be greater than the number "
           "of characters in the file, ${file.length}.");
     } else if (_start < 0) {
-      throw new RangeError("Start may not be negative, was $_start.");
+      throw RangeError("Start may not be negative, was $_start.");
     }
   }
 
@@ -351,11 +351,11 @@
 
     if (other is _FileSpan) {
       if (this._start > other._end || other._start > this._end) {
-        throw new ArgumentError("Spans $this and $other are disjoint.");
+        throw ArgumentError("Spans $this and $other are disjoint.");
       }
     } else {
       if (this._start > other.end.offset || other.start.offset > this._end) {
-        throw new ArgumentError("Spans $this and $other are disjoint.");
+        throw ArgumentError("Spans $this and $other are disjoint.");
       }
     }
 
@@ -382,18 +382,18 @@
   /// between the two will be covered by the returned span.
   FileSpan expand(FileSpan other) {
     if (sourceUrl != other.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${sourceUrl}\" and "
           " \"${other.sourceUrl}\" don't match.");
     }
 
     if (other is _FileSpan) {
       var start = math.min(this._start, other._start);
       var end = math.max(this._end, other._end);
-      return new _FileSpan(file, start, end);
+      return _FileSpan(file, start, end);
     } else {
       var start = math.min(this._start, other.start.offset);
       var end = math.max(this._end, other.end.offset);
-      return new _FileSpan(file, start, end);
+      return _FileSpan(file, start, end);
     }
   }
 }
diff --git a/lib/src/highlighter.dart b/lib/src/highlighter.dart
index 0714acd..f68e52a 100644
--- a/lib/src/highlighter.dart
+++ b/lib/src/highlighter.dart
@@ -36,7 +36,7 @@
       _multiline ? 3 : 1;
 
   /// The buffer to which to write the result.
-  final _buffer = new StringBuffer();
+  final _buffer = StringBuffer();
 
   /// The number of spaces to render for hard tabs that appear in `_span.text`.
   ///
@@ -63,7 +63,7 @@
     newSpan = _normalizeTrailingNewline(newSpan);
     newSpan = _normalizeEndOfLine(newSpan);
 
-    return new Highlighter._(newSpan, color);
+    return Highlighter._(newSpan, color);
   }
 
   /// Normalizes [span] to ensure that it's a [SourceSpanWithContext] whose
@@ -76,10 +76,10 @@
       span is SourceSpanWithContext &&
               findLineStart(span.context, span.text, span.start.column) != null
           ? span
-          : new SourceSpanWithContext(
-              new SourceLocation(span.start.offset,
+          : SourceSpanWithContext(
+              SourceLocation(span.start.offset,
                   sourceUrl: span.sourceUrl, line: 0, column: 0),
-              new SourceLocation(span.end.offset,
+              SourceLocation(span.end.offset,
                   sourceUrl: span.sourceUrl,
                   line: countCodeUnits(span.text, $lf),
                   column: _lastLineLength(span.text)),
@@ -99,9 +99,9 @@
       }
     }
 
-    return new SourceSpanWithContext(
+    return SourceSpanWithContext(
         span.start,
-        new SourceLocation(endOffset,
+        SourceLocation(endOffset,
             sourceUrl: span.sourceUrl,
             line: span.end.line,
             column: span.end.column),
@@ -127,13 +127,13 @@
     var end = span.end;
     if (span.text.endsWith("\n") && _isTextAtEndOfContext(span)) {
       text = span.text.substring(0, span.text.length - 1);
-      end = new SourceLocation(span.end.offset - 1,
+      end = SourceLocation(span.end.offset - 1,
           sourceUrl: span.sourceUrl,
           line: span.end.line - 1,
           column: _lastLineLength(text));
       start = span.start.offset == span.end.offset ? end : span.start;
     }
-    return new SourceSpanWithContext(start, end, text, context);
+    return SourceSpanWithContext(start, end, text, context);
   }
 
   /// Normalizes [span] so that the end location is at the end of a line rather
@@ -144,9 +144,9 @@
 
     var text = span.text.substring(0, span.text.length - 1);
 
-    return new SourceSpanWithContext(
+    return SourceSpanWithContext(
         span.start,
-        new SourceLocation(span.end.offset - 1,
+        SourceLocation(span.end.offset - 1,
             sourceUrl: span.sourceUrl,
             line: span.end.line - 1,
             column: _lastLineLength(text)),
diff --git a/lib/src/location.dart b/lib/src/location.dart
index cf99319..a271880 100644
--- a/lib/src/location.dart
+++ b/lib/src/location.dart
@@ -48,11 +48,11 @@
         line = line == null ? 0 : line,
         column = column == null ? offset : column {
     if (offset < 0) {
-      throw new RangeError("Offset may not be negative, was $offset.");
+      throw RangeError("Offset may not be negative, was $offset.");
     } else if (line != null && line < 0) {
-      throw new RangeError("Line may not be negative, was $line.");
+      throw RangeError("Line may not be negative, was $line.");
     } else if (column != null && column < 0) {
-      throw new RangeError("Column may not be negative, was $column.");
+      throw RangeError("Column may not be negative, was $column.");
     }
   }
 
@@ -61,21 +61,21 @@
   /// This always returns a non-negative value.
   int distance(SourceLocation other) {
     if (sourceUrl != other.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${sourceUrl}\" and "
           "\"${other.sourceUrl}\" don't match.");
     }
     return (offset - other.offset).abs();
   }
 
   /// Returns a span that covers only a single point: this location.
-  SourceSpan pointSpan() => new SourceSpan(this, this, "");
+  SourceSpan pointSpan() => SourceSpan(this, this, "");
 
   /// Compares two locations.
   ///
   /// [other] must have the same source URL as [this].
   int compareTo(SourceLocation other) {
     if (sourceUrl != other.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${sourceUrl}\" and "
           "\"${other.sourceUrl}\" don't match.");
     }
     return offset - other.offset;
diff --git a/lib/src/location_mixin.dart b/lib/src/location_mixin.dart
index 1e5fc66..7d34311 100644
--- a/lib/src/location_mixin.dart
+++ b/lib/src/location_mixin.dart
@@ -21,17 +21,17 @@
 
   int distance(SourceLocation other) {
     if (sourceUrl != other.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${sourceUrl}\" and "
           "\"${other.sourceUrl}\" don't match.");
     }
     return (offset - other.offset).abs();
   }
 
-  SourceSpan pointSpan() => new SourceSpan(this, this, "");
+  SourceSpan pointSpan() => SourceSpan(this, this, "");
 
   int compareTo(SourceLocation other) {
     if (sourceUrl != other.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${sourceUrl}\" and "
           "\"${other.sourceUrl}\" don't match.");
     }
     return offset - other.offset;
diff --git a/lib/src/span.dart b/lib/src/span.dart
index 57ffe79..b32e1ff 100644
--- a/lib/src/span.dart
+++ b/lib/src/span.dart
@@ -33,7 +33,7 @@
   /// before [end]. [text] must have a number of characters equal to the
   /// distance between [start] and [end].
   factory SourceSpan(SourceLocation start, SourceLocation end, String text) =>
-      new SourceSpanBase(start, end, text);
+      SourceSpanBase(start, end, text);
 
   /// Creates a new span that's the union of [this] and [other].
   ///
@@ -91,12 +91,12 @@
 
   SourceSpanBase(this.start, this.end, this.text) {
     if (end.sourceUrl != start.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${start.sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${start.sourceUrl}\" and "
           " \"${end.sourceUrl}\" don't match.");
     } else if (end.offset < start.offset) {
-      throw new ArgumentError('End $end must come after start $start.');
+      throw ArgumentError('End $end must come after start $start.');
     } else if (text.length != start.distance(end)) {
-      throw new ArgumentError('Text "$text" must be ${start.distance(end)} '
+      throw ArgumentError('Text "$text" must be ${start.distance(end)} '
           'characters long.');
     }
   }
diff --git a/lib/src/span_mixin.dart b/lib/src/span_mixin.dart
index d8ac8f2..9bf0937 100644
--- a/lib/src/span_mixin.dart
+++ b/lib/src/span_mixin.dart
@@ -26,7 +26,7 @@
 
   SourceSpan union(SourceSpan other) {
     if (sourceUrl != other.sourceUrl) {
-      throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
+      throw ArgumentError("Source URLs \"${sourceUrl}\" and "
           " \"${other.sourceUrl}\" don't match.");
     }
 
@@ -36,16 +36,16 @@
     var endSpan = end == this.end ? this : other;
 
     if (beginSpan.end.compareTo(endSpan.start) < 0) {
-      throw new ArgumentError("Spans $this and $other are disjoint.");
+      throw ArgumentError("Spans $this and $other are disjoint.");
     }
 
     var text = beginSpan.text +
         endSpan.text.substring(beginSpan.end.distance(endSpan.start));
-    return new SourceSpan(start, end, text);
+    return SourceSpan(start, end, text);
   }
 
   String message(String message, {color}) {
-    var buffer = new StringBuffer();
+    var buffer = StringBuffer();
     buffer.write('line ${start.line + 1}, column ${start.column + 1}');
     if (sourceUrl != null) buffer.write(' of ${p.prettyUri(sourceUrl)}');
     buffer.write(': $message');
@@ -61,7 +61,7 @@
 
   String highlight({color}) {
     if (this is! SourceSpanWithContext && this.length == 0) return "";
-    return new Highlighter(this, color: color).highlight();
+    return Highlighter(this, color: color).highlight();
   }
 
   bool operator ==(other) =>
diff --git a/lib/src/span_with_context.dart b/lib/src/span_with_context.dart
index 41697a0..da09cc0 100644
--- a/lib/src/span_with_context.dart
+++ b/lib/src/span_with_context.dart
@@ -25,12 +25,11 @@
       SourceLocation start, SourceLocation end, String text, this._context)
       : super(start, end, text) {
     if (!context.contains(text)) {
-      throw new ArgumentError(
-          'The context line "$context" must contain "$text".');
+      throw ArgumentError('The context line "$context" must contain "$text".');
     }
 
     if (findLineStart(context, text, start.column) == null) {
-      throw new ArgumentError('The span text "$text" must start at '
+      throw ArgumentError('The span text "$text" must start at '
           'column ${start.column + 1} in a line within "$context".');
     }
   }
diff --git a/test/file_test.dart b/test/file_test.dart
index 9a103c4..6759ca2 100644
--- a/test/file_test.dart
+++ b/test/file_test.dart
@@ -8,7 +8,7 @@
 main() {
   var file;
   setUp(() {
-    file = new SourceFile.fromString("""
+    file = SourceFile.fromString("""
 foo bar baz
 whiz bang boom
 zip zap zop""", url: "foo.dart");
@@ -109,8 +109,7 @@
 
     group("for span().union()", () {
       test("source URLs must match", () {
-        var other =
-            new SourceSpan(new SourceLocation(10), new SourceLocation(11), "_");
+        var other = SourceSpan(SourceLocation(10), SourceLocation(11), "_");
 
         expect(() => file.span(9, 10).union(other), throwsArgumentError);
       });
@@ -122,7 +121,7 @@
     });
 
     test("for span().expand() source URLs must match", () {
-      var other = new SourceFile.fromString("""
+      var other = SourceFile.fromString("""
 foo bar baz
 whiz bang boom
 zip zap zop""", url: "bar.dart").span(10, 11);
@@ -139,11 +138,11 @@
 
   group("new SourceFile()", () {
     test("handles CRLF correctly", () {
-      expect(new SourceFile.fromString("foo\r\nbar").getLine(6), equals(1));
+      expect(SourceFile.fromString("foo\r\nbar").getLine(6), equals(1));
     });
 
     test("handles a lone CR correctly", () {
-      expect(new SourceFile.fromString("foo\rbar").getLine(5), equals(1));
+      expect(SourceFile.fromString("foo\rbar").getLine(5), equals(1));
     });
   });
 
@@ -283,7 +282,7 @@
         });
 
         test("with a newline, contains an empty line", () {
-          file = new SourceFile.fromString("""
+          file = SourceFile.fromString("""
 foo bar baz
 whiz bang boom
 zip zap zop
@@ -348,8 +347,8 @@
       });
 
       test("returns a base SourceSpan for a SourceSpan input", () {
-        var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
-            new SourceLocation(5, sourceUrl: "foo.dart"), "hey, ");
+        var other = SourceSpan(SourceLocation(0, sourceUrl: "foo.dart"),
+            SourceLocation(5, sourceUrl: "foo.dart"), "hey, ");
         var result = span.union(other);
         expect(result, isNot(isA<FileSpan>()));
         expect(result.start, equals(other.start));
diff --git a/test/highlight_test.dart b/test/highlight_test.dart
index 521f748..c215680 100644
--- a/test/highlight_test.dart
+++ b/test/highlight_test.dart
@@ -21,7 +21,7 @@
 
   var file;
   setUp(() {
-    file = new SourceFile.fromString("""
+    file = SourceFile.fromString("""
 foo bar baz
 whiz bang boom
 zip zap zop
@@ -37,7 +37,7 @@
   });
 
   test("gracefully handles a missing source URL", () {
-    var span = new SourceFile.fromString("foo bar baz").span(4, 7);
+    var span = SourceFile.fromString("foo bar baz").span(4, 7);
     expect(span.highlight(), equals("""
   ,
 1 | foo bar baz
@@ -95,7 +95,7 @@
     });
 
     test("at the end of the file with no trailing newline", () {
-      file = new SourceFile.fromString("zip zap zop");
+      file = SourceFile.fromString("zip zap zop");
       expect(file.location(10).pointSpan().highlight(), equals("""
   ,
 1 | zip zap zop
@@ -104,7 +104,7 @@
     });
 
     test("after the end of the file with no trailing newline", () {
-      file = new SourceFile.fromString("zip zap zop");
+      file = SourceFile.fromString("zip zap zop");
       expect(file.location(11).pointSpan().highlight(), equals("""
   ,
 1 | zip zap zop
@@ -113,7 +113,7 @@
     });
 
     test("in an empty file", () {
-      expect(new SourceFile.fromString("").location(0).pointSpan().highlight(),
+      expect(SourceFile.fromString("").location(0).pointSpan().highlight(),
           equals("""
   ,
 1 | 
@@ -122,7 +122,7 @@
     });
 
     test("on an empty line", () {
-      var file = new SourceFile.fromString("foo\n\nbar");
+      var file = SourceFile.fromString("foo\n\nbar");
       expect(file.location(4).pointSpan().highlight(), equals("""
   ,
 2 | 
@@ -132,8 +132,7 @@
   });
 
   test("highlights a single-line file without a newline", () {
-    expect(
-        new SourceFile.fromString("foo bar").span(0, 7).highlight(), equals("""
+    expect(SourceFile.fromString("foo bar").span(0, 7).highlight(), equals("""
   ,
 1 | foo bar
   | ^^^^^^^
@@ -141,8 +140,8 @@
   });
 
   test("highlights a single empty line", () {
-    expect(new SourceFile.fromString("foo\n\nbar").span(4, 5).highlight(),
-        equals("""
+    expect(
+        SourceFile.fromString("foo\n\nbar").span(4, 5).highlight(), equals("""
   ,
 2 | 
   | ^
@@ -194,7 +193,7 @@
     });
 
     test("highlights the full first line even if it's indented", () {
-      var file = new SourceFile.fromString("""
+      var file = SourceFile.fromString("""
   foo bar baz
   whiz bang boom
   zip zap zop
@@ -210,7 +209,7 @@
     });
 
     test("highlights the full first line if it's empty", () {
-      var file = new SourceFile.fromString("""
+      var file = SourceFile.fromString("""
 foo
 
 bar
@@ -242,7 +241,7 @@
     });
 
     test("highlights the full last line with a trailing Windows newline", () {
-      var file = new SourceFile.fromString("""
+      var file = SourceFile.fromString("""
 foo bar baz\r
 whiz bang boom\r
 zip zap zop\r
@@ -269,7 +268,7 @@
     test(
         "highlights the full last line at the end of the file with no trailing "
         "newline", () {
-      var file = new SourceFile.fromString("""
+      var file = SourceFile.fromString("""
 foo bar baz
 whiz bang boom
 zip zap zop""");
@@ -284,7 +283,7 @@
     });
 
     test("highlights the full last line if it's empty", () {
-      var file = new SourceFile.fromString("""
+      var file = SourceFile.fromString("""
 foo
 
 bar
@@ -298,7 +297,7 @@
     });
 
     test("highlights multiple empty lines", () {
-      var file = new SourceFile.fromString("foo\n\n\n\nbar");
+      var file = SourceFile.fromString("foo\n\n\n\nbar");
       expect(file.span(4, 7).highlight(), equals("""
   ,
 2 | / 
@@ -309,7 +308,7 @@
 
     // Regression test for #32
     test("highlights the end of a line and an empty line", () {
-      var file = new SourceFile.fromString("foo\n\n");
+      var file = SourceFile.fromString("foo\n\n");
       expect(file.span(3, 5).highlight(), equals("""
   ,
 1 |   foo
@@ -322,7 +321,7 @@
   group("prints tabs as spaces", () {
     group("in a single-line span", () {
       test("before the highlighted section", () {
-        var span = new SourceFile.fromString("foo\tbar baz").span(4, 7);
+        var span = SourceFile.fromString("foo\tbar baz").span(4, 7);
 
         expect(span.highlight(), equals("""
   ,
@@ -332,7 +331,7 @@
       });
 
       test("within the highlighted section", () {
-        var span = new SourceFile.fromString("foo bar\tbaz bang").span(4, 11);
+        var span = SourceFile.fromString("foo bar\tbaz bang").span(4, 11);
 
         expect(span.highlight(), equals("""
   ,
@@ -342,7 +341,7 @@
       });
 
       test("after the highlighted section", () {
-        var span = new SourceFile.fromString("foo bar\tbaz").span(4, 7);
+        var span = SourceFile.fromString("foo bar\tbaz").span(4, 7);
 
         expect(span.highlight(), equals("""
   ,
@@ -354,7 +353,7 @@
 
     group("in a multi-line span", () {
       test("before the highlighted section", () {
-        var span = new SourceFile.fromString("""
+        var span = SourceFile.fromString("""
 foo\tbar baz
 whiz bang boom
 """).span(4, 21);
@@ -369,7 +368,7 @@
       });
 
       test("within the first highlighted line", () {
-        var span = new SourceFile.fromString("""
+        var span = SourceFile.fromString("""
 foo bar\tbaz
 whiz bang boom
 """).span(4, 21);
@@ -384,7 +383,7 @@
       });
 
       test("within a middle highlighted line", () {
-        var span = new SourceFile.fromString("""
+        var span = SourceFile.fromString("""
 foo bar baz
 whiz\tbang boom
 zip zap zop
@@ -401,7 +400,7 @@
       });
 
       test("within the last highlighted line", () {
-        var span = new SourceFile.fromString("""
+        var span = SourceFile.fromString("""
 foo bar baz
 whiz\tbang boom
 """).span(4, 21);
@@ -416,7 +415,7 @@
       });
 
       test("after the highlighted section", () {
-        var span = new SourceFile.fromString("""
+        var span = SourceFile.fromString("""
 foo bar baz
 whiz bang\tboom
 """).span(4, 21);
@@ -434,9 +433,9 @@
 
   group("supports lines of preceding and following context for a span", () {
     test("within a single line", () {
-      var span = new SourceSpanWithContext(
-          new SourceLocation(20, line: 2, column: 5, sourceUrl: "foo.dart"),
-          new SourceLocation(27, line: 2, column: 12, sourceUrl: "foo.dart"),
+      var span = SourceSpanWithContext(
+          SourceLocation(20, line: 2, column: 5, sourceUrl: "foo.dart"),
+          SourceLocation(27, line: 2, column: 12, sourceUrl: "foo.dart"),
           "foo bar",
           "previous\nlines\n-----foo bar-----\nfollowing line\n");
 
@@ -451,9 +450,9 @@
     });
 
     test("covering a full line", () {
-      var span = new SourceSpanWithContext(
-          new SourceLocation(15, line: 2, column: 0, sourceUrl: "foo.dart"),
-          new SourceLocation(33, line: 3, column: 0, sourceUrl: "foo.dart"),
+      var span = SourceSpanWithContext(
+          SourceLocation(15, line: 2, column: 0, sourceUrl: "foo.dart"),
+          SourceLocation(33, line: 3, column: 0, sourceUrl: "foo.dart"),
           "-----foo bar-----\n",
           "previous\nlines\n-----foo bar-----\nfollowing line\n");
 
@@ -468,9 +467,9 @@
     });
 
     test("covering multiple full lines", () {
-      var span = new SourceSpanWithContext(
-          new SourceLocation(15, line: 2, column: 0, sourceUrl: "foo.dart"),
-          new SourceLocation(23, line: 4, column: 0, sourceUrl: "foo.dart"),
+      var span = SourceSpanWithContext(
+          SourceLocation(15, line: 2, column: 0, sourceUrl: "foo.dart"),
+          SourceLocation(23, line: 4, column: 0, sourceUrl: "foo.dart"),
           "foo\nbar\n",
           "previous\nlines\nfoo\nbar\nfollowing line\n");
 
diff --git a/test/location_test.dart b/test/location_test.dart
index 3a32a92..9032936 100644
--- a/test/location_test.dart
+++ b/test/location_test.dart
@@ -8,33 +8,30 @@
 main() {
   var location;
   setUp(() {
-    location =
-        new SourceLocation(15, line: 2, column: 6, sourceUrl: "foo.dart");
+    location = SourceLocation(15, line: 2, column: 6, sourceUrl: "foo.dart");
   });
 
   group('errors', () {
     group('for new SourceLocation()', () {
       test('offset may not be negative', () {
-        expect(() => new SourceLocation(-1), throwsRangeError);
+        expect(() => SourceLocation(-1), throwsRangeError);
       });
 
       test('line may not be negative', () {
-        expect(() => new SourceLocation(0, line: -1), throwsRangeError);
+        expect(() => SourceLocation(0, line: -1), throwsRangeError);
       });
 
       test('column may not be negative', () {
-        expect(() => new SourceLocation(0, column: -1), throwsRangeError);
+        expect(() => SourceLocation(0, column: -1), throwsRangeError);
       });
     });
 
     test('for distance() source URLs must match', () {
-      expect(
-          () => location.distance(new SourceLocation(0)), throwsArgumentError);
+      expect(() => location.distance(SourceLocation(0)), throwsArgumentError);
     });
 
     test('for compareTo() source URLs must match', () {
-      expect(
-          () => location.compareTo(new SourceLocation(0)), throwsArgumentError);
+      expect(() => location.compareTo(SourceLocation(0)), throwsArgumentError);
     });
   });
 
@@ -51,13 +48,13 @@
     });
 
     test('gracefully handles a missing source URL', () {
-      var location = new SourceLocation(15, line: 2, column: 6);
+      var location = SourceLocation(15, line: 2, column: 6);
       expect(location.toolString, equals('unknown source:3:7'));
     });
   });
 
   test("distance returns the absolute distance between locations", () {
-    var other = new SourceLocation(10, sourceUrl: "foo.dart");
+    var other = SourceLocation(10, sourceUrl: "foo.dart");
     expect(location.distance(other), equals(5));
     expect(other.distance(location), equals(5));
   });
@@ -71,7 +68,7 @@
 
   group("compareTo()", () {
     test("sorts by offset", () {
-      var other = new SourceLocation(20, sourceUrl: "foo.dart");
+      var other = SourceLocation(20, sourceUrl: "foo.dart");
       expect(location.compareTo(other), lessThan(0));
       expect(other.compareTo(location), greaterThan(0));
     });
@@ -83,17 +80,17 @@
 
   group("equality", () {
     test("two locations with the same offset and source are equal", () {
-      var other = new SourceLocation(15, sourceUrl: "foo.dart");
+      var other = SourceLocation(15, sourceUrl: "foo.dart");
       expect(location, equals(other));
     });
 
     test("a different offset isn't equal", () {
-      var other = new SourceLocation(10, sourceUrl: "foo.dart");
+      var other = SourceLocation(10, sourceUrl: "foo.dart");
       expect(location, isNot(equals(other)));
     });
 
     test("a different source isn't equal", () {
-      var other = new SourceLocation(15, sourceUrl: "bar.dart");
+      var other = SourceLocation(15, sourceUrl: "bar.dart");
       expect(location, isNot(equals(other)));
     });
   });
diff --git a/test/span_test.dart b/test/span_test.dart
index 9989516..6a18b42 100644
--- a/test/span_test.dart
+++ b/test/span_test.dart
@@ -21,122 +21,114 @@
 
   var span;
   setUp(() {
-    span = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
-        new SourceLocation(12, sourceUrl: "foo.dart"), "foo bar");
+    span = SourceSpan(SourceLocation(5, sourceUrl: "foo.dart"),
+        SourceLocation(12, sourceUrl: "foo.dart"), "foo bar");
   });
 
   group('errors', () {
     group('for new SourceSpan()', () {
       test('source URLs must match', () {
-        var start = new SourceLocation(0, sourceUrl: "foo.dart");
-        var end = new SourceLocation(1, sourceUrl: "bar.dart");
-        expect(() => new SourceSpan(start, end, "_"), throwsArgumentError);
+        var start = SourceLocation(0, sourceUrl: "foo.dart");
+        var end = SourceLocation(1, sourceUrl: "bar.dart");
+        expect(() => SourceSpan(start, end, "_"), throwsArgumentError);
       });
 
       test('end must come after start', () {
-        var start = new SourceLocation(1);
-        var end = new SourceLocation(0);
-        expect(() => new SourceSpan(start, end, "_"), throwsArgumentError);
+        var start = SourceLocation(1);
+        var end = SourceLocation(0);
+        expect(() => SourceSpan(start, end, "_"), throwsArgumentError);
       });
 
       test('text must be the right length', () {
-        var start = new SourceLocation(0);
-        var end = new SourceLocation(1);
-        expect(() => new SourceSpan(start, end, "abc"), throwsArgumentError);
+        var start = SourceLocation(0);
+        var end = SourceLocation(1);
+        expect(() => SourceSpan(start, end, "abc"), throwsArgumentError);
       });
     });
 
     group('for new SourceSpanWithContext()', () {
       test('context must contain text', () {
-        var start = new SourceLocation(2);
-        var end = new SourceLocation(5);
-        expect(() => new SourceSpanWithContext(start, end, "abc", "--axc--"),
+        var start = SourceLocation(2);
+        var end = SourceLocation(5);
+        expect(() => SourceSpanWithContext(start, end, "abc", "--axc--"),
             throwsArgumentError);
       });
 
       test('text starts at start.column in context', () {
-        var start = new SourceLocation(3);
-        var end = new SourceLocation(5);
-        expect(() => new SourceSpanWithContext(start, end, "abc", "--abc--"),
+        var start = SourceLocation(3);
+        var end = SourceLocation(5);
+        expect(() => SourceSpanWithContext(start, end, "abc", "--abc--"),
             throwsArgumentError);
       });
 
       test('text starts at start.column of line in multi-line context', () {
-        var start = new SourceLocation(4, line: 55, column: 3);
-        var end = new SourceLocation(7, line: 55, column: 6);
-        expect(() => new SourceSpanWithContext(start, end, "abc", "\n--abc--"),
+        var start = SourceLocation(4, line: 55, column: 3);
+        var end = SourceLocation(7, line: 55, column: 6);
+        expect(() => SourceSpanWithContext(start, end, "abc", "\n--abc--"),
             throwsArgumentError);
-        expect(
-            () => new SourceSpanWithContext(start, end, "abc", "\n----abc--"),
+        expect(() => SourceSpanWithContext(start, end, "abc", "\n----abc--"),
             throwsArgumentError);
-        expect(
-            () => new SourceSpanWithContext(start, end, "abc", "\n\n--abc--"),
+        expect(() => SourceSpanWithContext(start, end, "abc", "\n\n--abc--"),
             throwsArgumentError);
 
         // However, these are valid:
-        new SourceSpanWithContext(start, end, "abc", "\n---abc--");
-        new SourceSpanWithContext(start, end, "abc", "\n\n---abc--");
+        SourceSpanWithContext(start, end, "abc", "\n---abc--");
+        SourceSpanWithContext(start, end, "abc", "\n\n---abc--");
       });
 
       test('text can occur multiple times in context', () {
-        var start1 = new SourceLocation(4, line: 55, column: 2);
-        var end1 = new SourceLocation(7, line: 55, column: 5);
-        var start2 = new SourceLocation(4, line: 55, column: 8);
-        var end2 = new SourceLocation(7, line: 55, column: 11);
-        new SourceSpanWithContext(start1, end1, "abc", "--abc---abc--\n");
-        new SourceSpanWithContext(start1, end1, "abc", "--abc--abc--\n");
-        new SourceSpanWithContext(start2, end2, "abc", "--abc---abc--\n");
-        new SourceSpanWithContext(start2, end2, "abc", "---abc--abc--\n");
+        var start1 = SourceLocation(4, line: 55, column: 2);
+        var end1 = SourceLocation(7, line: 55, column: 5);
+        var start2 = SourceLocation(4, line: 55, column: 8);
+        var end2 = SourceLocation(7, line: 55, column: 11);
+        SourceSpanWithContext(start1, end1, "abc", "--abc---abc--\n");
+        SourceSpanWithContext(start1, end1, "abc", "--abc--abc--\n");
+        SourceSpanWithContext(start2, end2, "abc", "--abc---abc--\n");
+        SourceSpanWithContext(start2, end2, "abc", "---abc--abc--\n");
         expect(
-            () => new SourceSpanWithContext(
-                start1, end1, "abc", "---abc--abc--\n"),
+            () => SourceSpanWithContext(start1, end1, "abc", "---abc--abc--\n"),
             throwsArgumentError);
         expect(
-            () => new SourceSpanWithContext(
-                start2, end2, "abc", "--abc--abc--\n"),
+            () => SourceSpanWithContext(start2, end2, "abc", "--abc--abc--\n"),
             throwsArgumentError);
       });
     });
 
     group('for union()', () {
       test('source URLs must match', () {
-        var other = new SourceSpan(
-            new SourceLocation(12, sourceUrl: "bar.dart"),
-            new SourceLocation(13, sourceUrl: "bar.dart"),
-            "_");
+        var other = SourceSpan(SourceLocation(12, sourceUrl: "bar.dart"),
+            SourceLocation(13, sourceUrl: "bar.dart"), "_");
 
         expect(() => span.union(other), throwsArgumentError);
       });
 
       test('spans may not be disjoint', () {
-        var other = new SourceSpan(
-            new SourceLocation(13, sourceUrl: 'foo.dart'),
-            new SourceLocation(14, sourceUrl: 'foo.dart'),
-            "_");
+        var other = SourceSpan(SourceLocation(13, sourceUrl: 'foo.dart'),
+            SourceLocation(14, sourceUrl: 'foo.dart'), "_");
 
         expect(() => span.union(other), throwsArgumentError);
       });
     });
 
     test('for compareTo() source URLs must match', () {
-      var other = new SourceSpan(new SourceLocation(12, sourceUrl: "bar.dart"),
-          new SourceLocation(13, sourceUrl: "bar.dart"), "_");
+      var other = SourceSpan(SourceLocation(12, sourceUrl: "bar.dart"),
+          SourceLocation(13, sourceUrl: "bar.dart"), "_");
 
       expect(() => span.compareTo(other), throwsArgumentError);
     });
   });
 
   test('fields work correctly', () {
-    expect(span.start, equals(new SourceLocation(5, sourceUrl: "foo.dart")));
-    expect(span.end, equals(new SourceLocation(12, sourceUrl: "foo.dart")));
+    expect(span.start, equals(SourceLocation(5, sourceUrl: "foo.dart")));
+    expect(span.end, equals(SourceLocation(12, sourceUrl: "foo.dart")));
     expect(span.sourceUrl, equals(Uri.parse("foo.dart")));
     expect(span.length, equals(7));
   });
 
   group("union()", () {
     test("works with a preceding adjacent span", () {
-      var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
-          new SourceLocation(5, sourceUrl: "foo.dart"), "hey, ");
+      var other = SourceSpan(SourceLocation(0, sourceUrl: "foo.dart"),
+          SourceLocation(5, sourceUrl: "foo.dart"), "hey, ");
 
       var result = span.union(other);
       expect(result.start, equals(other.start));
@@ -145,8 +137,8 @@
     });
 
     test("works with a preceding overlapping span", () {
-      var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
-          new SourceLocation(8, sourceUrl: "foo.dart"), "hey, foo");
+      var other = SourceSpan(SourceLocation(0, sourceUrl: "foo.dart"),
+          SourceLocation(8, sourceUrl: "foo.dart"), "hey, foo");
 
       var result = span.union(other);
       expect(result.start, equals(other.start));
@@ -155,8 +147,8 @@
     });
 
     test("works with a following adjacent span", () {
-      var other = new SourceSpan(new SourceLocation(12, sourceUrl: "foo.dart"),
-          new SourceLocation(16, sourceUrl: "foo.dart"), " baz");
+      var other = SourceSpan(SourceLocation(12, sourceUrl: "foo.dart"),
+          SourceLocation(16, sourceUrl: "foo.dart"), " baz");
 
       var result = span.union(other);
       expect(result.start, equals(span.start));
@@ -165,8 +157,8 @@
     });
 
     test("works with a following overlapping span", () {
-      var other = new SourceSpan(new SourceLocation(9, sourceUrl: "foo.dart"),
-          new SourceLocation(16, sourceUrl: "foo.dart"), "bar baz");
+      var other = SourceSpan(SourceLocation(9, sourceUrl: "foo.dart"),
+          SourceLocation(16, sourceUrl: "foo.dart"), "bar baz");
 
       var result = span.union(other);
       expect(result.start, equals(span.start));
@@ -175,15 +167,15 @@
     });
 
     test("works with an internal overlapping span", () {
-      var other = new SourceSpan(new SourceLocation(7, sourceUrl: "foo.dart"),
-          new SourceLocation(10, sourceUrl: "foo.dart"), "o b");
+      var other = SourceSpan(SourceLocation(7, sourceUrl: "foo.dart"),
+          SourceLocation(10, sourceUrl: "foo.dart"), "o b");
 
       expect(span.union(other), equals(span));
     });
 
     test("works with an external overlapping span", () {
-      var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
-          new SourceLocation(16, sourceUrl: "foo.dart"), "hey, foo bar baz");
+      var other = SourceSpan(SourceLocation(0, sourceUrl: "foo.dart"),
+          SourceLocation(16, sourceUrl: "foo.dart"), "hey, foo bar baz");
 
       expect(span.union(other), equals(other));
     });
@@ -200,8 +192,7 @@
     });
 
     test("gracefully handles a missing source URL", () {
-      var span = new SourceSpan(
-          new SourceLocation(5), new SourceLocation(12), "foo bar");
+      var span = SourceSpan(SourceLocation(5), SourceLocation(12), "foo bar");
 
       expect(span.message("oh no"), equalsIgnoringWhitespace("""
 line 1, column 6: oh no
@@ -212,8 +203,7 @@
     });
 
     test("gracefully handles empty text", () {
-      var span =
-          new SourceSpan(new SourceLocation(5), new SourceLocation(5), "");
+      var span = SourceSpan(SourceLocation(5), SourceLocation(5), "");
 
       expect(span.message("oh no"), equals("line 1, column 6: oh no"));
     });
@@ -246,9 +236,9 @@
     });
 
     test("with context, underlines the right column", () {
-      var spanWithContext = new SourceSpanWithContext(
-          new SourceLocation(5, sourceUrl: "foo.dart"),
-          new SourceLocation(12, sourceUrl: "foo.dart"),
+      var spanWithContext = SourceSpanWithContext(
+          SourceLocation(5, sourceUrl: "foo.dart"),
+          SourceLocation(12, sourceUrl: "foo.dart"),
           "foo bar",
           "-----foo bar-----");
 
@@ -263,16 +253,16 @@
 
   group("compareTo()", () {
     test("sorts by start location first", () {
-      var other = new SourceSpan(new SourceLocation(6, sourceUrl: "foo.dart"),
-          new SourceLocation(14, sourceUrl: "foo.dart"), "oo bar b");
+      var other = SourceSpan(SourceLocation(6, sourceUrl: "foo.dart"),
+          SourceLocation(14, sourceUrl: "foo.dart"), "oo bar b");
 
       expect(span.compareTo(other), lessThan(0));
       expect(other.compareTo(span), greaterThan(0));
     });
 
     test("sorts by length second", () {
-      var other = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
-          new SourceLocation(14, sourceUrl: "foo.dart"), "foo bar b");
+      var other = SourceSpan(SourceLocation(5, sourceUrl: "foo.dart"),
+          SourceLocation(14, sourceUrl: "foo.dart"), "foo bar b");
 
       expect(span.compareTo(other), lessThan(0));
       expect(other.compareTo(span), greaterThan(0));
@@ -285,29 +275,29 @@
 
   group("equality", () {
     test("two spans with the same locations are equal", () {
-      var other = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
-          new SourceLocation(12, sourceUrl: "foo.dart"), "foo bar");
+      var other = SourceSpan(SourceLocation(5, sourceUrl: "foo.dart"),
+          SourceLocation(12, sourceUrl: "foo.dart"), "foo bar");
 
       expect(span, equals(other));
     });
 
     test("a different start isn't equal", () {
-      var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
-          new SourceLocation(12, sourceUrl: "foo.dart"), "hey, foo bar");
+      var other = SourceSpan(SourceLocation(0, sourceUrl: "foo.dart"),
+          SourceLocation(12, sourceUrl: "foo.dart"), "hey, foo bar");
 
       expect(span, isNot(equals(other)));
     });
 
     test("a different end isn't equal", () {
-      var other = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
-          new SourceLocation(16, sourceUrl: "foo.dart"), "foo bar baz");
+      var other = SourceSpan(SourceLocation(5, sourceUrl: "foo.dart"),
+          SourceLocation(16, sourceUrl: "foo.dart"), "foo bar baz");
 
       expect(span, isNot(equals(other)));
     });
 
     test("a different source URL isn't equal", () {
-      var other = new SourceSpan(new SourceLocation(5, sourceUrl: "bar.dart"),
-          new SourceLocation(12, sourceUrl: "bar.dart"), "foo bar");
+      var other = SourceSpan(SourceLocation(5, sourceUrl: "bar.dart"),
+          SourceLocation(12, sourceUrl: "bar.dart"), "foo bar");
 
       expect(span, isNot(equals(other)));
     });
