summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-04-10 13:30:30 -0500
committerGitHub <[email protected]>2026-04-10 13:30:30 -0500
commitce2612020564ace2bfe95a36f139a07ba237f563 (patch)
treeac3a4359b7fe4b99f62542f19e4de73bcc13a0bb
parentd2d5d84d1e54159389aa5770254c0efa7bf88ba5 (diff)
downloadopencode-ce2612020564ace2bfe95a36f139a07ba237f563.tar.gz
opencode-ce2612020564ace2bfe95a36f139a07ba237f563.zip
tweak: make it so disabling uv or ruff fmters disables both (#21921)
-rw-r--r--packages/opencode/src/format/index.ts7
-rw-r--r--packages/opencode/test/format/format.test.ts40
2 files changed, 47 insertions, 0 deletions
diff --git a/packages/opencode/src/format/index.ts b/packages/opencode/src/format/index.ts
index c05c2bf45..56df63cf9 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 1b341d2f4..39826aad1 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", () =>