fix: Enable disableFuzzySearch config option propagation (#7002)

Co-authored-by: Jacob Richman <jacob314@gmail.com>
This commit is contained in:
Bryant Chandler
2025-08-27 08:27:41 -07:00
committed by GitHub
parent 4c3ec1f0cc
commit 99a28e6b6a
2 changed files with 16 additions and 8 deletions

View File

@@ -532,6 +532,7 @@ export async function loadCliConfig(
respectGeminiIgnore: settings.fileFiltering?.respectGeminiIgnore,
enableRecursiveFileSearch:
settings.fileFiltering?.enableRecursiveFileSearch,
disableFuzzySearch: settings.fileFiltering?.disableFuzzySearch,
},
checkpointing: argv.checkpointing || settings.checkpointing?.enabled,
proxy:

View File

@@ -101,6 +101,7 @@ class RecursiveFileSearch implements FileSearch {
async initialize(): Promise<void> {
this.ignore = loadIgnoreRules(this.options);
this.allFiles = await crawl({
crawlDirectory: this.options.projectRoot,
cwd: this.options.projectRoot,
@@ -116,7 +117,11 @@ class RecursiveFileSearch implements FileSearch {
pattern: string,
options: SearchOptions = {},
): Promise<string[]> {
if (!this.resultCache || !this.fzf || !this.ignore) {
if (
!this.resultCache ||
(!this.fzf && !this.options.disableFuzzySearch) ||
!this.ignore
) {
throw new Error('Engine not initialized. Call initialize() first.');
}
@@ -131,7 +136,7 @@ class RecursiveFileSearch implements FileSearch {
filteredCandidates = candidates;
} else {
let shouldCache = true;
if (pattern.includes('*') || this.options.disableFuzzySearch) {
if (pattern.includes('*') || !this.fzf) {
filteredCandidates = await filter(candidates, pattern, options.signal);
} else {
filteredCandidates = await this.fzf
@@ -175,12 +180,14 @@ class RecursiveFileSearch implements FileSearch {
private buildResultCache(): void {
this.resultCache = new ResultCache(this.allFiles);
// The v1 algorithm is much faster since it only looks at the first
// occurence of the pattern. We use it for search spaces that have >20k
// files, because the v2 algorithm is just too slow in those cases.
this.fzf = new AsyncFzf(this.allFiles, {
fuzzy: this.allFiles.length > 20000 ? 'v1' : 'v2',
});
if (!this.options.disableFuzzySearch) {
// The v1 algorithm is much faster since it only looks at the first
// occurence of the pattern. We use it for search spaces that have >20k
// files, because the v2 algorithm is just too slow in those cases.
this.fzf = new AsyncFzf(this.allFiles, {
fuzzy: this.allFiles.length > 20000 ? 'v1' : 'v2',
});
}
}
}