Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/opencode/src/effect/runtime-flags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ export class Service extends ConfigService.Service<Service>()("@opencode/Runtime
experimentalBackgroundSubagents: enabledByExperimental("OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS"),
experimentalLspTy: bool("OPENCODE_EXPERIMENTAL_LSP_TY"),
experimentalLspTool: enabledByExperimental("OPENCODE_EXPERIMENTAL_LSP_TOOL"),
experimentalOxfmt: enabledByExperimental("OPENCODE_EXPERIMENTAL_OXFMT"),
experimentalPlanMode: enabledByExperimental("OPENCODE_EXPERIMENTAL_PLAN_MODE"),
experimentalCodeMode: enabledByExperimental("OPENCODE_EXPERIMENTAL_CODE_MODE"),
experimentalEventSystem: enabledByExperimental("OPENCODE_EXPERIMENTAL_EVENT_SYSTEM"),
Expand Down
30 changes: 25 additions & 5 deletions packages/opencode/src/format/formatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import { Filesystem } from "@/util/filesystem"
import { Process } from "@/util/process"
import { which } from "@opencode-ai/core/util/which"

export interface Context extends Pick<InstanceContext, "directory" | "worktree"> {
experimentalOxfmt: boolean
}
export type Context = Pick<InstanceContext, "directory" | "worktree">

export interface Info {
name: string
Expand Down Expand Up @@ -89,9 +87,31 @@ export const oxfmt: Info = {
environment: {
BUN_BE_BUN: "1",
},
extensions: [".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".mts", ".cts"],
extensions: [
".js",
".jsx",
".mjs",
".cjs",
".ts",
".tsx",
".mts",
".cts",
".json",
".jsonc",
".html",
".vue",
".css",
".scss",
".less",
".yaml",
".yml",
".toml",
".md",
".mdx",
".graphql",
".gql",
],
async enabled(context) {
if (!context.experimentalOxfmt) return false
const items = await Filesystem.findUp("package.json", context.directory, context.worktree)
for (const item of items) {
const json = await Filesystem.readJson<{
Expand Down
6 changes: 2 additions & 4 deletions packages/opencode/src/format/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { InstanceState } from "@/effect/instance-state"
import path from "path"
import { mergeDeep } from "remeda"
import { Config } from "@/config/config"
import { RuntimeFlags } from "@/effect/runtime-flags"
import { errorMessage } from "@/util/error"
import * as Formatter from "./formatter"

Expand All @@ -33,7 +32,6 @@ const layer = Layer.effect(
Effect.gen(function* () {
const config = yield* Config.Service
const appProcess = yield* AppProcess.Service
const flags = yield* RuntimeFlags.Service

const state = yield* InstanceState.make(
Effect.fn("Format.state")(function* (ctx) {
Expand All @@ -43,7 +41,7 @@ const layer = Layer.effect(
async function getCommand(item: Formatter.Info) {
let cmd = commands[item.name]
if (cmd === false || cmd === undefined) {
cmd = await item.enabled({ ...ctx, experimentalOxfmt: flags.experimentalOxfmt })
cmd = await item.enabled(ctx)
commands[item.name] = cmd
}
return cmd
Expand Down Expand Up @@ -197,7 +195,7 @@ const layer = Layer.effect(
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [Config.node, AppProcess.node, RuntimeFlags.node],
deps: [Config.node, AppProcess.node],
})

export * as Format from "."
39 changes: 0 additions & 39 deletions packages/opencode/test/effect/runtime-flags.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ describe("RuntimeFlags", () => {
expect(flags.experimentalBackgroundSubagents).toBe(true)
expect(flags.experimentalLspTy).toBe(false)
expect(flags.experimentalLspTool).toBe(true)
expect(flags.experimentalOxfmt).toBe(true)
expect(flags.experimentalPlanMode).toBe(true)
expect(flags.experimentalEventSystem).toBe(true)
expect(flags.experimentalWorkspaces).toBe(true)
Expand Down Expand Up @@ -115,7 +114,6 @@ describe("RuntimeFlags", () => {
expect(flags.disableClaudeCodeSkills).toBe(false)
expect(flags.enableExa).toBe(false)
expect(flags.experimentalIconDiscovery).toBe(false)
expect(flags.experimentalOxfmt).toBe(false)
expect(flags.outputTokenMax).toBeUndefined()
expect(flags.bashDefaultTimeoutMs).toBe(1_000)
expect(flags.enableExperimentalModels).toBe(false)
Expand Down Expand Up @@ -218,42 +216,6 @@ describe("RuntimeFlags", () => {
}),
)

it.effect("experimentalOxfmt defaults to false", () =>
Effect.gen(function* () {
const flags = yield* readFlags.pipe(Effect.provide(fromConfig({})))

expect(flags.experimentalOxfmt).toBe(false)
}),
)

it.effect("experimentalOxfmt is enabled by OPENCODE_EXPERIMENTAL_OXFMT", () =>
Effect.gen(function* () {
const flags = yield* readFlags.pipe(
Effect.provide(
fromConfig({
OPENCODE_EXPERIMENTAL_OXFMT: "true",
}),
),
)

expect(flags.experimentalOxfmt).toBe(true)
}),
)

it.effect("experimentalOxfmt inherits OPENCODE_EXPERIMENTAL", () =>
Effect.gen(function* () {
const flags = yield* readFlags.pipe(
Effect.provide(
fromConfig({
OPENCODE_EXPERIMENTAL: "true",
}),
),
)

expect(flags.experimentalOxfmt).toBe(true)
}),
)

for (const input of [
{ name: "absent", config: {}, expected: undefined },
{
Expand Down Expand Up @@ -341,7 +303,6 @@ describe("RuntimeFlags", () => {
expect(flags.disableClaudeCodeSkills).toBe(false)
expect(flags.enableExa).toBe(false)
expect(flags.experimentalIconDiscovery).toBe(false)
expect(flags.experimentalOxfmt).toBe(false)
expect(flags.outputTokenMax).toBeUndefined()
expect(flags.bashDefaultTimeoutMs).toBeUndefined()
expect(flags.client).toBe("cli")
Expand Down
1 change: 0 additions & 1 deletion packages/web/src/content/docs/ar/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,6 @@ opencode upgrade v0.1.48
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | المهلة الافتراضية لأوامر bash بالميلي ثانية |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | الحد الأقصى لرموز المخرجات لاستجابات LLM |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | تفعيل مراقب الملفات لكامل الدليل |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | تفعيل مُنسّق oxfmt |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | تفعيل أداة LSP تجريبية |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | تعطيل مراقب الملفات |
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | تفعيل ميزات Exa التجريبية |
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/content/docs/ar/formatters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ description: يستخدم OpenCode مُنسِّقات خاصة بكل لغة.
| nixfmt | .nix | يتوفر أمر `nixfmt` |
| shfmt | .sh, .bash | يتوفر أمر `shfmt` |
| pint | .php | وجود اعتماد `laravel/pint` في `composer.json` |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | وجود اعتماد `oxfmt` في `package.json` و[علم متغير بيئة تجريبي](/docs/cli/#experimental) |
| oxfmt | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, و[المزيد](https://oxc.rs/compatibility.html) | وجود اعتماد `oxfmt` في `package.json` |
| ormolu | .hs | يتوفر أمر `ormolu` |

لذا إذا كان مشروعك يتضمن `prettier` ضمن `package.json`، فسيستخدمه OpenCode تلقائيا.
Expand Down
1 change: 0 additions & 1 deletion packages/web/src/content/docs/bs/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,6 @@ Ove varijable okruženja omogućavaju eksperimentalne karakteristike koje se mog
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Zadano vremensko ograničenje za bash naredbe u ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Maksimalni izlazni tokeni za LLM odgovore |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Omogući praćenje datoteka za cijeli direktorij |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Omogući oxfmt formatter |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Omogući eksperimentalni LSP alat |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Onemogući praćenje datoteka |
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Omogući eksperimentalne Exa funkcije |
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/content/docs/bs/formatters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ OpenCode dolazi sa nekoliko ugrađenih formatera za popularne jezike i okvire. I
| gleam | .bleam | `gleam` komanda dostupna |
| nixfmt | .nix | `nixfmt` komanda dostupna |
| shfmt | .sh, .bash | `shfmt` komanda dostupna |
| pint | .php | `laravel/pint` zavisnost u `composer.json` || oxfmt (Eksperimentalno) | .js, .jsx, .ts, .tsx | `oxfmt` zavisnost u `package.json` i [eksperimentalna env varijabla flag](/docs/cli/#experimental) |
| pint | .php | `laravel/pint` zavisnost u `composer.json` |
| oxfmt | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, i [više](https://oxc.rs/compatibility.html) | `oxfmt` zavisnost u `package.json` |
| ormolu | .hs | `ormolu` komanda dostupna |
Dakle, ako vaš projekat ima `prettier` u vašem `package.json`, OpenCode će ga automatski koristiti.

Expand Down
1 change: 0 additions & 1 deletion packages/web/src/content/docs/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -719,7 +719,6 @@ These environment variables enable experimental features that may change or be r
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Default timeout for bash commands in ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Max output tokens for LLM responses |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Enable file watcher for entire dir |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Enable oxfmt formatter |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Enable experimental LSP tool |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Disable file watcher |
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Enable experimental Exa features |
Expand Down
1 change: 0 additions & 1 deletion packages/web/src/content/docs/da/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,6 @@ Disse miljøvariabler muliggør eksperimentelle funktioner, der kan ændres elle
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | nummer | Standard timeout for bash-kommandoer i ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | nummer | Maks. output-tokens for LLM-svar |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Aktiver filovervågning for hele dir |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Aktiver oxfmt formatter |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Aktive eksperimenter LSP værktøj |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Deaktiver filovervågning |
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Aktive eksperimenter Exa-funktioner |
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/content/docs/da/formatters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ OpenCode leveres med flere indbyggede formatere til populære sprog og rammer. N
| nixfmt | .nix | `nixfmt` kommando tilgængelig |
| shfmt | .sh,.bash | `shfmt` kommando tilgængelig |
| pint | .php | `laravel/pint` afhængighed i `composer.json` |
| oxfmt (Eksperimentel) | .js,.jsx,.ts,.tsx | `oxfmt` afhængighed i `package.json` og en [experimental env variable flag](/docs/cli/#experimental) |
| oxfmt | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, og [mere](https://oxc.rs/compatibility.html) | `oxfmt` afhængighed i `package.json` |
| ormolu | .hs | `ormolu` kommando tilgængelig |

Så hvis dit projekt har `prettier` i din `package.json`, vil OpenCode automatisk bruge det.
Expand Down
1 change: 0 additions & 1 deletion packages/web/src/content/docs/de/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,6 @@ Diese Umgebungsvariablen ermöglichen experimentelle Funktionen, die sich änder
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | Zahl | Standard-Timeout für Bash-Befehle in ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | Zahl | Maximale Ausgabetokens für LLM-Antworten |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolescher Wert | Dateiüberwachung für das gesamte Verzeichnis aktivieren |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolescher Wert | Oxfmt-Formatierer aktivieren |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolescher Wert | Experimentelles LSP-Tool aktivieren |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolescher Wert | Dateiüberwachung deaktivieren |
| `OPENCODE_EXPERIMENTAL_EXA` | boolescher Wert | Experimentelle Exa-Funktionen aktivieren |
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/content/docs/de/formatters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ OpenCode verfügt über mehrere integrierte Formatierer für gängige Sprachen u
| nixfmt | .nix | `nixfmt`-Befehl verfügbar |
| shfmt | .sh, .bash | `shfmt`-Befehl verfügbar |
| pint | .php | `laravel/pint`-Abhängigkeit in `composer.json` |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt`-Abhängigkeit in `package.json` und einer [experimental env variable flag](/docs/cli/#experimental) |
| oxfmt | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, und [mehr](https://oxc.rs/compatibility.html) | `oxfmt`-Abhängigkeit in `package.json` |
| Ormolu | .hs | `ormolu`-Befehl verfügbar |

Wenn Ihr Projekt auch `prettier` in Ihrem `package.json` hat, wird OpenCode automatisch verwendet.
Expand Down
1 change: 0 additions & 1 deletion packages/web/src/content/docs/es/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,6 @@ Estas variables de entorno habilitan funciones experimentales que pueden cambiar
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | número | Tiempo de espera predeterminado para comandos bash en ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | número | Tokens de salida máximos para respuestas LLM |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | booleano | Habilite el observador de archivos para todo el directorio |
| `OPENCODE_EXPERIMENTAL_OXFMT` | booleano | Habilitar el formateador oxfmt |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | booleano | Habilitar herramienta experimental LSP |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | booleano | Deshabilitar el observador de archivos |
| `OPENCODE_EXPERIMENTAL_EXA` | booleano | Habilitar funciones experimentales de Exa |
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/content/docs/es/formatters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ OpenCode viene con varios formateadores integrados para lenguajes y marcos popul
| nixfmt | .nix | Comando `nixfmt` disponible |
| shfmt | .sh, .bash | Comando `shfmt` disponible |
| pint | .php | dependencia `laravel/pint` en `composer.json` |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | Dependencia de `oxfmt` en `package.json` y un [indicador de variable de entorno experimental](/docs/cli/#experimental) |
| oxfmt | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, y [más](https://oxc.rs/compatibility.html) | Dependencia de `oxfmt` en `package.json` |
| ormolu | .hs | Comando `ormolu` disponible |

Entonces, si su proyecto tiene `prettier` en su `package.json`, OpenCode lo usará automáticamente.
Expand Down
Loading
Loading