diff --git a/packages/opencode/src/format/formatter.ts b/packages/opencode/src/format/formatter.ts index 4e49bb32470..c4e7c9ee887 100644 --- a/packages/opencode/src/format/formatter.ts +++ b/packages/opencode/src/format/formatter.ts @@ -284,3 +284,12 @@ export const latexindent: Info = { return Bun.which("latexindent") !== null }, } + +export const gleam: Info = { + name: "gleam", + command: ["gleam", "format", "$FILE"], + extensions: [".gleam"], + async enabled() { + return Bun.which("gleam") !== null + }, +} diff --git a/packages/opencode/src/lsp/language.ts b/packages/opencode/src/lsp/language.ts index fbf29a6f749..5261873f6d5 100644 --- a/packages/opencode/src/lsp/language.ts +++ b/packages/opencode/src/lsp/language.ts @@ -34,6 +34,7 @@ export const LANGUAGE_EXTENSIONS: Record = { ".gitrebase": "git-rebase", ".go": "go", ".groovy": "groovy", + ".gleam": "gleam", ".hbs": "handlebars", ".handlebars": "handlebars", ".hs": "haskell", diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts index 8076edc24dd..e3e3fdf7de7 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/opencode/src/lsp/server.ts @@ -1509,4 +1509,22 @@ export namespace LSPServer { } }, } + + export const Gleam: Info = { + id: "gleam", + extensions: [".gleam"], + root: NearestRoot(["gleam.toml"]), + async spawn(root) { + const gleam = Bun.which("gleam") + if (!gleam) { + log.info("gleam not found, please install gleam first") + return + } + return { + process: spawn(gleam, ["lsp"], { + cwd: root, + }), + } + }, + } } diff --git a/packages/web/src/content/docs/formatters.mdx b/packages/web/src/content/docs/formatters.mdx index bb3fe811cde..052138f6807 100644 --- a/packages/web/src/content/docs/formatters.mdx +++ b/packages/web/src/content/docs/formatters.mdx @@ -29,6 +29,7 @@ OpenCode comes with several built-in formatters for popular languages and framew | dart | .dart | `dart` command available | | ocamlformat | .ml, .mli | `ocamlformat` command available and `.ocamlformat` config file | | terraform | .tf, .tfvars | `terraform` command available | +| gleam | .gleam | `gleam` command available | So if your project has `prettier` in your `package.json`, OpenCode will automatically use it. diff --git a/packages/web/src/content/docs/lsp.mdx b/packages/web/src/content/docs/lsp.mdx index 975e9dea143..236b4db82e7 100644 --- a/packages/web/src/content/docs/lsp.mdx +++ b/packages/web/src/content/docs/lsp.mdx @@ -36,6 +36,7 @@ OpenCode comes with several built-in LSP servers for popular languages: | ocaml-lsp | .ml, .mli | `ocamllsp` command available | | terraform | .tf, .tfvars | Auto-installs from GitHub releases | | bash | .sh, .bash, .zsh, .ksh | Auto-installs bash-language-server | +| gleam | .gleam | `gleam` command available | LSP servers are automatically enabled when one of the above file extensions are detected and the requirements are met.