diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts index 1132bbc7..d9fff5b1 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/opencode/src/lsp/server.ts @@ -547,6 +547,40 @@ export namespace LSPServer { }, } + export const SourceKit: Info = { + id: "sourcekit-lsp", + extensions: [".swift", ".objc", "objcpp"], + root: NearestRoot(["Package.swift", "*.xcodeproj", "*.xcworkspace"]), + async spawn(root) { + // Check if sourcekit-lsp is available in the PATH + // This is installed with the Swift toolchain + const sourcekit = Bun.which("sourcekit-lsp") + if (sourcekit) { + return { + process: spawn(sourcekit, { + cwd: root, + }), + } + } + + // If sourcekit-lsp not found, check if xcrun is available + // This is specific to macOS where sourcekit-lsp is typically installed with Xcode + if (!Bun.which("xcrun")) return + + const lspLoc = await $`xcrun --find sourcekit-lsp`.quiet().nothrow() + + if (lspLoc.exitCode !== 0) return + + const bin = lspLoc.text().trim() + + return { + process: spawn(bin, { + cwd: root, + }), + } + }, + } + export const RustAnalyzer: Info = { id: "rust", root: async (root) => { diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 4aac8c25..c9b2a0e9 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -24,4 +24,4 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" } -} \ No newline at end of file +} diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index f556154f..d6da3b76 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -26,4 +26,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} diff --git a/packages/web/src/content/docs/lsp.mdx b/packages/web/src/content/docs/lsp.mdx index 97aadab5..1cd1d825 100644 --- a/packages/web/src/content/docs/lsp.mdx +++ b/packages/web/src/content/docs/lsp.mdx @@ -11,24 +11,25 @@ OpenCode integrates with your Language Server Protocol (LSP) to help the LLM int OpenCode comes with several built-in LSP servers for popular languages: -| LSP Server | Extensions | Requirements | -| ---------- | ---------------------------------------------------- | ------------------------------------------------------------ | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` dependency in project | -| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` command available (auto-detects deno.json/deno.jsonc) | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` dependency in project | -| gopls | .go | `go` command available | -| ruby-lsp | .rb, .rake, .gemspec, .ru | `ruby` and `gem` commands available | -| pyright | .py, .pyi | `pyright` dependency installed | -| elixir-ls | .ex, .exs | `elixir` command available | -| zls | .zig, .zon | `zig` command available | -| csharp | .cs | `.NET SDK` installed | -| 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 | -| astro | .astro | Auto-installs for Astro projects | -| jdtls | .java | `Java SDK (version 21+)` installed | -| lua-ls | .lua | Auto-installs for Lua projects | +| LSP Server | Extensions | Requirements | +| ------------- | ---------------------------------------------------- | ------------------------------------------------------------ | +| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` dependency in project | +| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` command available (auto-detects deno.json/deno.jsonc) | +| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` dependency in project | +| gopls | .go | `go` command available | +| ruby-lsp | .rb, .rake, .gemspec, .ru | `ruby` and `gem` commands available | +| pyright | .py, .pyi | `pyright` dependency installed | +| elixir-ls | .ex, .exs | `elixir` command available | +| zls | .zig, .zon | `zig` command available | +| csharp | .cs | `.NET SDK` installed | +| 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 | +| astro | .astro | Auto-installs for Astro projects | +| jdtls | .java | `Java SDK (version 21+)` installed | +| lua-ls | .lua | Auto-installs for Lua projects | +| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installed (`xcode` on macOS) | LSP servers are automatically enabled when one of the above file extensions are detected and the requirements are met.