Skip to content

Commit e945ddf

Browse files
authored
chore: enforce effect simplifications (anomalyco#43979)
1 parent fa1b4ef commit e945ddf

57 files changed

Lines changed: 861 additions & 66 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/test.yml‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ jobs:
5050
- name: Setup Bun
5151
uses: ./.github/actions/setup-bun
5252

53+
- name: Test Effect simplification rules
54+
if: runner.os == 'Linux'
55+
run: bun run test:effect-simplification-rules
56+
57+
- name: Check Effect simplifications
58+
if: runner.os == 'Linux'
59+
run: bun run lint:effect-simplifications
60+
5361
- name: Configure git identity
5462
run: |
5563
git config --global user.email "bot@opencode.ai"

‎package.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"bench:devex": "bun run --cwd packages/app test:bench:devex",
1919
"lint": "oxlint",
2020
"lint:effect-patterns": "ast-grep scan -c script/ast-grep/sgconfig.yml packages/util/src packages/core/src packages/server/src packages/protocol/src packages/cli/src",
21+
"lint:effect-simplifications": "ast-grep scan -c script/ast-grep/effect-simplifications/sgconfig.yml --off=unused-suppression packages",
2122
"test:lint-rules": "ast-grep test -c script/ast-grep/sgconfig.yml",
23+
"test:effect-simplification-rules": "ast-grep test -c script/ast-grep/effect-simplifications/sgconfig.yml",
2224
"typecheck": "bun turbo typecheck --concurrency=3",
2325
"typecheck:profile": "bun script/profile-typecheck.ts",
2426
"typecheck:profile:packages": "bun script/profile-typecheck-packages.ts",

‎packages/ai/script/setup-recording-env.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ const responseError = Effect.fn("RecordingEnv.responseError")(function* (
370370
response: HttpClientResponse.HttpClientResponse,
371371
) {
372372
if (response.status >= 200 && response.status < 300) return undefined
373-
const body = yield* response.text.pipe(Effect.catch(() => Effect.succeed("")))
373+
const body = yield* response.text.pipe(Effect.orElseSucceed(() => ""))
374374
return `${response.status}${body ? `: ${body.slice(0, 180)}` : ""}`
375375
})
376376

‎packages/cli/src/config/config.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export const layer = Layer.effect(
3131
const file = path.join(global.config, "cli.json")
3232

3333
const readJson = Effect.fnUntraced(function* () {
34-
const text = yield* fs.readFileString(file).pipe(Effect.catch(() => Effect.succeed(undefined)))
34+
const text = yield* fs.readFileString(file).pipe(Effect.orElseSucceed(() => undefined))
3535
if (text === undefined) return undefined
3636
const errors: ParseError[] = []
3737
const value: any = parse(text, errors, { allowTrailingComma: true })
@@ -87,7 +87,7 @@ export const layer = Layer.effect(
8787
const next = produce(current, update)
8888
const edits = changes(current, next)
8989
if (!edits.length) return current
90-
const text = yield* fs.readFileString(file).pipe(Effect.catch(() => Effect.succeed("{}")))
90+
const text = yield* fs.readFileString(file).pipe(Effect.orElseSucceed(() => "{}"))
9191
const updated = edits.reduce(
9292
(text, edit) =>
9393
applyEdits(

‎packages/cli/src/config/migrate.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ export function migrateV1(legacy: TuiConfigV1.Info | undefined, kv: Record<strin
258258

259259
const readJson = Effect.fnUntraced(function* (target: string) {
260260
const fs = yield* FileSystem.FileSystem
261-
const text = yield* fs.readFileString(target).pipe(Effect.catch(() => Effect.succeed(undefined)))
261+
const text = yield* fs.readFileString(target).pipe(Effect.orElseSucceed(() => undefined))
262262
if (text === undefined) return undefined
263263
const errors: ParseError[] = []
264264
const value: any = parse(text, errors, { allowTrailingComma: true })

‎packages/cli/src/services/service-config.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export const read = Effect.fn("cli.service-config.read")(function* () {
119119
if (legacyConfigFile) yield* migrateConfig(legacyConfigFile, configFile)
120120
return yield* fs.readFileString(configFile).pipe(
121121
Effect.flatMap(decodeInfo),
122-
Effect.catch(() => Effect.succeed({} as Info)),
122+
Effect.orElseSucceed(() => ({}) as Info),
123123
)
124124
})
125125

‎packages/cli/src/services/updater.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const layer = Layer.effect(
4444
const values = yield* Effect.forEach(["config.json", "opencode.json", "opencode.jsonc"], (name) =>
4545
fs.readFileString(path.join(global.config, name)).pipe(
4646
Effect.map(decodePolicy),
47-
Effect.catch(() => Effect.succeed(undefined)),
47+
Effect.orElseSucceed(() => undefined),
4848
),
4949
)
5050
return values.findLast((value) => value !== undefined) ?? true
@@ -63,7 +63,7 @@ export const layer = Layer.effect(
6363
stdout: result.stdout.toString("utf8"),
6464
stderr: result.stderr.toString("utf8"),
6565
})),
66-
Effect.catch(() => Effect.succeed({ code: 1, stdout: "", stderr: "" })),
66+
Effect.orElseSucceed(() => ({ code: 1, stdout: "", stderr: "" })),
6767
)
6868
})
6969

‎packages/core/src/config.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ export const layer = (options?: Options) =>
347347
Stream.filterEffect((event) =>
348348
wellknown.entries().pipe(
349349
Effect.map((entries) => entries.some((entry) => entry.integrationID === event.data.integrationID)),
350-
Effect.catch(() => Effect.succeed(false)),
350+
Effect.orElseSucceed(() => false),
351351
),
352352
),
353353
Stream.runForEach(() =>

‎packages/core/src/config/plugin/agent.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export const Plugin = define({
5959
return yield* Effect.forEach(files, (file) =>
6060
fs.readFileStringSafe(file.filepath).pipe(
6161
Effect.map((content) => (content ? decode(file, content) : undefined)),
62-
Effect.catch(() => Effect.succeed(undefined)),
62+
Effect.orElseSucceed(() => undefined),
6363
),
6464
).pipe(Effect.map((documents) => documents.filter((document): document is Document => document !== undefined)))
6565
})
@@ -176,7 +176,7 @@ function discover(fs: FSUtil.Interface, directory: string) {
176176
),
177177
).pipe(
178178
Effect.map((files) => files.flat()),
179-
Effect.catch(() => Effect.succeed([])),
179+
Effect.orElseSucceed(() => []),
180180
)
181181
}
182182

‎packages/core/src/config/plugin/command.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ function loadDirectory(fs: FSUtil.Interface, directory: string) {
8686
return Effect.gen(function* () {
8787
const files = yield* fs
8888
.scan("{command,commands}/**/*.md", { cwd: directory, absolute: true, dot: true, symlink: true })
89-
.pipe(Effect.catch(() => Effect.succeed([] as string[])))
89+
.pipe(Effect.orElseSucceed(() => [] as string[]))
9090
return yield* Effect.forEach(files.toSorted(), (filepath) =>
9191
fs.readFileStringSafe(filepath).pipe(
9292
Effect.map((content) => (content === undefined ? undefined : decode(directory, filepath, content))),
93-
Effect.catch(() => Effect.succeed(undefined)),
93+
Effect.orElseSucceed(() => undefined),
9494
),
9595
).pipe(
9696
Effect.map((commands) =>

0 commit comments

Comments
 (0)