diff --git a/pkgs/yaml/lib/src/error_listener.dart b/pkgs/yaml/lib/src/error_listener.dart
index d156655..c302a4d 100644
--- a/pkgs/yaml/lib/src/error_listener.dart
+++ b/pkgs/yaml/lib/src/error_listener.dart
@@ -1,33 +1,15 @@
-import 'package:source_span/source_span.dart';
-
 import 'yaml_exception.dart';
 
 /// A listener that is notified of [YamlError]s during scanning/parsing.
 abstract class ErrorListener {
   /// This method is invoked when an [error] has been found in the YAML.
-  void onError(YamlError error);
-}
-
-/// An error found in the YAML.
-class YamlError {
-  /// A message describing the exception.
-  final String message;
-
-  /// The span associated with this exception.
-  final FileSpan span;
-
-  YamlError(this.message, this.span);
-}
-
-extension YamlErrorExtensions on YamlError {
-  /// Creates a [YamlException] from a [YamlError].
-  YamlException toException() => YamlException(message, span);
+  void onError(YamlException error);
 }
 
 /// An [ErrorListener] that collects all errors into [errors].
 class ErrorCollector extends ErrorListener {
-  final List<YamlError> errors = [];
+  final List<YamlException> errors = [];
 
   @override
-  void onError(YamlError error) => errors.add(error);
+  void onError(YamlException error) => errors.add(error);
 }
diff --git a/pkgs/yaml/lib/src/scanner.dart b/pkgs/yaml/lib/src/scanner.dart
index 260da1c..e6e2062 100644
--- a/pkgs/yaml/lib/src/scanner.dart
+++ b/pkgs/yaml/lib/src/scanner.dart
@@ -496,13 +496,9 @@
       if (key.line == _scanner.line) continue;
 
       if (key.required) {
-        final error = _reportError("Expected ':'.", _scanner.emptySpan);
-        if (_recover) {
-          _tokens.insert(key.tokenNumber - _tokensParsed,
-              Token(TokenType.key, key.location.pointSpan() as FileSpan));
-        } else {
-          throw error.toException();
-        }
+        _reportError(YamlException("Expected ':'.", _scanner.emptySpan));
+        _tokens.insert(key.tokenNumber - _tokensParsed,
+            Token(TokenType.key, key.location.pointSpan() as FileSpan));
       }
 
       _simpleKeys[i] = null;
@@ -1641,11 +1637,13 @@
     }
   }
 
-  /// Reports an error to [_errorListener] and returns the [YamlError].
-  YamlError _reportError(String message, FileSpan span) {
-    final error = YamlError("Expected ':'.", _scanner.emptySpan);
-    _errorListener?.onError(error);
-    return error;
+  /// Reports a [YamlException] to [_errorListener] and if [_recover] is false,
+  /// throw the exception.
+  void _reportError(YamlException exception) {
+    _errorListener?.onError(exception);
+    if (!_recover) {
+      throw exception;
+    }
   }
 }
 
diff --git a/pkgs/yaml/test/utils.dart b/pkgs/yaml/test/utils.dart
index 0904458..f90ac5b 100644
--- a/pkgs/yaml/test/utils.dart
+++ b/pkgs/yaml/test/utils.dart
@@ -4,7 +4,6 @@
 
 import 'package:test/test.dart';
 import 'package:yaml/src/equality.dart' as equality;
-import 'package:yaml/src/error_listener.dart' show YamlError;
 import 'package:yaml/yaml.dart';
 
 /// A matcher that validates that a closure or Future throws a [YamlException].
@@ -24,10 +23,11 @@
 }
 
 /// Asserts that an error has the given message and starts at the given line/col.
-void expectErrorAtLineCol(YamlError error, String message, int line, int col) {
+void expectErrorAtLineCol(
+    YamlException error, String message, int line, int col) {
   expect(error.message, equals(message));
-  expect(error.span.start.line, equals(line));
-  expect(error.span.start.column, equals(col));
+  expect(error.span!.start.line, equals(line));
+  expect(error.span!.start.column, equals(col));
 }
 
 /// Asserts that a string containing a single YAML document produces a given
