formatError method

dynamic formatError(
  1. dynamic token,
  2. dynamic message
)

Implementation

formatError(token, message) {
  pad(n, length) {
    var s = (n).toString();
    return List.generate(length - s.length + 1, (index) => '').join(" ") + s;
  }

  var buffer = this.buffer;
  if (buffer is String) {
    var lines = buffer.split("\n").sublist(max(0, this.line - 5), this.line);

    var nextLineBreak = buffer.indexOf('\n', this.index);
    if (nextLineBreak == -1) nextLineBreak = buffer.length;
    var col = this.index - this.lastLineBreak;
    var lastLineDigits = (this.line).toString().length;
    message += " at line " +
        this.line.toString() +
        " col " +
        col.toString() +
        ":\n\n";
    var msg = [];
    for (var i = 0; i < lines.length; i++) {
      var line = lines[i];
      msg.add(
          pad(this.line - lines.length + i + 1, lastLineDigits) + " " + line);
    }
    message += msg.join("\n");
    message += "\n" + pad("", lastLineDigits + col) + "^\n";
    return message;
  } else {
    return message + " at index " + (this.index - 1);
  }
}