summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authormadflow <[email protected]>2025-09-09 20:59:58 +0200
committerGitHub <[email protected]>2025-09-09 13:59:58 -0500
commit32b47fcc1e70dcfd645974be98db4d31cc728058 (patch)
tree99c77938f8072678595ddccbfccad76c06c4da22
parentfde03d3c93c2932f5a16653cb00c890fd211087f (diff)
downloadopencode-32b47fcc1e70dcfd645974be98db4d31cc728058.tar.gz
opencode-32b47fcc1e70dcfd645974be98db4d31cc728058.zip
feat: svelte lsp (#2508)
-rw-r--r--packages/opencode/src/lsp/language.ts1
-rw-r--r--packages/opencode/src/lsp/server.ts52
-rw-r--r--packages/web/src/content/docs/lsp.mdx1
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.