From dc52395eadd7ef42ea2ede1fbee19d00dc831dfb Mon Sep 17 00:00:00 2001 From: Sisyphus Date: Sat, 3 Jan 2026 23:48:00 +0900 Subject: [PATCH] feat(lsp): sync LSP catalog with OpenCode (#455) Add new language servers from OpenCode's server.ts: - prisma: Prisma schema support (.prisma) - ocaml-lsp: OCaml language support (.ml, .mli) - texlab: LaTeX support (.tex, .bib) - dockerfile: Dockerfile support (.dockerfile) - gleam: Gleam language support (.gleam) - clojure-lsp: Clojure support (.clj, .cljs, .cljc, .edn) - nixd: Nix language support (.nix) - tinymist: Typst support (.typ, .typc) - haskell-language-server: Haskell support (.hs, .lhs) Add new language extensions from OpenCode's language.ts: - .ets -> typescript - .lhs -> haskell - .kt, .kts -> kotlin - .nix -> nix - .typ, .typc -> typst - .prisma -> prisma Update server IDs to match OpenCode convention: - Add 'bash' as primary ID (keep bash-ls as legacy alias) - Add 'terraform' as primary ID (keep terraform-ls as legacy alias) Closes #454 Co-authored-by: sisyphus-dev-ai --- src/tools/lsp/constants.ts | 69 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/src/tools/lsp/constants.ts b/src/tools/lsp/constants.ts index 267268f..a37582d 100644 --- a/src/tools/lsp/constants.ts +++ b/src/tools/lsp/constants.ts @@ -69,10 +69,21 @@ export const LSP_INSTALL_HINTS: Record = { php: "npm install -g intelephense", dart: "Included with Dart SDK", "terraform-ls": "See https://github.com/hashicorp/terraform-ls", + terraform: "See https://github.com/hashicorp/terraform-ls", + prisma: "npm install -g prisma", + "ocaml-lsp": "opam install ocaml-lsp-server", + texlab: "See https://github.com/latex-lsp/texlab", + dockerfile: "npm install -g dockerfile-language-server-nodejs", + gleam: "See https://gleam.run/getting-started/installing/", + "clojure-lsp": "See https://clojure-lsp.io/installation/", + nixd: "nix profile install nixpkgs#nixd", + tinymist: "See https://github.com/Myriad-Dreamin/tinymist", + "haskell-language-server": "ghcup install hls", + bash: "npm install -g bash-language-server", } // Synced with OpenCode's server.ts -// https://github.com/sst/opencode/blob/main/packages/opencode/src/lsp/server.ts +// https://github.com/sst/opencode/blob/dev/packages/opencode/src/lsp/server.ts export const BUILTIN_SERVERS: Record> = { typescript: { command: ["typescript-language-server", "--stdio"], @@ -161,6 +172,11 @@ export const BUILTIN_SERVERS: Record> = { command: ["astro-ls", "--stdio"], extensions: [".astro"], }, + bash: { + command: ["bash-language-server", "start"], + extensions: [".sh", ".bash", ".zsh", ".ksh"], + }, + // Keep legacy alias for backward compatibility "bash-ls": { command: ["bash-language-server", "start"], extensions: [".sh", ".bash", ".zsh", ".ksh"], @@ -185,14 +201,55 @@ export const BUILTIN_SERVERS: Record> = { command: ["dart", "language-server", "--lsp"], extensions: [".dart"], }, + terraform: { + command: ["terraform-ls", "serve"], + extensions: [".tf", ".tfvars"], + }, + // Legacy alias for backward compatibility "terraform-ls": { command: ["terraform-ls", "serve"], extensions: [".tf", ".tfvars"], }, + prisma: { + command: ["prisma", "language-server"], + extensions: [".prisma"], + }, + "ocaml-lsp": { + command: ["ocamllsp"], + extensions: [".ml", ".mli"], + }, + texlab: { + command: ["texlab"], + extensions: [".tex", ".bib"], + }, + dockerfile: { + command: ["docker-langserver", "--stdio"], + extensions: [".dockerfile"], + }, + gleam: { + command: ["gleam", "lsp"], + extensions: [".gleam"], + }, + "clojure-lsp": { + command: ["clojure-lsp", "listen"], + extensions: [".clj", ".cljs", ".cljc", ".edn"], + }, + nixd: { + command: ["nixd"], + extensions: [".nix"], + }, + tinymist: { + command: ["tinymist"], + extensions: [".typ", ".typc"], + }, + "haskell-language-server": { + command: ["haskell-language-server-wrapper", "--lsp"], + extensions: [".hs", ".lhs"], + }, } // Synced with OpenCode's language.ts -// https://github.com/sst/opencode/blob/main/packages/opencode/src/lsp/language.ts +// https://github.com/sst/opencode/blob/dev/packages/opencode/src/lsp/language.ts export const EXT_TO_LANG: Record = { ".abap": "abap", ".bat": "bat", @@ -306,6 +363,14 @@ export const EXT_TO_LANG: Record = { ".tf": "terraform", ".tfvars": "terraform-vars", ".hcl": "hcl", + ".nix": "nix", + ".typ": "typst", + ".typc": "typst", + ".ets": "typescript", + ".lhs": "haskell", + ".kt": "kotlin", + ".kts": "kotlin", + ".prisma": "prisma", // Additional extensions not in OpenCode ".h": "c", ".hpp": "cpp",