import 'package:source_span/source_span.dart';

class SyntaxError implements Exception {
  final SyntaxErrorSeverity severity;
  final String? message;
  final FileSpan? span;
  String? _toolString;

  SyntaxError(this.severity, this.message, this.span);

  String? get toolString {
    if (_toolString != null) return _toolString;
    var type = severity == SyntaxErrorSeverity.warning ? 'warning' : 'error';
    return _toolString = '$type: ${span!.start.toolString}: $message';
  }
}

enum SyntaxErrorSeverity {
  warning,
  error,
  info,
  hint,
}