summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNalin Singh <[email protected]>2025-12-15 22:22:16 +0530
committerGitHub <[email protected]>2025-12-15 10:52:16 -0600
commit683059018326e3cc5a77c31eb87c3302472789d9 (patch)
tree8fe5b79babad1cf59898864ef5e9ad47ca9e815c
parentb9b43490397cb17dfb4c636d43956137d595b354 (diff)
downloadopencode-683059018326e3cc5a77c31eb87c3302472789d9.tar.gz
opencode-683059018326e3cc5a77c31eb87c3302472789d9.zip
feat: add F# language server support (#5549)
-rw-r--r--packages/opencode/src/lsp/server.ts40
-rw-r--r--packages/web/src/content/docs/lsp.mdx1
2 files changed, 41 insertions, 0 deletions
diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts
index e3e3fdf7d..bd959184b 100644
--- a/packages/opencode/src/lsp/server.ts
+++ b/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"],
diff --git a/packages/web/src/content/docs/lsp.mdx b/packages/web/src/content/docs/lsp.mdx
index 236b4db82..ad2085d81 100644
--- a/packages/web/src/content/docs/lsp.mdx
+++ b/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 |