Enable and fix a number of lints
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..7f965d2
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,43 @@
+include: package:pedantic/analysis_options.yaml
+analyzer:
+  strong-mode:
+    implicit-casts: false
+linter:
+  rules:
+    - avoid_empty_else
+    - avoid_init_to_null
+    - avoid_null_checks_in_equality_operators
+    - avoid_unused_constructor_parameters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    #- constant_identifier_names
+    - control_flow_in_finally
+    - directives_ordering
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - hash_and_equals
+    - implementation_imports
+    - iterable_contains_unrelated_type
+    - library_names
+    - library_prefixes
+    - list_remove_unrelated_type
+    - non_constant_identifier_names
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_equal_for_default_values
+    - prefer_final_fields
+    - prefer_generic_function_type_aliases
+    - prefer_is_not_empty
+    - slash_for_doc_comments
+    - test_types_in_equals
+    - throw_in_finally
+    - type_init_formals
+    - unnecessary_brace_in_string_interps
+    - unnecessary_const
+    - unnecessary_new
+    - unrelated_type_equality_checks
+    - valid_regexps
diff --git a/benchmark/benchmark.dart b/benchmark/benchmark.dart
index e3521b1..5e080eb 100644
--- a/benchmark/benchmark.dart
+++ b/benchmark/benchmark.dart
@@ -23,7 +23,7 @@
   // Run the benchmark several times. This ensures the VM is warmed up and lets
   // us see how much variance there is.
   for (var i = 0; i <= numTrials; i++) {
-    var start = new DateTime.now();
+    var start = DateTime.now();
 
     // For a single benchmark, convert the source multiple times.
     var result;
@@ -32,7 +32,7 @@
     }
 
     var elapsed =
-        new DateTime.now().difference(start).inMilliseconds / runsPerTrial;
+        DateTime.now().difference(start).inMilliseconds / runsPerTrial;
 
     // Keep track of the best run so far.
     if (elapsed >= best) continue;
@@ -56,7 +56,7 @@
 
 String loadFile(String name) {
   var path = p.join(p.dirname(p.fromUri(Platform.script)), name);
-  return new File(path).readAsStringSync();
+  return File(path).readAsStringSync();
 }
 
 void printResult(String label, double time) {
diff --git a/codereview.settings b/codereview.settings
deleted file mode 100644
index 03b6c27..0000000
--- a/codereview.settings
+++ /dev/null
@@ -1,3 +0,0 @@
-CODE_REVIEW_SERVER: https://codereview.chromium.org/
-VIEW_VC: https://github.com/dart-lang/yaml/commit/
-CC_LIST: reviews@dartlang.org
\ No newline at end of file
diff --git a/lib/src/equality.dart b/lib/src/equality.dart
index 3c947a9..66b8196 100644
--- a/lib/src/equality.dart
+++ b/lib/src/equality.dart
@@ -10,13 +10,13 @@
 
 /// Returns a [Map] that compares its keys based on [deepEquals].
 Map<K, V> deepEqualsMap<K, V>() =>
-    new HashMap(equals: deepEquals, hashCode: deepHashCode);
+    HashMap(equals: deepEquals, hashCode: deepHashCode);
 
 /// Returns whether two objects are structurally equivalent.
 ///
 /// This considers `NaN` values to be equivalent, handles self-referential
 /// structures, and considers [YamlScalar]s to be equal to their values.
-bool deepEquals(obj1, obj2) => new _DeepEquals().equals(obj1, obj2);
+bool deepEquals(obj1, obj2) => _DeepEquals().equals(obj1, obj2);
 
 /// A class that provides access to the list of parent objects used for loop
 /// detection.
diff --git a/lib/src/event.dart b/lib/src/event.dart
index 296df22..3be5a0a 100644
--- a/lib/src/event.dart
+++ b/lib/src/event.dart
@@ -38,7 +38,7 @@
   DocumentStartEvent(this.span,
       {this.versionDirective,
       List<TagDirective> tagDirectives,
-      this.isImplicit: true})
+      this.isImplicit = true})
       : tagDirectives = tagDirectives == null ? [] : tagDirectives;
 
   String toString() => "DOCUMENT_START";
@@ -53,7 +53,7 @@
   /// `...` sequence).
   final bool isImplicit;
 
-  DocumentEndEvent(this.span, {this.isImplicit: true});
+  DocumentEndEvent(this.span, {this.isImplicit = true});
 
   String toString() => "DOCUMENT_END";
 }
