(errors)
| 1091 | this.tokens = tokens; |
| 1092 | } |
| 1093 | static formatErrors(errors) { |
| 1094 | if (!errors.length) return ""; |
| 1095 | var source = errors[0].source; |
| 1096 | var lines = source.split("\n"); |
| 1097 | var byLine = /* @__PURE__ */ new Map(); |
| 1098 | for (var e of errors) { |
| 1099 | var lineIdx = e.token?.line ? e.token.line - 1 : lines.length - 1; |
| 1100 | if (!byLine.has(lineIdx)) byLine.set(lineIdx, []); |
| 1101 | byLine.get(lineIdx).push(e); |
| 1102 | } |
| 1103 | var maxLine = Math.max(...byLine.keys()) + 1; |
| 1104 | var gutter = String(maxLine).length; |
| 1105 | var pad = " ".repeat(gutter + 5); |
| 1106 | var sortedLines = [...byLine.entries()].sort((a, b) => a[0] - b[0]); |
| 1107 | var prevLineIdx = -1; |
| 1108 | var out = ""; |
| 1109 | for (var [lineIdx, lineErrors] of sortedLines) { |
| 1110 | if (prevLineIdx !== -1 && lineIdx > prevLineIdx + 1) { |
| 1111 | out += " ".repeat(gutter + 1) + "...\n"; |
| 1112 | } else if (prevLineIdx === -1 && lineIdx > 0) { |
| 1113 | out += " ".repeat(gutter + 1) + "...\n"; |
| 1114 | } |
| 1115 | prevLineIdx = lineIdx; |
| 1116 | var lineNum = String(lineIdx + 1).padStart(gutter); |
| 1117 | var contextLine = lines[lineIdx] || ""; |
| 1118 | out += " " + lineNum + " | " + contextLine + "\n"; |
| 1119 | lineErrors.sort((a, b) => (a.column || 0) - (b.column || 0)); |
| 1120 | var underlineChars = Array(contextLine.length + 10).fill(" "); |
| 1121 | for (var e of lineErrors) { |
| 1122 | var col = e.token?.line ? e.token.column : Math.max(0, contextLine.length - 1); |
| 1123 | var len = Math.max(1, e.token?.value?.length || 1); |
| 1124 | for (var i = 0; i < len; i++) underlineChars[col + i] = "^"; |
| 1125 | } |
| 1126 | out += pad + underlineChars.join("").trimEnd() + "\n"; |
| 1127 | for (var e of lineErrors) { |
| 1128 | var col = e.token?.line ? e.token.column : 0; |
| 1129 | out += pad + " ".repeat(col) + e.message + "\n"; |
| 1130 | } |
| 1131 | } |
| 1132 | return out; |
| 1133 | } |
| 1134 | // =========================== |
| 1135 | // Token delegation methods |
| 1136 | // =========================== |
no test coverage detected