summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2025-09-22 11:45:47 -0500
committerGitHub <[email protected]>2025-09-22 11:45:47 -0500
commitcc2bd7141f4c4923491e2cc7fb3e90826629f9cc (patch)
tree0efd86df7a54e8261ffa3a86f6939935b2a1fe51
parentee442975dfcbbb946d71bbade2df926edc994c7b (diff)
downloadopencode-cc2bd7141f4c4923491e2cc7fb3e90826629f9cc.tar.gz
opencode-cc2bd7141f4c4923491e2cc7fb3e90826629f9cc.zip
fix: enforce extensions requirement for custom lsp servers (#2734)
-rw-r--r--packages/opencode/src/config/config.ts18
1 files changed, 17 insertions, 1 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 387dbd65d..a3fd2c3a3 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -14,6 +14,7 @@ import { Flag } from "../flag/flag"
import { Auth } from "../auth"
import { type ParseError as JsoncParseError, parse as parseJsonc, printParseErrorCode } from "jsonc-parser"
import { Instance } from "../project/instance"
+import { LSPServer } from "../lsp/server"
export namespace Config {
const log = Log.create({ service: "config" })
@@ -482,7 +483,22 @@ export namespace Config {
}),
]),
)
- .optional(),
+ .optional()
+ .refine(
+ (data) => {
+ if (!data) return true
+ const serverIds = new Set(Object.values(LSPServer).map((s) => s.id))
+
+ return Object.entries(data).every(([id, config]) => {
+ if (config.disabled) return true
+ if (serverIds.has(id)) return true
+ return Boolean(config.extensions)
+ })
+ },
+ {
+ error: "For custom LSP servers, 'extensions' array is required.",
+ },
+ ),
instructions: z.array(z.string()).optional().describe("Additional instruction files or patterns to include"),
layout: Layout.optional().describe("@deprecated Always uses stretch layout."),
permission: z