diff --git a/packages/opencode/src/lsp/language.ts b/packages/opencode/src/lsp/language.ts index 620944a8e07..d279f7d64e7 100644 --- a/packages/opencode/src/lsp/language.ts +++ b/packages/opencode/src/lsp/language.ts @@ -39,6 +39,7 @@ export const LANGUAGE_EXTENSIONS: Record = { ".hbs": "handlebars", ".handlebars": "handlebars", ".hs": "haskell", + ".lhs": "haskell", ".html": "html", ".htm": "html", ".ini": "ini", diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts index b432e5a5d0a..0610aa2d07e 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/opencode/src/lsp/server.ts @@ -1892,4 +1892,22 @@ export namespace LSPServer { } }, } + + export const HLS: Info = { + id: "haskell-language-server", + extensions: [".hs", ".lhs"], + root: NearestRoot(["stack.yaml", "cabal.project", "hie.yaml", "*.cabal"]), + async spawn(root) { + const bin = Bun.which("haskell-language-server-wrapper") + if (!bin) { + log.info("haskell-language-server-wrapper not found, please install haskell-language-server") + return + } + return { + process: spawn(bin, ["--lsp"], { + cwd: root, + }), + } + }, + } }