Sfoglia il codice sorgente

support clojure projects with built-in lsp (#5975)

Tim Kleinschmidt 8 mesi fa
parent
commit
750a936ae1

+ 21 - 0
packages/opencode/src/lsp/server.ts

@@ -1747,6 +1747,27 @@ export namespace LSPServer {
     },
   }
 
+  export const Clojure: Info = {
+    id: "clojure-lsp",
+    extensions: [".clj", ".cljs", ".cljc", ".edn"],
+    root: NearestRoot(["deps.edn", "project.clj", "shadow-cljs.edn", "bb.edn", "build.boot"]),
+    async spawn(root) {
+      let bin = Bun.which("clojure-lsp")
+      if (!bin && process.platform === "win32") {
+        bin = Bun.which("clojure-lsp.exe")
+      }
+      if (!bin) {
+        log.info("clojure-lsp not found, please install clojure-lsp first")
+        return
+      }
+      return {
+        process: spawn(bin, ["listen"], {
+          cwd: root,
+        }),
+      }
+    },
+  }
+
   export const Nixd: Info = {
     id: "nixd",
     extensions: [".nix"],

+ 1 - 0
packages/web/src/content/docs/lsp.mdx

@@ -17,6 +17,7 @@ OpenCode comes with several built-in LSP servers for popular languages:
 | bash               | .sh, .bash, .zsh, .ksh                                              | Auto-installs bash-language-server                           |
 | clangd             | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++                | Auto-installs for C/C++ projects                             |
 | csharp             | .cs                                                                 | `.NET SDK` installed                                         |
+| clojure-lsp        | .clj, .cljs, .cljc, .edn                                            | `clojure-lsp` command available                              |
 | dart               | .dart                                                               | `dart` command available                                     |
 | deno               | .ts, .tsx, .js, .jsx, .mjs                                          | `deno` command available (auto-detects deno.json/deno.jsonc) |
 | elixir-ls          | .ex, .exs                                                           | `elixir` command available                                   |