Kaynağa Gözat

restructure formatters

Dax Raad 7 ay önce
ebeveyn
işleme
0f41e60bd6

+ 76 - 0
packages/opencode/src/format/formatters.ts

@@ -0,0 +1,76 @@
+import { App } from "../app/app"
+import { BunProc } from "../bun"
+import type { Definition } from "./definition"
+
+export const gofmt: Definition = {
+  name: "gofmt",
+  command: ["gofmt", "-w", "$FILE"],
+  extensions: [".go"],
+  async enabled() {
+    return Bun.which("gofmt") !== null
+  },
+}
+
+export const mix: Definition = {
+  name: "mix",
+  command: ["mix", "format", "$FILE"],
+  extensions: [".ex", ".exs", ".eex", ".heex", ".leex", ".neex", ".sface"],
+  async enabled() {
+    return Bun.which("mix") !== null
+  },
+}
+
+export 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() {
+    // this is more complicated because we only want to use prettier if it's
+    // being used with the current project
+    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
+    }
+  },
+}

+ 0 - 24
packages/opencode/src/format/formatters/gofmt.ts

@@ -1,24 +0,0 @@
-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

+ 0 - 24
packages/opencode/src/format/formatters/mix.ts

@@ -1,24 +0,0 @@
-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

+ 0 - 58
packages/opencode/src/format/formatters/prettier.ts

@@ -1,58 +0,0 @@
-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

+ 2 - 10
packages/opencode/src/format/index.ts

@@ -6,9 +6,7 @@ import path from "path"
 
 import type { Definition } from "./definition"
 
-import prettier from "./formatters/prettier"
-import mix from "./formatters/mix"
-import gofmt from "./formatters/gofmt"
+import * as Formatters from "./formatters"
 
 export namespace Format {
   const log = Log.create({ service: "format" })
@@ -33,7 +31,7 @@ export namespace Format {
 
   async function getFormatter(ext: string) {
     const result = []
-    for (const item of FORMATTERS) {
+    for (const item of Object.values(Formatters)) {
       if (!item.extensions.includes(ext)) continue
       if (!isEnabled(item)) continue
       result.push(item)
@@ -66,10 +64,4 @@ export namespace Format {
       }
     })
   }
-
-  const FORMATTERS: Definition[] = [
-    prettier,
-    mix,
-    gofmt,
-  ]
 }