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 ---`, }) }