Przeglądaj źródła

better configuration error messages (#1517)

Aiden Cline 6 miesięcy temu
rodzic
commit
80d68d01f4
1 zmienionych plików z 16 dodań i 8 usunięć
  1. 16 8
      packages/opencode/src/config/config.ts

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