@@ -81,7 +81,7 @@
   String get tag;
 
   String toString() {
-    var buffer = new StringBuffer('$type');
+    var buffer = StringBuffer('$type');
     if (anchor != null) buffer.write(" &$anchor");
     if (tag != null) buffer.write(" $tag");
     return buffer.toString();
@@ -134,20 +134,20 @@
 
 /// An enum of types of [Event] object.
 class EventType {
-  static const STREAM_START = const EventType._("STREAM_START");
-  static const STREAM_END = const EventType._("STREAM_END");
+  static const STREAM_START = EventType._("STREAM_START");
+  static const STREAM_END = EventType._("STREAM_END");
 
-  static const DOCUMENT_START = const EventType._("DOCUMENT_START");
-  static const DOCUMENT_END = const EventType._("DOCUMENT_END");
+  static const DOCUMENT_START = EventType._("DOCUMENT_START");
+  static const DOCUMENT_END = EventType._("DOCUMENT_END");
 
-  static const ALIAS = const EventType._("ALIAS");
-  static const SCALAR = const EventType._("SCALAR");
+  static const ALIAS = EventType._("ALIAS");
+  static const SCALAR = EventType._("SCALAR");
 
-  static const SEQUENCE_START = const EventType._("SEQUENCE_START");
-  static const SEQUENCE_END = const EventType._("SEQUENCE_END");
+  static const SEQUENCE_START = EventType._("SEQUENCE_START");
+  static const SEQUENCE_END = EventType._("SEQUENCE_END");
 
-  static const MAPPING_START = const EventType._("MAPPING_START");
-  static const MAPPING_END = const EventType._("MAPPING_END");
+  static const MAPPING_START = EventType._("MAPPING_START");
+  static const MAPPING_END = EventType._("MAPPING_END");
 
   final String name;
 
diff --git a/lib/src/loader.dart b/lib/src/loader.dart
index 956b17c..70aec36 100644
--- a/lib/src/loader.dart
+++ b/lib/src/loader.dart
@@ -23,7 +23,7 @@
   final Parser _parser;
 
   /// Aliases by the alias name.
-  final _aliases = new Map<String, YamlNode>();
+  final _aliases = Map<String, YamlNode>();
 
   /// The span of the entire stream emitted so far.
   FileSpan get span => _span;
@@ -33,7 +33,7 @@
   ///
   /// [sourceUrl] can be a String or a [Uri].
   Loader(String source, {sourceUrl})
-      : _parser = new Parser(source, sourceUrl: sourceUrl) {
+      : _parser = Parser(source, sourceUrl: sourceUrl) {
     var event = _parser.parse();
     _span = event.span;
     assert(event.type == EventType.STREAM_START);
@@ -51,8 +51,8 @@
       return null;
     }
 
-    var document = _loadDocument(event);
-    _span = _span.expand(document.span);
+    var document = _loadDocument(event as DocumentStartEvent);
+    _span = _span.expand(document.span as FileSpan);
     _aliases.clear();
     return document;
   }
@@ -64,7 +64,7 @@
     var lastEvent = _parser.parse() as DocumentEndEvent;
     assert(lastEvent.type == EventType.DOCUMENT_END);
 
-    return new YamlDocument.internal(
+    return YamlDocument.internal(
         contents,
         firstEvent.span.expand(lastEvent.span),
         firstEvent.versionDirective,
@@ -77,13 +77,13 @@
   YamlNode _loadNode(Event firstEvent) {
     switch (firstEvent.type) {
       case EventType.ALIAS:
-        return _loadAlias(firstEvent);
+        return _loadAlias(firstEvent as AliasEvent);
       case EventType.SCALAR:
-        return _loadScalar(firstEvent);
+        return _loadScalar(firstEvent as ScalarEvent);
       case EventType.SEQUENCE_START:
-        return _loadSequence(firstEvent);
+        return _loadSequence(firstEvent as SequenceStartEvent);
       case EventType.MAPPING_START:
-        return _loadMapping(firstEvent);
+        return _loadMapping(firstEvent as MappingStartEvent);
       default:
         throw "Unreachable";
     }
@@ -105,14 +105,14 @@
     var alias = _aliases[event.name];
     if (alias != null) return alias;
 
-    throw new YamlException("Undefined alias.", event.span);
+    throw YamlException("Undefined alias.", event.span);
   }
 
   /// Composes a scalar node.
   YamlNode _loadScalar(ScalarEvent scalar) {
-    var node;
+    YamlNode node;
     if (scalar.tag == "!") {
-      node = new YamlScalar.internal(scalar.value, scalar);
+      node = YamlScalar.internal(scalar.value, scalar);
     } else if (scalar.tag != null) {
       node = _parseByTag(scalar);
     } else {
@@ -128,12 +128,11 @@
     if (firstEvent.tag != "!" &&
         firstEvent.tag != null &&
         firstEvent.tag != "tag:yaml.org,2002:seq") {
-      throw new YamlException("Invalid tag for sequence.", firstEvent.span);
+      throw YamlException("Invalid tag for sequence.", firstEvent.span);
     }
 
     var children = <YamlNode>[];
-    var node =
-        new YamlList.internal(children, firstEvent.span, firstEvent.style);
+    var node = YamlList.internal(children, firstEvent.span, firstEvent.style);
     _registerAnchor(firstEvent.anchor, node);
 
     var event = _parser.parse();
@@ -151,12 +150,11 @@
     if (firstEvent.tag != "!" &&
         firstEvent.tag != null &&
         firstEvent.tag != "tag:yaml.org,2002:map") {
-      throw new YamlException("Invalid tag for mapping.", firstEvent.span);
+      throw YamlException("Invalid tag for mapping.", firstEvent.span);
     }
 
     var children = deepEqualsMap<dynamic, YamlNode>();
-    var node =
-        new YamlMap.internal(children, firstEvent.span, firstEvent.style);
+    var node = YamlMap.internal(children, firstEvent.span, firstEvent.style);
     _registerAnchor(firstEvent.anchor, node);
 
     var event = _parser.parse();
@@ -164,7 +162,7 @@
       var key = _loadNode(event);
       var value = _loadNode(_parser.parse());
       if (children.containsKey(key)) {
-        throw new YamlException("Duplicate mapping key.", key.span);
+        throw YamlException("Duplicate mapping key.", key.span);
       }
 
       children[key] = value;
@@ -181,29 +179,29 @@
       case "tag:yaml.org,2002:null":
         var result = _parseNull(scalar);
         if (result != null) return result;
-        throw new YamlException("Invalid null scalar.", scalar.span);
+        throw YamlException("Invalid null scalar.", scalar.span);
       case "tag:yaml.org,2002:bool":
         var result = _parseBool(scalar);
         if (result != null) return result;
-        throw new YamlException("Invalid bool scalar.", scalar.span);
+        throw YamlException("Invalid bool scalar.", scalar.span);
       case "tag:yaml.org,2002:int":
         var result = _parseNumber(scalar, allowFloat: false);
         if (result != null) return result;
-        throw new YamlException("Invalid int scalar.", scalar.span);
+        throw YamlException("Invalid int scalar.", scalar.span);
       case "tag:yaml.org,2002:float":
         var result = _parseNumber(scalar, allowInt: false);
         if (result != null) return result;
-        throw new YamlException("Invalid float scalar.", scalar.span);
+        throw YamlException("Invalid float scalar.", scalar.span);
       case "tag:yaml.org,2002:str":
-        return new YamlScalar.internal(scalar.value, scalar);
+        return YamlScalar.internal(scalar.value, scalar);
       default:
-        throw new YamlException('Undefined tag: ${scalar.tag}.', scalar.span);
+        throw YamlException('Undefined tag: ${scalar.tag}.', scalar.span);
     }
   }
 
   /// Parses [scalar], which may be one of several types.
   YamlScalar _parseScalar(ScalarEvent scalar) =>
-      _tryParseScalar(scalar) ?? new YamlScalar.internal(scalar.value, scalar);
+      _tryParseScalar(scalar) ?? YamlScalar.internal(scalar.value, scalar);
 
   /// Tries to parse [scalar].
   ///
@@ -212,7 +210,7 @@
   YamlScalar _tryParseScalar(ScalarEvent scalar) {
     // Quickly check for the empty string, which means null.
     var length = scalar.value.length;
-    if (length == 0) return new YamlScalar.internal(null, scalar);
+    if (length == 0) return YamlScalar.internal(null, scalar);
 
     // Dispatch on the first character.
     var firstChar = scalar.value.codeUnitAt(0);
@@ -231,7 +229,7 @@
       case $F:
         return length == 5 ? _parseBool(scalar) : null;
       case $tilde:
-        return length == 1 ? new YamlScalar.internal(null, scalar) : null;
+        return length == 1 ? YamlScalar.internal(null, scalar) : null;
       default:
         if (firstChar >= $0 && firstChar <= $9) return _parseNumber(scalar);
         return null;
@@ -248,7 +246,7 @@
       case "Null":
       case "NULL":
       case "~":
-        return new YamlScalar.internal(null, scalar);
+        return YamlScalar.internal(null, scalar);
       default:
         return null;
     }
@@ -262,11 +260,11 @@
       case "true":
       case "True":
       case "TRUE":
-        return new YamlScalar.internal(true, scalar);
+        return YamlScalar.internal(true, scalar);
       case "false":
       case "False":
       case "FALSE":
-        return new YamlScalar.internal(false, scalar);
+        return YamlScalar.internal(false, scalar);
       default:
         return null;
     }
@@ -275,18 +273,18 @@
   /// Parses a numeric scalar.
   ///
   /// Returns `null` if parsing fails.
-  YamlNode _parseNumber(ScalarEvent scalar,
-      {bool allowInt: true, bool allowFloat: true}) {
+  YamlScalar _parseNumber(ScalarEvent scalar,
+      {bool allowInt = true, bool allowFloat = true}) {
     var value = _parseNumberValue(scalar.value,
         allowInt: allowInt, allowFloat: allowFloat);
-    return value == null ? null : new YamlScalar.internal(value, scalar);
+    return value == null ? null : YamlScalar.internal(value, scalar);
   }
 
   /// Parses the value of a number.
   ///
   /// Returns the number if it's parsed successfully, or `null` if it's not.
   num _parseNumberValue(String contents,
-      {bool allowInt: true, bool allowFloat: true}) {
+      {bool allowInt = true, bool allowFloat = true}) {
     assert(allowInt || allowFloat);
 
     var firstChar = contents.codeUnitAt(0);
@@ -317,7 +315,7 @@
             secondChar >= $0 &&
             secondChar <= $9)) {
       // Try to parse an int or, failing that, a double.
-      var result = null;
+      num result;
       if (allowInt) {
         // Pass "radix: 10" explicitly to ensure that "-0x10", which is valid
         // Dart but invalid YAML, doesn't get parsed.
diff --git a/lib/src/null_span.dart b/lib/src/null_span.dart
index eab4ec0..7f0c9d6 100644
--- a/lib/src/null_span.dart
+++ b/lib/src/null_span.dart
@@ -14,5 +14,5 @@
   SourceLocation get end => start;
   final text = "";
 
-  NullSpan(sourceUrl) : start = new SourceLocation(0, sourceUrl: sourceUrl);
+  NullSpan(sourceUrl) : start = SourceLocation(0, sourceUrl: sourceUrl);
 }
diff --git a/lib/src/parser.dart b/lib/src/parser.dart
index 24e9e02..bffaa17 100644
--- a/lib/src/parser.dart
+++ b/lib/src/parser.dart
@@ -23,13 +23,13 @@
   final Scanner _scanner;
 
   /// The stack of parse states for nested contexts.
-  final _states = new List<_State>();
+  final _states = List<_State>();
 
   /// The current parse state.
   var _state = _State.STREAM_START;
 
   /// The custom tag directives, by tag handle.
-  final _tagDirectives = new Map<String, TagDirective>();
+  final _tagDirectives = Map<String, TagDirective>();
 
   /// Whether the parser has finished parsing.
   bool get isDone => _state == _State.END;
@@ -38,16 +38,16 @@
   ///
   /// [sourceUrl] can be a String or a [Uri].
   Parser(String source, {sourceUrl})
-      : _scanner = new Scanner(source, sourceUrl: sourceUrl);
+      : _scanner = Scanner(source, sourceUrl: sourceUrl);
 
   /// Consumes and returns the next event.
   Event parse() {
     try {
-      if (isDone) throw new StateError("No more events.");
+      if (isDone) throw StateError("No more events.");
       var event = _stateMachine();
       return event;
     } on StringScannerException catch (error) {
-      throw new YamlException(error.message, error.span);
+      throw YamlException(error.message, error.span);
     }
   }
 
@@ -119,7 +119,7 @@
     assert(token.type == TokenType.STREAM_START);
 
     _state = _State.DOCUMENT_START;
-    return new Event(EventType.STREAM_START, token.span);
+    return Event(EventType.STREAM_START, token.span);
   }
 
   /// Parses the productions:
@@ -149,13 +149,13 @@
       _processDirectives();
       _states.add(_State.DOCUMENT_END);
       _state = _State.BLOCK_NODE;
-      return new DocumentStartEvent(token.span.start.pointSpan());
+      return DocumentStartEvent(token.span.start.pointSpan());
     }
 
     if (token.type == TokenType.STREAM_END) {
       _state = _State.END;
       _scanner.scan();
-      return new Event(EventType.STREAM_END, token.span);
+      return Event(EventType.STREAM_END, token.span);
     }
 
     // Parse an explicit document.
@@ -165,13 +165,13 @@
     var tagDirectives = pair.last;
     token = _scanner.peek();
     if (token.type != TokenType.DOCUMENT_START) {
-      throw new YamlException("Expected document start.", token.span);
+      throw YamlException("Expected document start.", token.span);
     }
 
     _states.add(_State.DOCUMENT_END);
     _state = _State.DOCUMENT_CONTENT;
     _scanner.scan();
-    return new DocumentStartEvent(start.expand(token.span),
+    return DocumentStartEvent(start.expand(token.span),
         versionDirective: versionDirective,
         tagDirectives: tagDirectives,
         isImplicit: false);
@@ -212,10 +212,9 @@
     var token = _scanner.peek();
     if (token.type == TokenType.DOCUMENT_END) {
       _scanner.scan();
-      return new DocumentEndEvent(token.span, isImplicit: false);
+      return DocumentEndEvent(token.span, isImplicit: false);
     } else {
-      return new DocumentEndEvent(token.span.start.pointSpan(),
-          isImplicit: true);
+      return DocumentEndEvent(token.span.start.pointSpan(), isImplicit: true);
     }
   }
 
@@ -246,46 +245,46 @@
   ///                                                                   ******
   ///     flow_content         ::= flow_collection | SCALAR
   ///                                                ******
-  Event _parseNode({bool block: false, bool indentlessSequence: false}) {
+  Event _parseNode({bool block = false, bool indentlessSequence = false}) {
     var token = _scanner.peek();
 
     if (token is AliasToken) {
       _scanner.scan();
       _state = _states.removeLast();
-      return new AliasEvent(token.span, token.name);
+      return AliasEvent(token.span, token.name);
     }
 
-    var anchor;
-    var tagToken;
+    String anchor;
+    TagToken tagToken;
     var span = token.span.start.pointSpan();
-    parseAnchor(token) {
+    Token parseAnchor(AnchorToken token) {
       anchor = token.name;
       span = span.expand(token.span);
       return _scanner.advance();
     }
 
-    parseTag(token) {
+    Token parseTag(TagToken token) {
       tagToken = token;
       span = span.expand(token.span);
       return _scanner.advance();
     }
 
     if (token is AnchorToken) {
-      token = parseAnchor(token);
-      if (token is TagToken) token = parseTag(token);
+      token = parseAnchor(token as AnchorToken);
+      if (token is TagToken) token = parseTag(token as TagToken);
     } else if (token is TagToken) {
-      token = parseTag(token);
-      if (token is AnchorToken) token = parseAnchor(token);
+      token = parseTag(token as TagToken);
+      if (token is AnchorToken) token = parseAnchor(token as AnchorToken);
     }
 
-    var tag;
+    String tag;
     if (tagToken != null) {
       if (tagToken.handle == null) {
         tag = tagToken.suffix;
       } else {
         var tagDirective = _tagDirectives[tagToken.handle];
         if (tagDirective == null) {
-          throw new YamlException("Undefined tag handle.", tagToken.span);
+          throw YamlException("Undefined tag handle.", tagToken.span);
         }
 
         tag = tagDirective.prefix + tagToken.suffix;
@@ -294,8 +293,7 @@
 
     if (indentlessSequence && token.type == TokenType.BLOCK_ENTRY) {
       _state = _State.INDENTLESS_SEQUENCE_ENTRY;
-      return new SequenceStartEvent(
-          span.expand(token.span), CollectionStyle.BLOCK,
+      return SequenceStartEvent(span.expand(token.span), CollectionStyle.BLOCK,
           anchor: anchor, tag: tag);
     }
 
@@ -305,45 +303,40 @@
 
       _state = _states.removeLast();
       _scanner.scan();
-      return new ScalarEvent(span.expand(token.span), token.value, token.style,
+      return ScalarEvent(span.expand(token.span), token.value, token.style,
           anchor: anchor, tag: tag);
     }
 
     if (token.type == TokenType.FLOW_SEQUENCE_START) {
       _state = _State.FLOW_SEQUENCE_FIRST_ENTRY;
-      return new SequenceStartEvent(
-          span.expand(token.span), CollectionStyle.FLOW,
+      return SequenceStartEvent(span.expand(token.span), CollectionStyle.FLOW,
           anchor: anchor, tag: tag);
     }
 
     if (token.type == TokenType.FLOW_MAPPING_START) {
       _state = _State.FLOW_MAPPING_FIRST_KEY;
-      return new MappingStartEvent(
-          span.expand(token.span), CollectionStyle.FLOW,
+      return MappingStartEvent(span.expand(token.span), CollectionStyle.FLOW,
           anchor: anchor, tag: tag);
     }
 
     if (block && token.type == TokenType.BLOCK_SEQUENCE_START) {
       _state = _State.BLOCK_SEQUENCE_FIRST_ENTRY;
-      return new SequenceStartEvent(
-          span.expand(token.span), CollectionStyle.BLOCK,
+      return SequenceStartEvent(span.expand(token.span), CollectionStyle.BLOCK,
           anchor: anchor, tag: tag);
     }
 
     if (block && token.type == TokenType.BLOCK_MAPPING_START) {
       _state = _State.BLOCK_MAPPING_FIRST_KEY;
-      return new MappingStartEvent(
-          span.expand(token.span), CollectionStyle.BLOCK,
+      return MappingStartEvent(span.expand(token.span), CollectionStyle.BLOCK,
           anchor: anchor, tag: tag);
     }
 
     if (anchor != null || tag != null) {
       _state = _states.removeLast();
-      return new ScalarEvent(span, '', ScalarStyle.PLAIN,
-          anchor: anchor, tag: tag);
+      return ScalarEvent(span, '', ScalarStyle.PLAIN, anchor: anchor, tag: tag);
     }
 
-    throw new YamlException("Expected node content.", span);
+    throw YamlException("Expected node content.", span);
   }
 
   /// Parses the productions:
@@ -370,10 +363,10 @@
     if (token.type == TokenType.BLOCK_END) {
       _scanner.scan();
       _state = _states.removeLast();
-      return new Event(EventType.SEQUENCE_END, token.span);
+      return Event(EventType.SEQUENCE_END, token.span);
     }
 
-    throw new YamlException("While parsing a block collection, expected '-'.",
+    throw YamlException("While parsing a block collection, expected '-'.",
         token.span.start.pointSpan());
   }
 
@@ -386,7 +379,7 @@
 
     if (token.type != TokenType.BLOCK_ENTRY) {
       _state = _states.removeLast();
-      return new Event(EventType.SEQUENCE_END, token.span.start.pointSpan());
+      return Event(EventType.SEQUENCE_END, token.span.start.pointSpan());
     }
 
     var start = token.span.start;
@@ -442,10 +435,10 @@
     if (token.type == TokenType.BLOCK_END) {
       _scanner.scan();
       _state = _states.removeLast();
-      return new Event(EventType.MAPPING_END, token.span);
+      return Event(EventType.MAPPING_END, token.span);
     }
 
-    throw new YamlException("Expected a key while parsing a block mapping.",
+    throw YamlException("Expected a key while parsing a block mapping.",
         token.span.start.pointSpan());
   }
 
@@ -493,14 +486,14 @@
   ///     flow_sequence_entry  ::=
   ///       flow_node | KEY flow_node? (VALUE flow_node?)?
   ///       *
-  Event _parseFlowSequenceEntry({bool first: false}) {
+  Event _parseFlowSequenceEntry({bool first = false}) {
     if (first) _scanner.scan();
     var token = _scanner.peek();
 
     if (token.type != TokenType.FLOW_SEQUENCE_END) {
       if (!first) {
         if (token.type != TokenType.FLOW_ENTRY) {
-          throw new YamlException(
+          throw YamlException(
               "While parsing a flow sequence, expected ',' or ']'.",
               token.span.start.pointSpan());
         }
@@ -511,7 +504,7 @@
       if (token.type == TokenType.KEY) {
         _state = _State.FLOW_SEQUENCE_ENTRY_MAPPING_KEY;
         _scanner.scan();
-        return new MappingStartEvent(token.span, CollectionStyle.FLOW);
+        return MappingStartEvent(token.span, CollectionStyle.FLOW);
       } else if (token.type != TokenType.FLOW_SEQUENCE_END) {
         _states.add(_State.FLOW_SEQUENCE_ENTRY);
         return _parseNode();
@@ -520,7 +513,7 @@
 
     _scanner.scan();
     _state = _states.removeLast();
-    return new Event(EventType.SEQUENCE_END, token.span);
+    return Event(EventType.SEQUENCE_END, token.span);
   }
 
   /// Parses the productions:
@@ -575,8 +568,7 @@
   ///                                                   *
   Event _parseFlowSequenceEntryMappingEnd() {
     _state = _State.FLOW_SEQUENCE_ENTRY;
-    return new Event(
-        EventType.MAPPING_END, _scanner.peek().span.start.pointSpan());
+    return Event(EventType.MAPPING_END, _scanner.peek().span.start.pointSpan());
   }
 
   /// Parses the productions:
@@ -592,14 +584,14 @@
   ///     flow_mapping_entry   ::=
   ///       flow_node | KEY flow_node? (VALUE flow_node?)?
   ///       *           *** *
-  Event _parseFlowMappingKey({bool first: false}) {
+  Event _parseFlowMappingKey({bool first = false}) {
     if (first) _scanner.scan();
     var token = _scanner.peek();
 
     if (token.type != TokenType.FLOW_MAPPING_END) {
       if (!first) {
         if (token.type != TokenType.FLOW_ENTRY) {
-          throw new YamlException(
+          throw YamlException(
               "While parsing a flow mapping, expected ',' or '}'.",
               token.span.start.pointSpan());
         }
@@ -626,7 +618,7 @@
 
     _scanner.scan();
     _state = _states.removeLast();
-    return new Event(EventType.MAPPING_END, token.span);
+    return Event(EventType.MAPPING_END, token.span);
   }
 
   /// Parses the productions:
@@ -634,7 +626,7 @@
   ///     flow_mapping_entry   ::=
   ///       flow_node | KEY flow_node? (VALUE flow_node?)?
   ///                *                  ***** *
-  Event _parseFlowMappingValue({bool empty: false}) {
+  Event _parseFlowMappingValue({bool empty = false}) {
     var token = _scanner.peek();
 
     if (empty) {
@@ -657,7 +649,7 @@
 
   /// Generate an empty scalar event.
   Event _processEmptyScalar(SourceLocation location) =>
-      new ScalarEvent(location.pointSpan(), '', ScalarStyle.PLAIN);
+      ScalarEvent(location.pointSpan() as FileSpan, '', ScalarStyle.PLAIN);
 
   /// Parses directives.
   Pair<VersionDirective, List<TagDirective>> _processDirectives() {
@@ -669,11 +661,11 @@
         token.type == TokenType.TAG_DIRECTIVE) {
       if (token is VersionDirectiveToken) {
         if (versionDirective != null) {
-          throw new YamlException("Duplicate %YAML directive.", token.span);
+          throw YamlException("Duplicate %YAML directive.", token.span);
         }
 
         if (token.major != 1 || token.minor == 0) {
-          throw new YamlException(
+          throw YamlException(
               "Incompatible YAML document. This parser only supports YAML 1.1 "
               "and 1.2.",
               token.span);
@@ -684,9 +676,9 @@
               token.span);
         }
 
-        versionDirective = new VersionDirective(token.major, token.minor);
+        versionDirective = VersionDirective(token.major, token.minor);
       } else if (token is TagDirectiveToken) {
-        var tagDirective = new TagDirective(token.handle, token.prefix);
+        var tagDirective = TagDirective(token.handle, token.prefix);
         _appendTagDirective(tagDirective, token.span);
         tagDirectives.add(tagDirective);
       }
@@ -694,22 +686,21 @@
       token = _scanner.advance();
     }
 
-    _appendTagDirective(
-        new TagDirective("!", "!"), token.span.start.pointSpan(),
+    _appendTagDirective(TagDirective("!", "!"), token.span.start.pointSpan(),
         allowDuplicates: true);
-    _appendTagDirective(new TagDirective("!!", "tag:yaml.org,2002:"),
-        token.span.start.pointSpan(),
+    _appendTagDirective(
+        TagDirective("!!", "tag:yaml.org,2002:"), token.span.start.pointSpan(),
         allowDuplicates: true);
 
-    return new Pair(versionDirective, tagDirectives);
+    return Pair(versionDirective, tagDirectives);
   }
 
   /// Adds a tag directive to the directives stack.
   void _appendTagDirective(TagDirective newDirective, FileSpan span,
-      {bool allowDuplicates: false}) {
+      {bool allowDuplicates = false}) {
     if (_tagDirectives.containsKey(newDirective.handle)) {
       if (allowDuplicates) return;
-      throw new YamlException("Duplicate %TAG directive.", span);
+      throw YamlException("Duplicate %TAG directive.", span);
     }
 
     _tagDirectives[newDirective.handle] = newDirective;
@@ -719,86 +710,81 @@
 /// The possible states for the parser.
 class _State {
   /// Expect [TokenType.STREAM_START].
-  static const STREAM_START = const _State("STREAM_START");
+  static const STREAM_START = _State("STREAM_START");
 
   /// Expect the beginning of an implicit document.
-  static const IMPLICIT_DOCUMENT_START =
-      const _State("IMPLICIT_DOCUMENT_START");
+  static const IMPLICIT_DOCUMENT_START = _State("IMPLICIT_DOCUMENT_START");
 
   /// Expect [TokenType.DOCUMENT_START].
-  static const DOCUMENT_START = const _State("DOCUMENT_START");
+  static const DOCUMENT_START = _State("DOCUMENT_START");
 
   /// Expect the content of a document.
-  static const DOCUMENT_CONTENT = const _State("DOCUMENT_CONTENT");
+  static const DOCUMENT_CONTENT = _State("DOCUMENT_CONTENT");
 
   /// Expect [TokenType.DOCUMENT_END].
-  static const DOCUMENT_END = const _State("DOCUMENT_END");
+  static const DOCUMENT_END = _State("DOCUMENT_END");
 
   /// Expect a block node.
-  static const BLOCK_NODE = const _State("BLOCK_NODE");
+  static const BLOCK_NODE = _State("BLOCK_NODE");
 
   /// Expect a block node or indentless sequence.
   static const BLOCK_NODE_OR_INDENTLESS_SEQUENCE =
-      const _State("BLOCK_NODE_OR_INDENTLESS_SEQUENCE");
+      _State("BLOCK_NODE_OR_INDENTLESS_SEQUENCE");
 
   /// Expect a flow node.
-  static const FLOW_NODE = const _State("FLOW_NODE");
+  static const FLOW_NODE = _State("FLOW_NODE");
 
   /// Expect the first entry of a block sequence.
   static const BLOCK_SEQUENCE_FIRST_ENTRY =
-      const _State("BLOCK_SEQUENCE_FIRST_ENTRY");
+      _State("BLOCK_SEQUENCE_FIRST_ENTRY");
 
   /// Expect an entry of a block sequence.
-  static const BLOCK_SEQUENCE_ENTRY = const _State("BLOCK_SEQUENCE_ENTRY");
+  static const BLOCK_SEQUENCE_ENTRY = _State("BLOCK_SEQUENCE_ENTRY");
 
   /// Expect an entry of an indentless sequence.
-  static const INDENTLESS_SEQUENCE_ENTRY =
-      const _State("INDENTLESS_SEQUENCE_ENTRY");
+  static const INDENTLESS_SEQUENCE_ENTRY = _State("INDENTLESS_SEQUENCE_ENTRY");
 
   /// Expect the first key of a block mapping.
-  static const BLOCK_MAPPING_FIRST_KEY =
-      const _State("BLOCK_MAPPING_FIRST_KEY");
+  static const BLOCK_MAPPING_FIRST_KEY = _State("BLOCK_MAPPING_FIRST_KEY");
 
   /// Expect a block mapping key.
-  static const BLOCK_MAPPING_KEY = const _State("BLOCK_MAPPING_KEY");
+  static const BLOCK_MAPPING_KEY = _State("BLOCK_MAPPING_KEY");
 
   /// Expect a block mapping value.
-  static const BLOCK_MAPPING_VALUE = const _State("BLOCK_MAPPING_VALUE");
+  static const BLOCK_MAPPING_VALUE = _State("BLOCK_MAPPING_VALUE");
 
   /// Expect the first entry of a flow sequence.
-  static const FLOW_SEQUENCE_FIRST_ENTRY =
-      const _State("FLOW_SEQUENCE_FIRST_ENTRY");
+  static const FLOW_SEQUENCE_FIRST_ENTRY = _State("FLOW_SEQUENCE_FIRST_ENTRY");
 
   /// Expect an entry of a flow sequence.
-  static const FLOW_SEQUENCE_ENTRY = const _State("FLOW_SEQUENCE_ENTRY");
+  static const FLOW_SEQUENCE_ENTRY = _State("FLOW_SEQUENCE_ENTRY");
 
   /// Expect a key of an ordered mapping.
   static const FLOW_SEQUENCE_ENTRY_MAPPING_KEY =
-      const _State("FLOW_SEQUENCE_ENTRY_MAPPING_KEY");
+      _State("FLOW_SEQUENCE_ENTRY_MAPPING_KEY");
 
   /// Expect a value of an ordered mapping.
   static const FLOW_SEQUENCE_ENTRY_MAPPING_VALUE =
-      const _State("FLOW_SEQUENCE_ENTRY_MAPPING_VALUE");
+      _State("FLOW_SEQUENCE_ENTRY_MAPPING_VALUE");
 
   /// Expect the and of an ordered mapping entry.
   static const FLOW_SEQUENCE_ENTRY_MAPPING_END =
-      const _State("FLOW_SEQUENCE_ENTRY_MAPPING_END");
+      _State("FLOW_SEQUENCE_ENTRY_MAPPING_END");
 
   /// Expect the first key of a flow mapping.
-  static const FLOW_MAPPING_FIRST_KEY = const _State("FLOW_MAPPING_FIRST_KEY");
+  static const FLOW_MAPPING_FIRST_KEY = _State("FLOW_MAPPING_FIRST_KEY");
 
   /// Expect a key of a flow mapping.
-  static const FLOW_MAPPING_KEY = const _State("FLOW_MAPPING_KEY");
+  static const FLOW_MAPPING_KEY = _State("FLOW_MAPPING_KEY");
 
   /// Expect a value of a flow mapping.
-  static const FLOW_MAPPING_VALUE = const _State("FLOW_MAPPING_VALUE");
+  static const FLOW_MAPPING_VALUE = _State("FLOW_MAPPING_VALUE");
 
   /// Expect an empty value of a flow mapping.
-  static const FLOW_MAPPING_EMPTY_VALUE =
-      const _State("FLOW_MAPPING_EMPTY_VALUE");
+  static const FLOW_MAPPING_EMPTY_VALUE = _State("FLOW_MAPPING_EMPTY_VALUE");
 
   /// Expect nothing.
-  static const END = const _State("END");
+  static const END = _State("END");
 
   final String name;
 
diff --git a/lib/src/scanner.dart b/lib/src/scanner.dart
index 91556af..637c8dd 100644
--- a/lib/src/scanner.dart
+++ b/lib/src/scanner.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:collection/collection.dart';
-import 'package:string_scanner/string_scanner.dart';
 import 'package:source_span/source_span.dart';
+import 'package:string_scanner/string_scanner.dart';
 
 import 'style.dart';
 import 'token.dart';
@@ -108,7 +108,7 @@
   /// These are queued up in advance so that [TokenType.KEY] tokens can be
   /// inserted once the scanner determines that a series of tokens represents a
   /// mapping key.
-  final _tokens = new QueueList<Token>();
+  final _tokens = QueueList<Token>();
 
   /// The number of tokens that have been emitted.
   ///
@@ -291,11 +291,11 @@
   ///
   /// [sourceUrl] can be a String or a [Uri].
   Scanner(String source, {sourceUrl})
-      : _scanner = new SpanScanner.eager(source, sourceUrl: sourceUrl);
+      : _scanner = SpanScanner.eager(source, sourceUrl: sourceUrl);
 
   /// Consumes and returns the next token.
   Token scan() {
-    if (_streamEndProduced) throw new StateError("Out of tokens.");
+    if (_streamEndProduced) throw StateError("Out of tokens.");
     if (!_tokenAvailable) _fetchMoreTokens();
 
     var token = _tokens.removeFirst();
@@ -488,7 +488,7 @@
       if (key.line == _scanner.line) continue;
 
       if (key.required) {
-        throw new YamlException("Expected ':'.", _scanner.emptySpan);
+        throw YamlException("Expected ':'.", _scanner.emptySpan);
       }
 
       _simpleKeys[i] = null;
@@ -511,7 +511,7 @@
 
     // If the current position may start a simple key, save it.
     _removeSimpleKey();
-    _simpleKeys[_simpleKeys.length - 1] = new _SimpleKey(
+    _simpleKeys[_simpleKeys.length - 1] = _SimpleKey(
         _tokensParsed + _tokens.length,
         _scanner.line,
         _scanner.column,
@@ -523,7 +523,7 @@
   void _removeSimpleKey() {
     var key = _simpleKeys.last;
     if (key != null && key.required) {
-      throw new YamlException("Could not find expected ':' for simple key.",
+      throw YamlException("Could not find expected ':' for simple key.",
           key.location.pointSpan());
     }
 
@@ -557,7 +557,7 @@
     _indents.add(column);
 
     // Create a token and insert it into the queue.
-    var token = new Token(type, location.pointSpan());
+    var token = Token(type, location.pointSpan() as FileSpan);
     if (tokenNumber == null) {
       _tokens.add(token);
     } else {
@@ -573,7 +573,7 @@
     if (!_inBlockContext) return;
 
     while (_indent > column) {
-      _tokens.add(new Token(TokenType.BLOCK_END, _scanner.emptySpan));
+      _tokens.add(Token(TokenType.BLOCK_END, _scanner.emptySpan));
       _indents.removeLast();
     }
   }
@@ -589,7 +589,7 @@
     // Much of libyaml's initialization logic here is done in variable
     // initializers instead.
     _streamStartProduced = true;
-    _tokens.add(new Token(TokenType.STREAM_START, _scanner.emptySpan));
+    _tokens.add(Token(TokenType.STREAM_START, _scanner.emptySpan));
   }
 
   /// Produces a [TokenType.STREAM_END] token.
@@ -597,7 +597,7 @@
     _resetIndent();
     _removeSimpleKey();
     _simpleKeyAllowed = false;
-    _tokens.add(new Token(TokenType.STREAM_END, _scanner.emptySpan));
+    _tokens.add(Token(TokenType.STREAM_END, _scanner.emptySpan));
   }
 
   /// Produces a [TokenType.VERSION_DIRECTIVE] or [TokenType.TAG_DIRECTIVE]
@@ -622,7 +622,7 @@
     _scanner.readChar();
     _scanner.readChar();
 
-    _tokens.add(new Token(type, _scanner.spanFrom(start)));
+    _tokens.add(Token(type, _scanner.spanFrom(start)));
   }
 
   /// Produces a [TokenType.FLOW_SEQUENCE_START] or
@@ -654,7 +654,7 @@
   void _fetchBlockEntry() {
     if (_inBlockContext) {
       if (!_simpleKeyAllowed) {
-        throw new YamlException(
+        throw YamlException(
             "Block sequence entries are not allowed here.", _scanner.emptySpan);
       }
 
@@ -675,7 +675,7 @@
   void _fetchKey() {
     if (_inBlockContext) {
       if (!_simpleKeyAllowed) {
-        throw new YamlException(
+        throw YamlException(
             "Mapping keys are not allowed here.", _scanner.emptySpan);
       }
 
@@ -695,7 +695,7 @@
       // Add a [TokenType.KEY] directive before the first token of the simple
       // key so the parser knows that it's part of a key/value pair.
       _tokens.insert(simpleKey.tokenNumber - _tokensParsed,
-          new Token(TokenType.KEY, simpleKey.location.pointSpan()));
+          Token(TokenType.KEY, simpleKey.location.pointSpan() as FileSpan));
 
       // In the block context, we may need to add the
       // [TokenType.BLOCK_MAPPING_START] token.
@@ -710,7 +710,7 @@
       _simpleKeyAllowed = false;
     } else if (_inBlockContext) {
       if (!_simpleKeyAllowed) {
-        throw new YamlException(
+        throw YamlException(
             "Mapping values are not allowed here. Did you miss a colon "
             "earlier?",
             _scanner.emptySpan);
@@ -737,11 +737,11 @@
   void _addCharToken(TokenType type) {
     var start = _scanner.state;
     _scanner.readChar();
-    _tokens.add(new Token(type, _scanner.spanFrom(start)));
+    _tokens.add(Token(type, _scanner.spanFrom(start)));
   }
 
   /// Produces a [TokenType.ALIAS] or [TokenType.ANCHOR] token.
-  void _fetchAnchor({bool anchor: true}) {
+  void _fetchAnchor({bool anchor = true}) {
     _saveSimpleKey();
     _simpleKeyAllowed = false;
     _tokens.add(_scanAnchor(anchor: anchor));
@@ -756,7 +756,7 @@
 
   /// Produces a [TokenType.SCALAR] token with style [ScalarStyle.LITERAL] or
   /// [ScalarStyle.FOLDED].
-  void _fetchBlockScalar({bool literal: false}) {
+  void _fetchBlockScalar({bool literal = false}) {
     _removeSimpleKey();
     _simpleKeyAllowed = true;
     _tokens.add(_scanBlockScalar(literal: literal));
@@ -764,7 +764,7 @@
 
   /// Produces a [TokenType.SCALAR] token with style [ScalarStyle.SINGLE_QUOTED]
   /// or [ScalarStyle.DOUBLE_QUOTED].
-  void _fetchFlowScalar({bool singleQuote: false}) {
+  void _fetchFlowScalar({bool singleQuote = false}) {
     _saveSimpleKey();
     _simpleKeyAllowed = false;
     _tokens.add(_scanFlowScalar(singleQuote: singleQuote));
@@ -828,7 +828,7 @@
     // Eat '%'.
     _scanner.readChar();
 
-    var token;
+    Token token;
     var name = _scanDirectiveName();
     if (name == "YAML") {
       token = _scanVersionDirectiveValue(start);
@@ -851,7 +851,7 @@
     _skipComment();
 
     if (!_isBreakOrEnd) {
-      throw new YamlException("Expected comment or line break after directive.",
+      throw YamlException("Expected comment or line break after directive.",
           _scanner.spanFrom(start));
     }
 
@@ -875,9 +875,9 @@
 
     var name = _scanner.substring(start);
     if (name.isEmpty) {
-      throw new YamlException("Expected directive name.", _scanner.emptySpan);
+      throw YamlException("Expected directive name.", _scanner.emptySpan);
     } else if (!_isBlankOrEnd) {
-      throw new YamlException(
+      throw YamlException(
           "Unexpected character in directive name.", _scanner.emptySpan);
     }
 
@@ -895,7 +895,7 @@
     _scanner.expect('.');
     var minor = _scanVersionDirectiveNumber();
 
-    return new VersionDirectiveToken(_scanner.spanFrom(start), major, minor);
+    return VersionDirectiveToken(_scanner.spanFrom(start), major, minor);
   }
 
   /// Scans the version number of a version directive.
@@ -912,7 +912,7 @@
 
     var number = _scanner.substring(start);
     if (number.isEmpty) {
-      throw new YamlException("Expected version number.", _scanner.emptySpan);
+      throw YamlException("Expected version number.", _scanner.emptySpan);
     }
 
     return int.parse(number);
@@ -927,21 +927,21 @@
 
     var handle = _scanTagHandle(directive: true);
     if (!_isBlank) {
-      throw new YamlException("Expected whitespace.", _scanner.emptySpan);
+      throw YamlException("Expected whitespace.", _scanner.emptySpan);
     }
 
     _skipBlanks();
 
     var prefix = _scanTagUri();
     if (!_isBlankOrEnd) {
-      throw new YamlException("Expected whitespace.", _scanner.emptySpan);
+      throw YamlException("Expected whitespace.", _scanner.emptySpan);
     }
 
-    return new TagDirectiveToken(_scanner.spanFrom(start), handle, prefix);
+    return TagDirectiveToken(_scanner.spanFrom(start), handle, prefix);
   }
 
   /// Scans a [TokenType.ANCHOR] token.
-  Token _scanAnchor({bool anchor: true}) {
+  Token _scanAnchor({bool anchor = true}) {
     var start = _scanner.state;
 
     // Eat the indicator character.
@@ -966,21 +966,21 @@
             next != PERCENT &&
             next != AT &&
             next != GRAVE_ACCENT)) {
-      throw new YamlException(
+      throw YamlException(
           "Expected alphanumeric character.", _scanner.emptySpan);
     }
 
     if (anchor) {
-      return new AnchorToken(_scanner.spanFrom(start), name);
+      return AnchorToken(_scanner.spanFrom(start), name);
     } else {
-      return new AliasToken(_scanner.spanFrom(start), name);
+      return AliasToken(_scanner.spanFrom(start), name);
     }
   }
 
   /// Scans a [TokenType.TAG] token.
   Token _scanTag() {
-    var handle;
-    var suffix;
+    String handle;
+    String suffix;
     var start = _scanner.state;
 
     // Check if the tag is in the canonical form.
@@ -1018,14 +1018,14 @@
     // libyaml insists on whitespace after a tag, but example 7.2 indicates
     // that it's not required: http://yaml.org/spec/1.2/spec.html#id2786720.
 
-    return new TagToken(_scanner.spanFrom(start), handle, suffix);
+    return TagToken(_scanner.spanFrom(start), handle, suffix);
   }
 
   /// Scans a tag handle.
-  String _scanTagHandle({bool directive: false}) {
+  String _scanTagHandle({bool directive = false}) {
     _scanner.expect('!');
 
-    var buffer = new StringBuffer('!');
+    var buffer = StringBuffer('!');
 
     // libyaml only allows word characters in tags, but the spec disagrees:
     // http://yaml.org/spec/1.2/spec.html#ns-tag-char.
@@ -1052,9 +1052,9 @@
   /// [head] is the initial portion of the tag that's already been scanned.
   /// [flowSeparators] indicates whether the tag URI can contain flow
   /// separators.
-  String _scanTagUri({String head, bool flowSeparators: true}) {
+  String _scanTagUri({String head, bool flowSeparators = true}) {
     var length = head == null ? 0 : head.length;
-    var buffer = new StringBuffer();
+    var buffer = StringBuffer();
 
     // Copy the head if needed.
     //
@@ -1083,7 +1083,7 @@
   }
 
   /// Scans a block scalar.
-  Token _scanBlockScalar({bool literal: false}) {
+  Token _scanBlockScalar({bool literal = false}) {
     var start = _scanner.state;
 
     // Eat the indicator '|' or '>'.
@@ -1101,8 +1101,7 @@
       if (_isDigit) {
         // Check that the indentation is greater than 0.
         if (_scanner.peekChar() == NUMBER_0) {
-          throw new YamlException(
-              "0 may not be used as an indentation indicator.",
+          throw YamlException("0 may not be used as an indentation indicator.",
               _scanner.spanFrom(start));
         }
 
@@ -1111,8 +1110,7 @@
     } else if (_isDigit) {
       // Do the same as above, but in the opposite order.
       if (_scanner.peekChar() == NUMBER_0) {
-        throw new YamlException(
-            "0 may not be used as an indentation indicator.",
+        throw YamlException("0 may not be used as an indentation indicator.",
             _scanner.spanFrom(start));
       }
 
@@ -1131,7 +1129,7 @@
 
     // Check if we're at the end of the line.
     if (!_isBreakOrEnd) {
-      throw new YamlException(
+      throw YamlException(
           "Expected comment or line break.", _scanner.emptySpan);
     }
 
@@ -1152,7 +1150,7 @@
     var trailingBreaks = pair.last;
 
     // Scan the block scalar contents.
-    var buffer = new StringBuffer();
+    var buffer = StringBuffer();
     var leadingBreak = '';
     var leadingBlank = false;
     var trailingBlank = false;
@@ -1208,7 +1206,7 @@
     if (chomping != _Chomping.STRIP) buffer.write(leadingBreak);
     if (chomping == _Chomping.KEEP) buffer.write(trailingBreaks);
 
-    return new ScalarToken(_scanner.spanFrom(start, end), buffer.toString(),
+    return ScalarToken(_scanner.spanFrom(start, end), buffer.toString(),
         literal ? ScalarStyle.LITERAL : ScalarStyle.FOLDED);
   }
 
@@ -1218,7 +1216,7 @@
   /// level and the text of the line breaks.
   Pair<int, String> _scanBlockScalarBreaks(int indent) {
     var maxIndent = 0;
-    var breaks = new StringBuffer();
+    var breaks = StringBuffer();
 
     while (true) {
       while ((indent == 0 || _scanner.column < indent) &&
@@ -1244,13 +1242,13 @@
       // be supported by the spec.
     }
 
-    return new Pair(indent, breaks.toString());
+    return Pair(indent, breaks.toString());
   }
 
   // Scans a quoted scalar.
-  Token _scanFlowScalar({bool singleQuote: false}) {
+  Token _scanFlowScalar({bool singleQuote = false}) {
     var start = _scanner.state;
-    var buffer = new StringBuffer();
+    var buffer = StringBuffer();
 
     // Eat the left quote.
     _scanner.readChar();
@@ -1263,7 +1261,7 @@
       }
 
       if (_scanner.isDone) {
-        throw new YamlException("Unexpected end of file.", _scanner.emptySpan);
+        throw YamlException("Unexpected end of file.", _scanner.emptySpan);
       }
 
       var leadingBlanks = false;
@@ -1289,7 +1287,7 @@
           var escapeStart = _scanner.state;
 
           // An escape sequence.
-          var codeLength = null;
+          int codeLength;
           switch (_scanner.peekChar(1)) {
             case NUMBER_0:
               buffer.writeCharCode(NULL);
@@ -1350,7 +1348,7 @@
               codeLength = 8;
               break;
             default:
-              throw new YamlException(
+              throw YamlException(
                   "Unknown escape character.", _scanner.spanFrom(escapeStart));
           }
 
@@ -1362,7 +1360,7 @@
             for (var i = 0; i < codeLength; i++) {
               if (!_isHex) {
                 _scanner.readChar();
-                throw new YamlException(
+                throw YamlException(
                     "Expected $codeLength-digit hexidecimal number.",
                     _scanner.spanFrom(escapeStart));
               }
@@ -1372,7 +1370,7 @@
 
             // Check the value and write the character.
             if ((value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF) {
-              throw new YamlException("Invalid Unicode character escape code.",
+              throw YamlException("Invalid Unicode character escape code.",
                   _scanner.spanFrom(escapeStart));
             }
 
@@ -1388,9 +1386,9 @@
         break;
       }
 
-      var whitespace = new StringBuffer();
+      var whitespace = StringBuffer();
       var leadingBreak = '';
-      var trailingBreaks = new StringBuffer();
+      var trailingBreaks = StringBuffer();
       while (_isBlank || _isBreak) {
         if (_isBlank) {
           // Consume a space or a tab.
@@ -1427,7 +1425,7 @@
     // Eat the right quote.
     _scanner.readChar();
 
-    return new ScalarToken(_scanner.spanFrom(start), buffer.toString(),
+    return ScalarToken(_scanner.spanFrom(start), buffer.toString(),
         singleQuote ? ScalarStyle.SINGLE_QUOTED : ScalarStyle.DOUBLE_QUOTED);
   }
 
@@ -1435,10 +1433,10 @@
   Token _scanPlainScalar() {
     var start = _scanner.state;
     var end = _scanner.state;
-    var buffer = new StringBuffer();
+    var buffer = StringBuffer();
     var leadingBreak = '';
     var trailingBreaks = '';
-    var whitespace = new StringBuffer();
+    var whitespace = StringBuffer();
     var indent = _indent + 1;
 
     while (true) {
@@ -1508,7 +1506,7 @@
     // Allow a simple key after a plain scalar with leading blanks.
     if (leadingBreak.isNotEmpty) _simpleKeyAllowed = true;
 
-    return new ScalarToken(
+    return ScalarToken(
         _scanner.spanFrom(start, end), buffer.toString(), ScalarStyle.PLAIN);
   }
 
@@ -1527,7 +1525,7 @@
     // libyaml supports NEL, PS, and LS characters as line separators, but this
     // is explicitly forbidden in section 5.4 of the YAML spec.
     if (char != CR && char != LF) {
-      throw new YamlException("Expected newline.", _scanner.emptySpan);
+      throw YamlException("Expected newline.", _scanner.emptySpan);
     }
 
     _scanner.readChar();
@@ -1670,13 +1668,13 @@
 /// See http://yaml.org/spec/1.2/spec.html#id2794534.
 class _Chomping {
   /// All trailing whitespace is discarded.
-  static const STRIP = const _Chomping("STRIP");
+  static const STRIP = _Chomping("STRIP");
 
   /// A single trailing newline is retained.
-  static const CLIP = const _Chomping("CLIP");
+  static const CLIP = _Chomping("CLIP");
 
   /// All trailing whitespace is preserved.
-  static const KEEP = const _Chomping("KEEP");
+  static const KEEP = _Chomping("KEEP");
 
   final String name;
 
diff --git a/lib/src/style.dart b/lib/src/style.dart
index 30082cf..e945da8 100644
--- a/lib/src/style.dart
+++ b/lib/src/style.dart
@@ -7,32 +7,32 @@
   /// No source style was specified.
   ///
   /// This usually indicates a scalar constructed with [YamlScalar.wrap].
-  static const ANY = const ScalarStyle._("ANY");
+  static const ANY = ScalarStyle._("ANY");
 
   /// The plain scalar style, unquoted and without a prefix.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#style/flow/plain.
-  static const PLAIN = const ScalarStyle._("PLAIN");
+  static const PLAIN = ScalarStyle._("PLAIN");
 
   /// The literal scalar style, with a `|` prefix.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#id2795688.
-  static const LITERAL = const ScalarStyle._("LITERAL");
+  static const LITERAL = ScalarStyle._("LITERAL");
 
   /// The folded scalar style, with a `>` prefix.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#id2796251.
-  static const FOLDED = const ScalarStyle._("FOLDED");
+  static const FOLDED = ScalarStyle._("FOLDED");
 
   /// The single-quoted scalar style.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#style/flow/single-quoted.
-  static const SINGLE_QUOTED = const ScalarStyle._("SINGLE_QUOTED");
+  static const SINGLE_QUOTED = ScalarStyle._("SINGLE_QUOTED");
 
   /// The double-quoted scalar style.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#style/flow/double-quoted.
-  static const DOUBLE_QUOTED = const ScalarStyle._("DOUBLE_QUOTED");
+  static const DOUBLE_QUOTED = ScalarStyle._("DOUBLE_QUOTED");
 
   final String name;
 
@@ -50,17 +50,17 @@
   ///
   /// This usually indicates a collection constructed with [YamlList.wrap] or
   /// [YamlMap.wrap].
-  static const ANY = const CollectionStyle._("ANY");
+  static const ANY = CollectionStyle._("ANY");
 
   /// The indentation-based block style.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#id2797293.
-  static const BLOCK = const CollectionStyle._("BLOCK");
+  static const BLOCK = CollectionStyle._("BLOCK");
 
   /// The delimiter-based block style.
   ///
   /// See http://yaml.org/spec/1.2/spec.html#id2790088.
-  static const FLOW = const CollectionStyle._("FLOW");
+  static const FLOW = CollectionStyle._("FLOW");
 
   final String name;
 
diff --git a/lib/src/token.dart b/lib/src/token.dart
index 5f91ce9..62c7c58 100644
--- a/lib/src/token.dart
+++ b/lib/src/token.dart
@@ -111,32 +111,32 @@
 
 /// An enum of types of [Token] object.
 class TokenType {
-  static const STREAM_START = const TokenType._("STREAM_START");
-  static const STREAM_END = const TokenType._("STREAM_END");
+  static const STREAM_START = TokenType._("STREAM_START");
+  static const STREAM_END = TokenType._("STREAM_END");
 
-  static const VERSION_DIRECTIVE = const TokenType._("VERSION_DIRECTIVE");
-  static const TAG_DIRECTIVE = const TokenType._("TAG_DIRECTIVE");
-  static const DOCUMENT_START = const TokenType._("DOCUMENT_START");
-  static const DOCUMENT_END = const TokenType._("DOCUMENT_END");
+  static const VERSION_DIRECTIVE = TokenType._("VERSION_DIRECTIVE");
+  static const TAG_DIRECTIVE = TokenType._("TAG_DIRECTIVE");
+  static const DOCUMENT_START = TokenType._("DOCUMENT_START");
+  static const DOCUMENT_END = TokenType._("DOCUMENT_END");
 
-  static const BLOCK_SEQUENCE_START = const TokenType._("BLOCK_SEQUENCE_START");
-  static const BLOCK_MAPPING_START = const TokenType._("BLOCK_MAPPING_START");
-  static const BLOCK_END = const TokenType._("BLOCK_END");
+  static const BLOCK_SEQUENCE_START = TokenType._("BLOCK_SEQUENCE_START");
+  static const BLOCK_MAPPING_START = TokenType._("BLOCK_MAPPING_START");
+  static const BLOCK_END = TokenType._("BLOCK_END");
 
-  static const FLOW_SEQUENCE_START = const TokenType._("FLOW_SEQUENCE_START");
-  static const FLOW_SEQUENCE_END = const TokenType._("FLOW_SEQUENCE_END");
-  static const FLOW_MAPPING_START = const TokenType._("FLOW_MAPPING_START");
-  static const FLOW_MAPPING_END = const TokenType._("FLOW_MAPPING_END");
+  static const FLOW_SEQUENCE_START = TokenType._("FLOW_SEQUENCE_START");
+  static const FLOW_SEQUENCE_END = TokenType._("FLOW_SEQUENCE_END");
+  static const FLOW_MAPPING_START = TokenType._("FLOW_MAPPING_START");
+  static const FLOW_MAPPING_END = TokenType._("FLOW_MAPPING_END");
 
-  static const BLOCK_ENTRY = const TokenType._("BLOCK_ENTRY");
-  static const FLOW_ENTRY = const TokenType._("FLOW_ENTRY");
-  static const KEY = const TokenType._("KEY");
-  static const VALUE = const TokenType._("VALUE");
+  static const BLOCK_ENTRY = TokenType._("BLOCK_ENTRY");
+  static const FLOW_ENTRY = TokenType._("FLOW_ENTRY");
+  static const KEY = TokenType._("KEY");
+  static const VALUE = TokenType._("VALUE");
 
-  static const ALIAS = const TokenType._("ALIAS");
-  static const ANCHOR = const TokenType._("ANCHOR");
-  static const TAG = const TokenType._("TAG");
-  static const SCALAR = const TokenType._("SCALAR");
+  static const ALIAS = TokenType._("ALIAS");
+  static const ANCHOR = TokenType._("ANCHOR");
+  static const TAG = TokenType._("TAG");
+  static const SCALAR = TokenType._("SCALAR");
 
   final String name;
 
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 36e4e93..93954aa 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -25,7 +25,7 @@
 /// [message] is the text of the warning. If [span] is passed, it's the portion
 /// of the document that the warning is associated with and should be included
 /// in the printed warning.
-typedef YamlWarningCallback(String message, [SourceSpan span]);
+typedef YamlWarningCallback = Function(String message, [SourceSpan span]);
 
 /// A callback for emitting a warning.
 ///
diff --git a/lib/src/yaml_document.dart b/lib/src/yaml_document.dart
index b373223..07806e9 100644
--- a/lib/src/yaml_document.dart
+++ b/lib/src/yaml_document.dart
@@ -32,8 +32,8 @@
   /// Users of the library should not use this constructor.
   YamlDocument.internal(this.contents, this.span, this.versionDirective,
       List<TagDirective> tagDirectives,
-      {this.startImplicit: false, this.endImplicit: false})
-      : tagDirectives = new UnmodifiableListView(tagDirectives);
+      {this.startImplicit = false, this.endImplicit = false})
+      : tagDirectives = UnmodifiableListView(tagDirectives);
 
   String toString() => contents.toString();
 }
diff --git a/lib/src/yaml_node.dart b/lib/src/yaml_node.dart
index 7190c81..3b0a983 100644
--- a/lib/src/yaml_node.dart
+++ b/lib/src/yaml_node.dart
@@ -64,7 +64,7 @@
   /// is passed, it's used as the [SourceSpan.sourceUrl].
   ///
   /// [sourceUrl] may be either a [String], a [Uri], or `null`.
-  factory YamlMap({sourceUrl}) => new YamlMapWrapper(const {}, sourceUrl);
+  factory YamlMap({sourceUrl}) => YamlMapWrapper(const {}, sourceUrl);
 
   /// Wraps a Dart map so that it can be accessed (recursively) like a
   /// [YamlMap].
@@ -76,11 +76,11 @@
   ///
   /// [sourceUrl] may be either a [String], a [Uri], or `null`.
   factory YamlMap.wrap(Map dartMap, {sourceUrl}) =>
-      new YamlMapWrapper(dartMap, sourceUrl);
+      YamlMapWrapper(dartMap, sourceUrl);
 
   /// Users of the library should not use this constructor.
   YamlMap.internal(Map<dynamic, YamlNode> nodes, SourceSpan span, this.style)
-      : nodes = new UnmodifiableMapView<dynamic, YamlNode>(nodes) {
+      : nodes = UnmodifiableMapView<dynamic, YamlNode>(nodes) {
     _span = span;
   }
 
@@ -103,7 +103,7 @@
   int get length => nodes.length;
 
   set length(int index) {
-    throw new UnsupportedError("Cannot modify an unmodifiable List");
+    throw UnsupportedError("Cannot modify an unmodifiable List");
   }
 
   /// Creates an empty YamlList.
@@ -113,7 +113,7 @@
   /// [sourceUrl] is passed, it's used as the [SourceSpan.sourceUrl].
   ///
   /// [sourceUrl] may be either a [String], a [Uri], or `null`.
-  factory YamlList({sourceUrl}) => new YamlListWrapper(const [], sourceUrl);
+  factory YamlList({sourceUrl}) => YamlListWrapper(const [], sourceUrl);
 
   /// Wraps a Dart list so that it can be accessed (recursively) like a
   /// [YamlList].
@@ -125,18 +125,18 @@
   ///
   /// [sourceUrl] may be either a [String], a [Uri], or `null`.
   factory YamlList.wrap(List dartList, {sourceUrl}) =>
-      new YamlListWrapper(dartList, sourceUrl);
+      YamlListWrapper(dartList, sourceUrl);
 
   /// Users of the library should not use this constructor.
   YamlList.internal(List<YamlNode> nodes, SourceSpan span, this.style)
-      : nodes = new UnmodifiableListView<YamlNode>(nodes) {
+      : nodes = UnmodifiableListView<YamlNode>(nodes) {
     _span = span;
   }
 
   operator [](int index) => nodes[index].value;
 
   operator []=(int index, value) {
-    throw new UnsupportedError("Cannot modify an unmodifiable List");
+    throw UnsupportedError("Cannot modify an unmodifiable List");
   }
 }
 
@@ -155,7 +155,7 @@
   ///
   /// [sourceUrl] may be either a [String], a [Uri], or `null`.
   YamlScalar.wrap(this.value, {sourceUrl}) : style = ScalarStyle.ANY {
-    _span = new NullSpan(sourceUrl);
+    _span = NullSpan(sourceUrl);
   }
 
   /// Users of the library should not use this constructor.
diff --git a/lib/src/yaml_node_wrapper.dart b/lib/src/yaml_node_wrapper.dart
index bcb0faa..fc987af 100644
--- a/lib/src/yaml_node_wrapper.dart
+++ b/lib/src/yaml_node_wrapper.dart
@@ -27,18 +27,17 @@
 
   Iterable get keys => _dartMap.keys;
 
-  YamlMapWrapper(Map dartMap, sourceUrl)
-      : this._(dartMap, new NullSpan(sourceUrl));
+  YamlMapWrapper(Map dartMap, sourceUrl) : this._(dartMap, NullSpan(sourceUrl));
 
   YamlMapWrapper._(Map dartMap, SourceSpan span)
       : _dartMap = dartMap,
         span = span,
-        nodes = new _YamlMapNodes(dartMap, span);
+        nodes = _YamlMapNodes(dartMap, span);
 
   operator [](Object key) {
     var value = _dartMap[key];
-    if (value is Map) return new YamlMapWrapper._(value, span);
-    if (value is List) return new YamlListWrapper._(value, span);
+    if (value is Map) return YamlMapWrapper._(value, span);
+    if (value is List) return YamlListWrapper._(value, span);
     return value;
   }
 
@@ -57,7 +56,7 @@
   final SourceSpan _span;
 
   Iterable get keys =>
-      _dartMap.keys.map((key) => new YamlScalar.internalWithSpan(key, _span));
+      _dartMap.keys.map((key) => YamlScalar.internalWithSpan(key, _span));
 
   _YamlMapNodes(this._dartMap, this._span);
 
@@ -90,26 +89,26 @@
   int get length => _dartList.length;
 
   set length(int index) {
-    throw new UnsupportedError("Cannot modify an unmodifiable List.");
+    throw UnsupportedError("Cannot modify an unmodifiable List.");
   }
 
   YamlListWrapper(List dartList, sourceUrl)
-      : this._(dartList, new NullSpan(sourceUrl));
+      : this._(dartList, NullSpan(sourceUrl));
 
   YamlListWrapper._(List dartList, SourceSpan span)
       : _dartList = dartList,
         span = span,
-        nodes = new _YamlListNodes(dartList, span);
+        nodes = _YamlListNodes(dartList, span);
 
   operator [](int index) {
     var value = _dartList[index];
-    if (value is Map) return new YamlMapWrapper._(value, span);
-    if (value is List) return new YamlListWrapper._(value, span);
+    if (value is Map) return YamlMapWrapper._(value, span);
+    if (value is List) return YamlListWrapper._(value, span);
     return value;
   }
 
   operator []=(int index, value) {
-    throw new UnsupportedError("Cannot modify an unmodifiable List.");
+    throw UnsupportedError("Cannot modify an unmodifiable List.");
   }
 
   int get hashCode => _dartList.hashCode;
@@ -129,7 +128,7 @@
   int get length => _dartList.length;
 
   set length(int index) {
-    throw new UnsupportedError("Cannot modify an unmodifiable List.");
+    throw UnsupportedError("Cannot modify an unmodifiable List.");
   }
 
   _YamlListNodes(this._dartList, this._span);
@@ -137,7 +136,7 @@
   YamlNode operator [](int index) => _nodeForValue(_dartList[index], _span);
 
   operator []=(int index, value) {
-    throw new UnsupportedError("Cannot modify an unmodifiable List.");
+    throw UnsupportedError("Cannot modify an unmodifiable List.");
   }
 
   int get hashCode => _dartList.hashCode;
@@ -147,7 +146,7 @@
 }
 
 YamlNode _nodeForValue(value, SourceSpan span) {
-  if (value is Map) return new YamlMapWrapper._(value, span);
-  if (value is List) return new YamlListWrapper._(value, span);
-  return new YamlScalar.internalWithSpan(value, span);
+  if (value is Map) return YamlMapWrapper._(value, span);
+  if (value is List) return YamlListWrapper._(value, span);
+  return YamlScalar.internalWithSpan(value, span);
 }
diff --git a/lib/yaml.dart b/lib/yaml.dart
index 13d6dc2..e2435ad 100644
--- a/lib/yaml.dart
+++ b/lib/yaml.dart
@@ -47,18 +47,16 @@
 /// normal Dart value this returns a [YamlDocument] instead. This allows the
 /// caller to access document metadata.
 YamlDocument loadYamlDocument(String yaml, {sourceUrl}) {
-  var loader = new Loader(yaml, sourceUrl: sourceUrl);
+  var loader = Loader(yaml, sourceUrl: sourceUrl);
   var document = loader.load();
   if (document == null) {
-    return new YamlDocument.internal(
-        new YamlScalar.internalWithSpan(null, loader.span),
-        loader.span,
-        null, const []);
+    return YamlDocument.internal(YamlScalar.internalWithSpan(null, loader.span),
+        loader.span, null, const []);
   }
 
   var nextDocument = loader.load();
   if (nextDocument != null) {
-    throw new YamlException("Only expected one document.", nextDocument.span);
+    throw YamlException("Only expected one document.", nextDocument.span);
   }
 
   return document;
@@ -78,7 +76,7 @@
 /// If [sourceUrl] is passed, it's used as the URL from which the YAML
 /// originated for error reporting. It can be a [String], a [Uri], or `null`.
 YamlList loadYamlStream(String yaml, {sourceUrl}) {
-  var loader = new Loader(yaml, sourceUrl: sourceUrl);
+  var loader = Loader(yaml, sourceUrl: sourceUrl);
 
   var documents = <YamlDocument>[];
   var document = loader.load();
@@ -89,7 +87,7 @@
 
   // TODO(jmesserly): the type on the `document` parameter is a workaround for:
   // https://github.com/dart-lang/dev_compiler/issues/203
-  return new YamlList.internal(
+  return YamlList.internal(
       documents.map((YamlDocument document) => document.contents).toList(),
       loader.span,
       CollectionStyle.ANY);
@@ -100,7 +98,7 @@
 /// This is like [loadYamlStream], except that it returns [YamlDocument]s with
 /// metadata wrapping the document contents.
 List<YamlDocument> loadYamlDocuments(String yaml, {sourceUrl}) {
-  var loader = new Loader(yaml, sourceUrl: sourceUrl);
+  var loader = Loader(yaml, sourceUrl: sourceUrl);
 
   var documents = <YamlDocument>[];
   var document = loader.load();
diff --git a/pubspec.yaml b/pubspec.yaml
index e8782f9..e42ab42 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -15,5 +15,6 @@
   source_span: '>=1.0.0 <2.0.0'
 
 dev_dependencies:
+  pedantic: ^1.0.0
   path: '>=1.2.0 <2.0.0'
   test: '>=0.12.0 <2.0.0'
diff --git a/test/utils.dart b/test/utils.dart
index 39fe203..5ecbd14 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -7,7 +7,7 @@
 import 'package:yaml/yaml.dart';
 
 /// A matcher that validates that a closure or Future throws a [YamlException].
-final Matcher throwsYamlException = throwsA(new TypeMatcher<YamlException>());
+final Matcher throwsYamlException = throwsA(TypeMatcher<YamlException>());
 
 /// Returns a matcher that asserts that the value equals [expected].
 ///
diff --git a/test/yaml_node_wrapper_test.dart b/test/yaml_node_wrapper_test.dart
index d9b5010..f9b0272 100644
--- a/test/yaml_node_wrapper_test.dart
+++ b/test/yaml_node_wrapper_test.dart
@@ -8,31 +8,31 @@
 
 main() {
   test("YamlMap() with no sourceUrl", () {
-    var map = new YamlMap();
+    var map = YamlMap();
     expect(map, isEmpty);
     expect(map.nodes, isEmpty);
     expect(map.span, isNullSpan(isNull));
   });
 
   test("YamlMap() with a sourceUrl", () {
-    var map = new YamlMap(sourceUrl: "source");
+    var map = YamlMap(sourceUrl: "source");
     expect(map.span, isNullSpan(Uri.parse("source")));
   });
 
   test("YamlList() with no sourceUrl", () {
-    var list = new YamlList();
+    var list = YamlList();
     expect(list, isEmpty);
     expect(list.nodes, isEmpty);
     expect(list.span, isNullSpan(isNull));
   });
 
   test("YamlList() with a sourceUrl", () {
-    var list = new YamlList(sourceUrl: "source");
+    var list = YamlList(sourceUrl: "source");
     expect(list.span, isNullSpan(Uri.parse("source")));
   });
 
   test("YamlMap.wrap() with no sourceUrl", () {
-    var map = new YamlMap.wrap({
+    var map = YamlMap.wrap({
       "list": [1, 2, 3],
       "map": {
         "foo": "bar",
@@ -53,24 +53,24 @@
         }));
 
     expect(map.span, isNullSpan(isNull));
-    expect(map["list"], new TypeMatcher<YamlList>());
-    expect(map["list"].nodes[0], new TypeMatcher<YamlScalar>());
+    expect(map["list"], TypeMatcher<YamlList>());
+    expect(map["list"].nodes[0], TypeMatcher<YamlScalar>());
     expect(map["list"].span, isNullSpan(isNull));
-    expect(map["map"], new TypeMatcher<YamlMap>());
-    expect(map["map"].nodes["foo"], new TypeMatcher<YamlScalar>());
-    expect(map["map"]["nested"], new TypeMatcher<YamlList>());
+    expect(map["map"], TypeMatcher<YamlMap>());
+    expect(map["map"].nodes["foo"], TypeMatcher<YamlScalar>());
+    expect(map["map"]["nested"], TypeMatcher<YamlList>());
     expect(map["map"].span, isNullSpan(isNull));
-    expect(map.nodes["scalar"], new TypeMatcher<YamlScalar>());
+    expect(map.nodes["scalar"], TypeMatcher<YamlScalar>());
     expect(map.nodes["scalar"].value, "value");
     expect(map.nodes["scalar"].span, isNullSpan(isNull));
     expect(map["scalar"], "value");
     expect(map.keys, unorderedEquals(["list", "map", "scalar"]));
-    expect(map.nodes.keys, everyElement(new TypeMatcher<YamlScalar>()));
-    expect(map.nodes[new YamlScalar.wrap("list")], equals([1, 2, 3]));
+    expect(map.nodes.keys, everyElement(TypeMatcher<YamlScalar>()));
+    expect(map.nodes[YamlScalar.wrap("list")], equals([1, 2, 3]));
   });
 
   test("YamlMap.wrap() with a sourceUrl", () {
-    var map = new YamlMap.wrap({
+    var map = YamlMap.wrap({
       "list": [1, 2, 3],
       "map": {
         "foo": "bar",
@@ -87,7 +87,7 @@
   });
 
   test("YamlList.wrap() with no sourceUrl", () {
-    var list = new YamlList.wrap([
+    var list = YamlList.wrap([
       [1, 2, 3],
       {
         "foo": "bar",
@@ -108,21 +108,21 @@
         ]));
 
     expect(list.span, isNullSpan(isNull));
-    expect(list[0], new TypeMatcher<YamlList>());
-    expect(list[0].nodes[0], new TypeMatcher<YamlScalar>());
+    expect(list[0], TypeMatcher<YamlList>());
+    expect(list[0].nodes[0], TypeMatcher<YamlScalar>());
     expect(list[0].span, isNullSpan(isNull));
-    expect(list[1], new TypeMatcher<YamlMap>());
-    expect(list[1].nodes["foo"], new TypeMatcher<YamlScalar>());
-    expect(list[1]["nested"], new TypeMatcher<YamlList>());
+    expect(list[1], TypeMatcher<YamlMap>());
+    expect(list[1].nodes["foo"], TypeMatcher<YamlScalar>());
+    expect(list[1]["nested"], TypeMatcher<YamlList>());
     expect(list[1].span, isNullSpan(isNull));
-    expect(list.nodes[2], new TypeMatcher<YamlScalar>());
+    expect(list.nodes[2], TypeMatcher<YamlScalar>());
     expect(list.nodes[2].value, "value");
     expect(list.nodes[2].span, isNullSpan(isNull));
     expect(list[2], "value");
   });
 
   test("YamlList.wrap() with a sourceUrl", () {
-    var list = new YamlList.wrap([
+    var list = YamlList.wrap([
       [1, 2, 3],
       {
         "foo": "bar",
@@ -138,22 +138,22 @@
   });
 
   test("re-wrapped objects equal one another", () {
-    var list = new YamlList.wrap([
+    var list = YamlList.wrap([
       [1, 2, 3],
       {"foo": "bar"}
     ]);
 
     expect(list[0] == list[0], isTrue);
     expect(list[0].nodes == list[0].nodes, isTrue);
-    expect(list[0] == new YamlList.wrap([1, 2, 3]), isFalse);
+    expect(list[0] == YamlList.wrap([1, 2, 3]), isFalse);
     expect(list[1] == list[1], isTrue);
     expect(list[1].nodes == list[1].nodes, isTrue);
-    expect(list[1] == new YamlMap.wrap({"foo": "bar"}), isFalse);
+    expect(list[1] == YamlMap.wrap({"foo": "bar"}), isFalse);
   });
 }
 
 Matcher isNullSpan(sourceUrl) => predicate((span) {
-      expect(span, new TypeMatcher<SourceSpan>());
+      expect(span, TypeMatcher<SourceSpan>());
       expect(span.length, equals(0));
       expect(span.text, isEmpty);
       expect(span.start, equals(span.end));
diff --git a/test/yaml_test.dart b/test/yaml_test.dart
index 727ee8e..27b2025 100644
--- a/test/yaml_test.dart
+++ b/test/yaml_test.dart
@@ -476,19 +476,19 @@
   // Chapter 5: Characters
   group('5.1: Character Set', () {
     expectAllowsCharacter(int charCode) {
-      var char = new String.fromCharCodes([charCode]);
+      var char = String.fromCharCodes([charCode]);
       expectYamlLoads('The character "$char" is allowed',
           'The character "$char" is allowed');
     }
 
     expectAllowsQuotedCharacter(int charCode) {
-      var char = new String.fromCharCodes([charCode]);
+      var char = String.fromCharCodes([charCode]);
       expectYamlLoads("The character '$char' is allowed",
           '"The character \'$char\' is allowed"');
     }
 
     expectDisallowsCharacter(int charCode) {
-      var char = new String.fromCharCodes([charCode]);
+      var char = String.fromCharCodes([charCode]);
       expectYamlFails('The character "$char" is disallowed');
     }
 
@@ -635,10 +635,10 @@
     test('[Example 5.13]', () {
       expectYamlLoads(
           "Fun with \x5C "
-          "\x22 \x07 \x08 \x1B \x0C "
-          "\x0A \x0D \x09 \x0B \x00 "
-          "\x20 \xA0 \x85 \u2028 \u2029 "
-          "A A A",
+              "\x22 \x07 \x08 \x1B \x0C "
+              "\x0A \x0D \x09 \x0B \x00 "
+              "\x20 \xA0 \x85 \u2028 \u2029 "
+              "A A A",
           '''
         "Fun with \\\\
         \\" \\a \\b \\e \\f \\