summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLawrence Sarpong <[email protected]>2025-12-14 16:51:08 +0000
committerGitHub <[email protected]>2025-12-14 10:51:08 -0600
commite6a0a005d6c5e30054b848e931050bb82326efd8 (patch)
treecd47958f33e35301d3602dcf5ba0c696a499921a
parent90d44751e71cbba3b62f1e92b3861bbc59b15d33 (diff)
downloadopencode-e6a0a005d6c5e30054b848e931050bb82326efd8.tar.gz
opencode-e6a0a005d6c5e30054b848e931050bb82326efd8.zip
Add Gleam LSP and formatter (#5514)
-rw-r--r--packages/opencode/src/format/formatter.ts9
-rw-r--r--packages/opencode/src/lsp/language.ts1
-rw-r--r--packages/opencode/src/lsp/server.ts18
-rw-r--r--packages/web/src/content/docs/formatters.mdx1
-rw-r--r--packages/web/src/content/docs/lsp.mdx1
5 files changed, 30 insertions, 0 deletions
diff --git a/packages/opencode/src/format/formatter.ts b/packages/opencode/src/format/formatter.ts
index 4e49bb324..c4e7c9ee8 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 fbf29a6f7..5261873f6 100644
--- a/packages/opencode/src/lsp/language.ts
+++ b/packages/opencode/src/lsp/language.ts
@@ -34,6 +34,7 @@ export const LANGUAGE_EXTENSIONS: Record<string, string> = {
".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 8076edc24..e3e3fdf7d 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 bb3fe811c..052138f68 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 975e9dea1..236b4db82 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.