From ce2612020564ace2bfe95a36f139a07ba237f563 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Fri, 10 Apr 2026 13:30:30 -0500 Subject: [PATCH] tweak: make it so disabling uv or ruff fmters disables both (#21921) --- packages/opencode/src/format/index.ts | 7 ++++ packages/opencode/test/format/format.test.ts | 40 ++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/packages/opencode/src/format/index.ts b/packages/opencode/src/format/index.ts index c05c2bf454..56df63cf96 100644 --- a/packages/opencode/src/format/index.ts +++ b/packages/opencode/src/format/index.ts @@ -51,6 +51,13 @@ export namespace Format { formatters[item.name] = item } for (const [name, item] of Object.entries(cfg.formatter ?? {})) { + // Ruff and uv are both the same formatter, so disabling either should disable both. + if (["ruff", "uv"].includes(name) && (cfg.formatter?.ruff?.disabled || cfg.formatter?.uv?.disabled)) { + // TODO combine formatters so shared backends like Ruff/uv don't need linked disable handling here. + delete formatters.ruff + delete formatters.uv + continue + } if (item.disabled) { delete formatters[name] continue diff --git a/packages/opencode/test/format/format.test.ts b/packages/opencode/test/format/format.test.ts index 1b341d2f41..39826aad16 100644 --- a/packages/opencode/test/format/format.test.ts +++ b/packages/opencode/test/format/format.test.ts @@ -64,6 +64,46 @@ describe("Format", () => { ), ) + it.live("status() excludes uv when ruff is disabled", () => + provideTmpdirInstance( + () => + Format.Service.use((fmt) => + Effect.gen(function* () { + const statuses = yield* fmt.status() + expect(statuses.find((item) => item.name === "ruff")).toBeUndefined() + expect(statuses.find((item) => item.name === "uv")).toBeUndefined() + }), + ), + { + config: { + formatter: { + ruff: { disabled: true }, + }, + }, + }, + ), + ) + + it.live("status() excludes ruff when uv is disabled", () => + provideTmpdirInstance( + () => + Format.Service.use((fmt) => + Effect.gen(function* () { + const statuses = yield* fmt.status() + expect(statuses.find((item) => item.name === "ruff")).toBeUndefined() + expect(statuses.find((item) => item.name === "uv")).toBeUndefined() + }), + ), + { + config: { + formatter: { + uv: { disabled: true }, + }, + }, + }, + ), + ) + it.live("service initializes without error", () => provideTmpdirInstance(() => Format.Service.use(() => Effect.void))) it.live("status() initializes formatter state per directory", () =>