|
|
@@ -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"))
|
|
|
-
|
|
|
- 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
|
|
|
-
|
|
|
- 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)
|
|
|
- }),
|
|
|
- ),
|
|
|
- () =>
|
|
|
+ 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,
|
|
|
+ }
|
|
|
+
|
|
|
+ let active = 0
|
|
|
+ let max = 0
|
|
|
+
|
|
|
+ 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: {},
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
),
|
|
|
)
|
|
|
|