better configuration error messages (#1517)

This commit is contained in:
Aiden Cline
2025-08-01 18:10:32 -05:00
committed by GitHub
parent fa9db3c167
commit 80d68d01f4

View File

@@ -412,16 +412,24 @@ export namespace Config {
const errors: JsoncParseError[] = []
const data = parseJsonc(text, errors, { allowTrailingComma: true })
if (errors.length) {
const lines = text.split("\n")
const errorDetails = errors
.map((e) => {
const beforeOffset = text.substring(0, e.offset).split("\n")
const line = beforeOffset.length
const column = beforeOffset[beforeOffset.length - 1].length + 1
const problemLine = lines[line - 1]
const error = `${printParseErrorCode(e.error)} at line ${line}, column ${column}`
if (!problemLine) return error
return `${error}\n Line ${line}: ${problemLine}\n${"".padStart(column + 9)}^`
})
.join("\n")
throw new JsonError({
path: configPath,
message: errors
.map((e) => {
const lines = text.substring(0, e.offset).split("\n")
const line = lines.length
const column = lines[lines.length - 1].length + 1
return `${printParseErrorCode(e.error)} at line ${line}, column ${column}`
})
.join("; "),
message: `\n--- JSONC Input ---\n${text}\n--- Errors ---\n${errorDetails}\n--- End ---`,
})
}