feat: Improve @-command file path completion with fzf integration (#5650)

Co-authored-by: Jacob Richman <jacob314@gmail.com>
This commit is contained in:
DevMassive
2025-08-07 08:41:04 +09:00
committed by GitHub
parent 4782113ceb
commit 9ac3e8b79e
5 changed files with 49 additions and 2 deletions

View File

@@ -11,6 +11,7 @@ import picomatch from 'picomatch';
import { Ignore } from './ignore.js';
import { ResultCache } from './result-cache.js';
import * as cache from './crawlCache.js';
import { Fzf, FzfResultItem } from 'fzf';
export type FileSearchOptions = {
projectRoot: string;
@@ -77,6 +78,18 @@ export async function filter(
return results;
}
/**
* Filters a list of paths based on a given pattern using fzf.
* @param allPaths The list of all paths to filter.
* @param pattern The fzf pattern to filter by.
* @returns The filtered and sorted list of paths.
*/
function filterByFzf(allPaths: string[], pattern: string) {
return new Fzf(allPaths)
.find(pattern)
.map((entry: FzfResultItem) => entry.item);
}
export type SearchOptions = {
signal?: AbortSignal;
maxResults?: number;
@@ -137,7 +150,9 @@ export class FileSearch {
filteredCandidates = candidates;
} else {
// Apply the user's picomatch pattern filter
filteredCandidates = await filter(candidates, pattern, options.signal);
filteredCandidates = pattern.includes('*')
? await filter(candidates, pattern, options.signal)
: filterByFzf(this.allFiles, pattern);
this.resultCache!.set(pattern, filteredCandidates);
}