summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/file/ignore.ts63
-rw-r--r--packages/opencode/test/file/ignore.test.ts10
2 files changed, 44 insertions, 29 deletions
diff --git a/packages/opencode/src/file/ignore.ts b/packages/opencode/src/file/ignore.ts
index 912f2159e..fc0c95cad 100644
--- a/packages/opencode/src/file/ignore.ts
+++ b/packages/opencode/src/file/ignore.ts
@@ -1,28 +1,26 @@
+import { sep } from "node:path"
+
export namespace FileIgnore {
- const DEFAULT_PATTERNS = [
- // Dependencies
- "**/node_modules/**",
- "**/bower_components/**",
- "**/.pnpm-store/**",
- "**/vendor/**",
-
- // Build outputs
- "**/dist/**",
- "**/build/**",
- "**/out/**",
- "**/.next/**",
- "**/target/**", // Rust
- "**/bin/**",
- "**/obj/**", // .NET
-
- // Version control
- "**/.git/**",
- "**/.svn/**",
- "**/.hg/**",
-
- // IDE/Editor
- "**/.vscode/**",
- "**/.idea/**",
+ const FOLDERS = new Set([
+ "node_modules",
+ "bower_components",
+ ".pnpm-store",
+ "vendor",
+ "dist",
+ "build",
+ "out",
+ ".next",
+ "target",
+ "bin",
+ "obj",
+ ".git",
+ ".svn",
+ ".hg",
+ ".vscode",
+ ".idea",
+ ])
+
+ const FILES = [
"**/*.swp",
"**/*.swo",
@@ -41,22 +39,29 @@ export namespace FileIgnore {
"**/.nyc_output/**",
]
- const GLOBS = DEFAULT_PATTERNS.map((p) => new Bun.Glob(p))
+ const FILE_GLOBS = FILES.map((p) => new Bun.Glob(p))
export function match(
filepath: string,
- opts: {
+ opts?: {
extra?: Bun.Glob[]
whitelist?: Bun.Glob[]
},
) {
- for (const glob of opts.whitelist || []) {
+ for (const glob of opts?.whitelist || []) {
if (glob.match(filepath)) return false
}
- const extra = opts.extra || []
- for (const glob of [...GLOBS, ...extra]) {
+
+ const parts = filepath.split(sep)
+ for (let i = 0; i < parts.length; i++) {
+ if (FOLDERS.has(parts[i])) return true
+ }
+
+ const extra = opts?.extra || []
+ for (const glob of [...FILE_GLOBS, ...extra]) {
if (glob.match(filepath)) return true
}
+
return false
}
}
diff --git a/packages/opencode/test/file/ignore.test.ts b/packages/opencode/test/file/ignore.test.ts
new file mode 100644
index 000000000..6387ff63e
--- /dev/null
+++ b/packages/opencode/test/file/ignore.test.ts
@@ -0,0 +1,10 @@
+import { test, expect } from "bun:test"
+import { FileIgnore } from "../../src/file/ignore"
+
+test("match nested and non-nested", () => {
+ expect(FileIgnore.match("node_modules/index.js")).toBe(true)
+ expect(FileIgnore.match("node_modules")).toBe(true)
+ expect(FileIgnore.match("node_modules/")).toBe(true)
+ expect(FileIgnore.match("node_modules/bar")).toBe(true)
+ expect(FileIgnore.match("node_modules/bar/")).toBe(true)
+})