Просмотр исходного кода

feat: add SourceKit LSP support (#1545)

Co-authored-by: GitHub Action <[email protected]>
Co-authored-by: Aiden Cline <[email protected]>
Boston Cartwright 3 месяцев назад
Родитель
Сommit
18260b037b

+ 34 - 0
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) => {

+ 1 - 1
packages/plugin/package.json

@@ -24,4 +24,4 @@
     "typescript": "catalog:",
     "@typescript/native-preview": "catalog:"
   }
-}
+}

+ 1 - 1
packages/sdk/js/package.json

@@ -26,4 +26,4 @@
   "publishConfig": {
     "directory": "dist"
   }
-}
+}

+ 19 - 18
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.