refactor: make formatter config opt-in (#22997)

This commit is contained in:
Dax
2026-04-17 02:33:09 +00:00
committed by GitHub
parent f135c0b5ee
commit 220e3e9a2b
9 changed files with 313 additions and 144 deletions
+103 -67
View File
@@ -10,37 +10,55 @@ import * as Formatter from "../../src/format/formatter"
const it = testEffect(Layer.mergeAll(Format.defaultLayer, CrossSpawnSpawner.defaultLayer, NodeFileSystem.layer))
describe("Format", () => {
it.live("status() returns built-in formatters when no config overrides", () =>
it.live("status() returns empty list when no formatters are configured", () =>
provideTmpdirInstance(() =>
Format.Service.use((fmt) =>
Effect.gen(function* () {
const statuses = yield* fmt.status()
expect(Array.isArray(statuses)).toBe(true)
expect(statuses.length).toBeGreaterThan(0)
for (const item of statuses) {
expect(typeof item.name).toBe("string")
expect(Array.isArray(item.extensions)).toBe(true)
expect(typeof item.enabled).toBe("boolean")
}
const gofmt = statuses.find((item) => item.name === "gofmt")
expect(gofmt).toBeDefined()
expect(gofmt!.extensions).toContain(".go")
expect(yield* fmt.status()).toEqual([])
}),
),
),
)
it.live("status() returns empty list when formatter is disabled", () =>
it.live("status() returns built-in formatters when formatter is true", () =>
provideTmpdirInstance(
() =>
Format.Service.use((fmt) =>
Effect.gen(function* () {
expect(yield* fmt.status()).toEqual([])
const statuses = yield* fmt.status()
const gofmt = statuses.find((item) => item.name === "gofmt")
expect(gofmt).toBeDefined()
expect(gofmt!.extensions).toContain(".go")
}),
),
{ config: { formatter: false } },
{
config: {
formatter: true,
},
},
),
)
it.live("status() keeps built-in formatters when config object is provided", () =>
provideTmpdirInstance(
() =>
Format.Service.use((fmt) =>
Effect.gen(function* () {
const statuses = yield* fmt.status()
const gofmt = statuses.find((item) => item.name === "gofmt")
const mix = statuses.find((item) => item.name === "mix")
expect(gofmt).toBeDefined()
expect(gofmt!.extensions).toContain(".go")
expect(mix).toBeDefined()
}),
),
{
config: {
formatter: {
gofmt: {},
},
},
},
),
)
@@ -51,7 +69,9 @@ describe("Format", () => {
Effect.gen(function* () {
const statuses = yield* fmt.status()
const gofmt = statuses.find((item) => item.name === "gofmt")
const mix = statuses.find((item) => item.name === "mix")
expect(gofmt).toBeUndefined()
expect(mix).toBeDefined()
}),
),
{
@@ -111,68 +131,84 @@ describe("Format", () => {
const a = yield* provideTmpdirInstance(() => Format.Service.use((fmt) => fmt.status()), {
config: { formatter: false },
})
const b = yield* provideTmpdirInstance(() => Format.Service.use((fmt) => fmt.status()))
const b = yield* provideTmpdirInstance(
() => Format.Service.use((fmt) => fmt.status()),
{
config: {
formatter: true,
},
},
)
expect(a).toEqual([])
expect(b.length).toBeGreaterThan(0)
expect(b.find((item) => item.name === "gofmt")).toBeDefined()
}),
)
it.live("runs enabled checks for matching formatters in parallel", () =>
provideTmpdirInstance((path) =>
Effect.gen(function* () {
const file = `${path}/test.parallel`
yield* Effect.promise(() => Bun.write(file, "x"))
provideTmpdirInstance(
(path) =>
Effect.gen(function* () {
const file = `${path}/test.parallel`
yield* Effect.promise(() => Bun.write(file, "x"))
const one = {
extensions: Formatter.gofmt.extensions,
enabled: Formatter.gofmt.enabled,
}
const two = {
extensions: Formatter.mix.extensions,
enabled: Formatter.mix.enabled,
}
const one = {
extensions: Formatter.gofmt.extensions,
enabled: Formatter.gofmt.enabled,
}
const two = {
extensions: Formatter.mix.extensions,
enabled: Formatter.mix.enabled,
}
let active = 0
let max = 0
let active = 0
let max = 0
yield* Effect.acquireUseRelease(
Effect.sync(() => {
Formatter.gofmt.extensions = [".parallel"]
Formatter.mix.extensions = [".parallel"]
Formatter.gofmt.enabled = async () => {
active++
max = Math.max(max, active)
await Bun.sleep(20)
active--
return ["sh", "-c", "true"]
}
Formatter.mix.enabled = async () => {
active++
max = Math.max(max, active)
await Bun.sleep(20)
active--
return ["sh", "-c", "true"]
}
}),
() =>
Format.Service.use((fmt) =>
Effect.gen(function* () {
yield* fmt.init()
yield* fmt.file(file)
}),
),
() =>
yield* Effect.acquireUseRelease(
Effect.sync(() => {
Formatter.gofmt.extensions = one.extensions
Formatter.gofmt.enabled = one.enabled
Formatter.mix.extensions = two.extensions
Formatter.mix.enabled = two.enabled
Formatter.gofmt.extensions = [".parallel"]
Formatter.mix.extensions = [".parallel"]
Formatter.gofmt.enabled = async () => {
active++
max = Math.max(max, active)
await Bun.sleep(20)
active--
return ["sh", "-c", "true"]
}
Formatter.mix.enabled = async () => {
active++
max = Math.max(max, active)
await Bun.sleep(20)
active--
return ["sh", "-c", "true"]
}
}),
)
() =>
Format.Service.use((fmt) =>
Effect.gen(function* () {
yield* fmt.init()
yield* fmt.file(file)
}),
),
() =>
Effect.sync(() => {
Formatter.gofmt.extensions = one.extensions
Formatter.gofmt.enabled = one.enabled
Formatter.mix.extensions = two.extensions
Formatter.mix.enabled = two.enabled
}),
)
expect(max).toBe(2)
}),
expect(max).toBe(2)
}),
{
config: {
formatter: {
gofmt: {},
mix: {},
},
},
},
),
)