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

feat: add F# language server support (#5549)

Nalin Singh 2 месяцев назад
Родитель
Сommit
6830590183
2 измененных файлов с 41 добавлено и 0 удалено
  1. 40 0
      packages/opencode/src/lsp/server.ts
  2. 1 0
      packages/web/src/content/docs/lsp.mdx

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

@@ -610,6 +610,46 @@ export namespace LSPServer {
     },
   }
 
+  export const FSharp: Info = {
+    id: "fsharp",
+    root: NearestRoot([".sln", ".fsproj", "global.json"]),
+    extensions: [".fs", ".fsi", ".fsx", ".fsscript"],
+    async spawn(root) {
+      let bin = Bun.which("fsautocomplete", {
+        PATH: process.env["PATH"] + ":" + Global.Path.bin,
+      })
+      if (!bin) {
+        if (!Bun.which("dotnet")) {
+          log.error(".NET SDK is required to install fsautocomplete")
+          return
+        }
+
+        if (Flag.OPENCODE_DISABLE_LSP_DOWNLOAD) return
+        log.info("installing fsautocomplete via dotnet tool")
+        const proc = Bun.spawn({
+          cmd: ["dotnet", "tool", "install", "fsautocomplete", "--tool-path", Global.Path.bin],
+          stdout: "pipe",
+          stderr: "pipe",
+          stdin: "pipe",
+        })
+        const exit = await proc.exited
+        if (exit !== 0) {
+          log.error("Failed to install fsautocomplete")
+          return
+        }
+
+        bin = path.join(Global.Path.bin, "fsautocomplete" + (process.platform === "win32" ? ".exe" : ""))
+        log.info(`installed fsautocomplete`, { bin })
+      }
+
+      return {
+        process: spawn(bin, {
+          cwd: root,
+        }),
+      }
+    },
+  }
+
   export const SourceKit: Info = {
     id: "sourcekit-lsp",
     extensions: [".swift", ".objc", "objcpp"],

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

@@ -22,6 +22,7 @@ OpenCode comes with several built-in LSP servers for popular languages:
 | elixir-ls          | .ex, .exs                                            | `elixir` command available                                   |
 | zls                | .zig, .zon                                           | `zig` command available                                      |
 | csharp             | .cs                                                  | `.NET SDK` installed                                         |
+| fsharp             | .fs, .fsi, .fsx, .fsscript                           | `.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                             |