diff --git a/packages/core/src/ripgrep.ts b/packages/core/src/ripgrep.ts index 7e32ddb6038a..496413c04b14 100644 --- a/packages/core/src/ripgrep.ts +++ b/packages/core/src/ripgrep.ts @@ -163,6 +163,7 @@ const layer = Layer.effect( ...(input.hidden ? ["--hidden"] : []), ...(input.follow ? ["--follow"] : []), `--glob=${input.pattern}`, + ...(input.hidden ? [] : ["--glob=!**/.*"]), "--glob=!**/.git/**", ".", ], diff --git a/packages/opencode/test/tool/glob.test.ts b/packages/opencode/test/tool/glob.test.ts index 018b1a0b9a20..e047183de6de 100644 --- a/packages/opencode/test/tool/glob.test.ts +++ b/packages/opencode/test/tool/glob.test.ts @@ -106,6 +106,25 @@ describe("tool.glob", () => { }), ) + it.instance("excludes hidden files by default", () => + Effect.gen(function* () { + const test = yield* TestInstance + yield* Effect.promise(() => Bun.write(path.join(test.directory, "visible.ts"), "export const visible = 1\n")) + yield* Effect.promise(() => Bun.write(path.join(test.directory, ".hidden.ts"), "export const hidden = 1\n")) + const info = yield* GlobTool + const glob = yield* info.init() + const result = yield* glob.execute( + { + pattern: "**/*.ts", + path: test.directory, + }, + ctx, + ) + expect(result.output).toContain(path.join(test.directory, "visible.ts")) + expect(result.output).not.toContain(path.join(test.directory, ".hidden.ts")) + }), + ) + it.instance("rejects exact file paths", () => Effect.gen(function* () { const test = yield* TestInstance