diff options
| author | madflow <[email protected]> | 2025-09-09 20:59:58 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-09-09 13:59:58 -0500 |
| commit | 32b47fcc1e70dcfd645974be98db4d31cc728058 (patch) | |
| tree | 99c77938f8072678595ddccbfccad76c06c4da22 | |
| parent | fde03d3c93c2932f5a16653cb00c890fd211087f (diff) | |
| download | opencode-32b47fcc1e70dcfd645974be98db4d31cc728058.tar.gz opencode-32b47fcc1e70dcfd645974be98db4d31cc728058.zip | |
feat: svelte lsp (#2508)
| -rw-r--r-- | packages/opencode/src/lsp/language.ts | 1 | ||||
| -rw-r--r-- | packages/opencode/src/lsp/server.ts | 52 | ||||
| -rw-r--r-- | packages/web/src/content/docs/lsp.mdx | 1 |
3 files changed, 54 insertions, 0 deletions
diff --git a/packages/opencode/src/lsp/language.ts b/packages/opencode/src/lsp/language.ts index ccba01838..2b6e0476c 100644 --- a/packages/opencode/src/lsp/language.ts +++ b/packages/opencode/src/lsp/language.ts @@ -81,6 +81,7 @@ export const LANGUAGE_EXTENSIONS: Record<string, string> = { ".zsh": "shellscript", ".ksh": "shellscript", ".sql": "sql", + ".svelte": "svelte", ".swift": "swift", ".ts": "typescript", ".tsx": "typescriptreact", diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts index 07cf3ec5a..e4b77be04 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/opencode/src/lsp/server.ts @@ -654,4 +654,56 @@ export namespace LSPServer { } }, } + + export const Svelte: Info = { + id: "svelte", + extensions: [".svelte"], + root: NearestRoot([ + "tsconfig.json", + "jsconfig.json", + "package.json", + "pnpm-lock.yaml", + "yarn.lock", + "bun.lockb", + "bun.lock", + "vite.config.ts", + "vite.config.js", + "svelte.config.ts", + "svelte.config.js", + ]), + async spawn(root) { + let binary = Bun.which("svelteserver") + const args: string[] = [] + if (!binary) { + const js = path.join(Global.Path.bin, "node_modules", "svelte-language-server", "bin", "server.js") + if (!(await Bun.file(js).exists())) { + if (Flag.OPENCODE_DISABLE_LSP_DOWNLOAD) return + await Bun.spawn([BunProc.which(), "install", "svelte-language-server"], { + cwd: Global.Path.bin, + env: { + ...process.env, + BUN_BE_BUN: "1", + }, + stdout: "pipe", + stderr: "pipe", + stdin: "pipe", + }).exited + } + binary = BunProc.which() + args.push("run", js) + } + args.push("--stdio") + const proc = spawn(binary, args, { + cwd: root, + env: { + ...process.env, + BUN_BE_BUN: "1", + }, + }) + return { + process: proc, + initialization: {}, + } + }, + } } diff --git a/packages/web/src/content/docs/lsp.mdx b/packages/web/src/content/docs/lsp.mdx index 6a661521c..409837024 100644 --- a/packages/web/src/content/docs/lsp.mdx +++ b/packages/web/src/content/docs/lsp.mdx @@ -24,6 +24,7 @@ opencode comes with several built-in LSP servers for popular languages: | vue | .vue | Auto-installs for Vue projects | | rust | .rs | `rust-analyzer` command available | | clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Auto-installs for C/C++ projects | +| svelte | .svelte | Auto-installs for Svelte projects | LSP servers are automatically enabled when one of the above file extensions are detected and the requirements are met. |
