Просмотр исходного кода

glob tool should respect .gitignore

Dax Raad 8 месяцев назад
Родитель
Сommit
f19c6b05f2
2 измененных файлов с 10 добавлено и 4 удалено
  1. 5 2
      packages/opencode/src/external/ripgrep.ts
  2. 5 2
      packages/opencode/src/tool/glob.ts

+ 5 - 2
packages/opencode/src/external/ripgrep.ts

@@ -116,14 +116,17 @@ export namespace Ripgrep {
   export async function files(input: {
     cwd: string
     query?: string
+    glob?: string
     limit?: number
   }) {
-    const commands = [`${await filepath()} --files --hidden --glob='!.git/*'`]
+    const commands = [
+      `${await filepath()} --files --hidden --glob='!.git/*' ${input.glob ? `--glob='${input.glob}'` : ``}`,
+    ]
     if (input.query)
       commands.push(`${await Fzf.filepath()} --filter=${input.query}`)
     if (input.limit) commands.push(`head -n ${input.limit}`)
     const joined = commands.join(" | ")
-    const result = await $`${{ raw: joined }}`.cwd(input.cwd).text()
+    const result = await $`${{ raw: joined }}`.cwd(input.cwd).nothrow().text()
     return result.split("\n").filter(Boolean)
   }
 }

+ 5 - 2
packages/opencode/src/tool/glob.ts

@@ -3,6 +3,7 @@ import path from "path"
 import { Tool } from "./tool"
 import { App } from "../app/app"
 import DESCRIPTION from "./glob.txt"
+import { Ripgrep } from "../external/ripgrep"
 
 export const GlobTool = Tool.define({
   id: "glob",
@@ -24,10 +25,12 @@ export const GlobTool = Tool.define({
       : path.resolve(app.path.cwd, search)
 
     const limit = 100
-    const glob = new Bun.Glob(params.pattern)
     const files = []
     let truncated = false
-    for await (const file of glob.scan({ cwd: search, dot: true })) {
+    for (const file of await Ripgrep.files({
+      cwd: search,
+      glob: params.pattern,
+    })) {
       if (files.length >= limit) {
         truncated = true
         break