ParseException constructor

ParseException(
  1. String message, [
  2. Token? token
])

Implementation

ParseException(String message, [this.token]) : message = '$message' {
  final loc = token?.loc;
  if (loc != null && loc.start <= loc.end) {
    final input = loc.lexer.input;

    final start = loc.start;
    this.position = start;
    final end = loc.end;
    if (start == input.length) {
      message = '$message at end of input: ';
    } else {
      message = '$message at position ${start + 1}: ';
    }

    final underlined = input
        .substring(start, end)
        .replaceAllMapped(RegExp(r'[^]'), (match) => '${match[0]}\u0332');
    if (start > 15) {
      message = '$message…${input.substring(start - 15, start)}$underlined';
    } else {
      message = '$message${input.substring(0, start)}$underlined';
    }
    if (end + 15 < input.length) {
      message = '$message${input.substring(end, end + 15)}…';
    } else {
      message = '$message${input.substring(end)}';
    }
  }
}