diff --git a/extensions/cli/package.json b/extensions/cli/package.json index e717177975b..5debd98e555 100644 --- a/extensions/cli/package.json +++ b/extensions/cli/package.json @@ -46,6 +46,7 @@ "dependencies": { "@sentry/profiling-node": "^9.43.0", "fdir": "^6.4.2", + "find-up": "^8.0.0", "fzf": "^0.5.2", "js-yaml": "^4.1.1" }, @@ -87,6 +88,7 @@ "@vitest/ui": "^3.2.4", "@workos-inc/node": "^7.45.0", "chalk": "^5.4.1", + "clipboardy": "^4.0.0", "commander": "^14.0.0", "conventional-changelog-conventionalcommits": "^9.1.0", "core": "file:../../core", @@ -100,7 +102,6 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-unused-imports": "^4.1.4", "execa": "^9.6.0", - "clipboardy": "^4.0.0", "express": "^5.1.0", "glob": "^11.0.3", "gpt-tokenizer": "^3.0.1", diff --git a/extensions/cli/src/tools/searchCode.ts b/extensions/cli/src/tools/searchCode.ts index af9e78756f3..9dd72713b69 100644 --- a/extensions/cli/src/tools/searchCode.ts +++ b/extensions/cli/src/tools/searchCode.ts @@ -3,11 +3,26 @@ import * as fs from "fs"; import * as util from "util"; import { ContinueError, ContinueErrorReason } from "core/util/errors.js"; +import { findUp } from "find-up"; import { Tool } from "./types.js"; const execPromise = util.promisify(child_process.exec); +async function getGitignorePatterns() { + const gitIgnorePath = await findUp(".gitignore"); + if (!gitIgnorePath) return []; + const content = fs.readFileSync(gitIgnorePath, "utf-8"); + const ignorePatterns = []; + for (let line of content.trim().split("\n")) { + line = line.trim(); + if (line.startsWith("#") || line === "") continue; // ignore comments and empty line + if (line.startsWith("!")) continue; // ignore negated ignores + ignorePatterns.push(line); + } + return ignorePatterns; +} + // Default maximum number of results to display const DEFAULT_MAX_RESULTS = 100; const MAX_LINE_LENGTH = 1000; @@ -70,6 +85,10 @@ export const searchCodeTool: Tool = { command += ` -g "${args.file_pattern}"`; } + for (const ignorePattern of await getGitignorePatterns()) { + command += ` -g "!${ignorePattern}"`; + } + command += ` "${searchPath}"`; try { const { stdout, stderr } = await execPromise(command);