Polo123456789 7 месяцев назад
Родитель
Сommit
7df81f7b3e

+ 7 - 0
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>
+}

+ 24 - 0
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

+ 24 - 0
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

+ 58 - 0
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

+ 9 - 99
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,
   ]
 }