From 80d68d01f4330a8a80c9ace32dffae7c1cc6d81d Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Fri, 1 Aug 2025 18:10:32 -0500 Subject: [PATCH] better configuration error messages (#1517) --- packages/opencode/src/config/config.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index b0ba6fa4..d00e5f1f 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -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 ---`, }) }