restructure formatters

This commit is contained in:
Dax Raad 2025-06-29 21:19:10 -04:00
parent 7df81f7b3e
commit 0f41e60bd6
5 changed files with 78 additions and 116 deletions

View file

@ -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
}
},
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,
]
}