summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/format/definition.ts7
-rw-r--r--packages/opencode/src/format/formatters/gofmt.ts24
-rw-r--r--packages/opencode/src/format/formatters/mix.ts24
-rw-r--r--packages/opencode/src/format/formatters/prettier.ts58
-rw-r--r--packages/opencode/src/format/index.ts108
5 files changed, 122 insertions, 99 deletions
diff --git a/packages/opencode/src/format/definition.ts b/packages/opencode/src/format/definition.ts
new file mode 100644
index 000000000..afc45df88
--- /dev/null
+++ b/packages/opencode/src/format/definition.ts
@@ -0,0 +1,7 @@
+export interface Definition {
+ name: string
+ command: string[]
+ environment?: Record<string, string>
+ extensions: string[]
+ enabled(): Promise<boolean>
+}
diff --git a/packages/opencode/src/format/formatters/gofmt.ts b/packages/opencode/src/format/formatters/gofmt.ts
new file mode 100644
index 000000000..61b3a0917
--- /dev/null
+++ b/packages/opencode/src/format/formatters/gofmt.ts
@@ -0,0 +1,24 @@
+import { App } from "../../app/app"
+import type { Definition } from "../definition"
+
+const gofmt: Definition = {
+ name: "gofmt",
+ command: ["gofmt", "-w", "$FILE"],
+ extensions: [".go"],
+ async enabled() {
+ try {
+ const proc = Bun.spawn({
+ cmd: ["gofmt", "-h"],
+ cwd: App.info().path.cwd,
+ stdout: "ignore",
+ stderr: "ignore",
+ })
+ const exit = await proc.exited
+ return exit === 0
+ } catch {
+ return false
+ }
+ },
+}
+
+export default gofmt
diff --git a/packages/opencode/src/format/formatters/mix.ts b/packages/opencode/src/format/formatters/mix.ts
new file mode 100644
index 000000000..c08f1bf1f
--- /dev/null
+++ b/packages/opencode/src/format/formatters/mix.ts
@@ -0,0 +1,24 @@
+import { App } from "../../app/app"
+import type {Definition} from "../definition"
+
+const mix: Definition = {
+ name: "mix",
+ command: ["mix", "format", "$FILE"],
+ extensions: [".ex", ".exs", ".eex", ".heex", ".leex", ".neex", ".sface"],
+ async enabled() {
+ try {
+ const proc = Bun.spawn({
+ cmd: ["mix", "--version"],
+ cwd: App.info().path.cwd,
+ stdout: "ignore",
+ stderr: "ignore",
+ })
+ const exit = await proc.exited
+ return exit === 0
+ } catch {
+ return false
+ }
+ },
+}
+
+export default mix
diff --git a/packages/opencode/src/format/formatters/prettier.ts b/packages/opencode/src/format/formatters/prettier.ts
new file mode 100644
index 000000000..88d9c9bce
--- /dev/null
+++ b/packages/opencode/src/format/formatters/prettier.ts
@@ -0,0 +1,58 @@
+import { App } from "../../app/app"
+import { BunProc } from "../../bun"
+import type {Definition} from '../definition'
+
+const prettier: Definition = {
+ name: "prettier",
+ command: [BunProc.which(), "run", "prettier", "--write", "$FILE"],
+ environment: {
+ BUN_BE_BUN: "1",
+ },
+ extensions: [
+ ".js",
+ ".jsx",
+ ".mjs",
+ ".cjs",
+ ".ts",
+ ".tsx",
+ ".mts",
+ ".cts",
+ ".html",
+ ".htm",
+ ".css",
+ ".scss",
+ ".sass",
+ ".less",
+ ".vue",
+ ".svelte",
+ ".json",
+ ".jsonc",
+ ".yaml",
+ ".yml",
+ ".toml",
+ ".xml",
+ ".md",
+ ".mdx",
+ ".graphql",
+ ".gql",
+ ],
+ async enabled() {
+ try {
+ const proc = Bun.spawn({
+ cmd: [BunProc.which(), "run", "prettier", "--version"],
+ cwd: App.info().path.cwd,
+ env: {
+ BUN_BE_BUN: "1",
+ },
+ stdout: "ignore",
+ stderr: "ignore",
+ })
+ const exit = await proc.exited
+ return exit === 0
+ } catch {
+ return false
+ }
+ },
+}
+
+export default prettier
diff --git a/packages/opencode/src/format/index.ts b/packages/opencode/src/format/index.ts
index 2a189380b..5a4481356 100644
--- a/packages/opencode/src/format/index.ts
+++ b/packages/opencode/src/format/index.ts
@@ -1,10 +1,15 @@
import { App } from "../app/app"
-import { BunProc } from "../bun"
import { Bus } from "../bus"
import { File } from "../file"
import { Log } from "../util/log"
import path from "path"
+import type { Definition } from "./definition"
+
+import prettier from "./formatters/prettier"
+import mix from "./formatters/mix"
+import gofmt from "./formatters/gofmt"
+
export namespace Format {
const log = Log.create({ service: "format" })
@@ -62,104 +67,9 @@ export namespace Format {
})
}
- interface Definition {
- name: string
- command: string[]
- environment?: Record<string, string>
- extensions: string[]
- enabled(): Promise<boolean>
- }
-
const FORMATTERS: Definition[] = [
- {
- name: "prettier",
- command: [BunProc.which(), "run", "prettier", "--write", "$FILE"],
- environment: {
- BUN_BE_BUN: "1",
- },
- extensions: [
- ".js",
- ".jsx",
- ".mjs",
- ".cjs",
- ".ts",
- ".tsx",
- ".mts",
- ".cts",
- ".html",
- ".htm",
- ".css",
- ".scss",
- ".sass",
- ".less",
- ".vue",
- ".svelte",
- ".json",
- ".jsonc",
- ".yaml",
- ".yml",
- ".toml",
- ".xml",
- ".md",
- ".mdx",
- ".graphql",
- ".gql",
- ],
- async enabled() {
- try {
- const proc = Bun.spawn({
- cmd: [BunProc.which(), "run", "prettier", "--version"],
- cwd: App.info().path.cwd,
- env: {
- BUN_BE_BUN: "1",
- },
- stdout: "ignore",
- stderr: "ignore",
- })
- const exit = await proc.exited
- return exit === 0
- } catch {
- return false
- }
- },
- },
- {
- name: "mix",
- command: ["mix", "format", "$FILE"],
- extensions: [".ex", ".exs", ".eex", ".heex", ".leex", ".neex", ".sface"],
- async enabled() {
- try {
- const proc = Bun.spawn({
- cmd: ["mix", "--version"],
- cwd: App.info().path.cwd,
- stdout: "ignore",
- stderr: "ignore",
- })
- const exit = await proc.exited
- return exit === 0
- } catch {
- return false
- }
- },
- },
- {
- name: "gofmt",
- command: ["gofmt", "-w", "$FILE"],
- extensions: [".go"],
- async enabled() {
- try {
- const proc = Bun.spawn({
- cmd: ["gofmt", "-h"],
- cwd: App.info().path.cwd,
- stdout: "ignore",
- stderr: "ignore",
- })
- const exit = await proc.exited
- return exit === 0
- } catch {
- return false
- }
- },
- },
+ prettier,
+ mix,
+ gofmt,
]
}