Use YamlExceptions directly + tidy up error reporting
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