public string Verbose() { var result = GetType().Name; if (_position != null) { var start = _position.Start; var end = _position.End; var line = end.Line; var symbol = Math.Min(start.Symbol, end.Symbol); var length = Math.Abs(end.Symbol - start.Symbol); result += $" at {line + 1}:{symbol + 1}:{length}:"; if (Source != null) { var prevLine = Source.FetchLine(line - 1, null); var errorPart = Source.Highlight(line, symbol, length); var nextLine = Source.FetchLine(line + 1, null); var codePart = "*----------------------------*\n"; if (prevLine != null) { codePart += prevLine + "\n"; } codePart += errorPart; if (nextLine != null) { codePart += "\n" + nextLine; } codePart += "\n*----------------------------*"; result += "\n\n" + codePart; } } return(result + "\n\n" + ToString()); }