From cc2bd7141f4c4923491e2cc7fb3e90826629f9cc Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Mon, 22 Sep 2025 11:45:47 -0500 Subject: [PATCH] fix: enforce extensions requirement for custom lsp servers (#2734) --- packages/opencode/src/config/config.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 387dbd65..a3fd2c3a 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