diff options
| author | Billy Biggs <[email protected]> | 2025-06-23 23:48:26 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-24 06:48:26 +0000 |
| commit | b47a4240ff02484ec9c80e99f4a87c3c57b87f31 (patch) | |
| tree | 6eade11012c06f5fe9b83390e51217f2c2a62584 /packages/cli/src | |
| parent | a2ed4266aaee69932a8254ccf611c95ad584a71a (diff) | |
Bug/1369 at command recursive search (#1370)
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/ui/hooks/atCommandProcessor.test.ts | 32 | ||||
| -rw-r--r-- | packages/cli/src/ui/hooks/atCommandProcessor.ts | 8 |
2 files changed, 36 insertions, 4 deletions
diff --git a/packages/cli/src/ui/hooks/atCommandProcessor.test.ts b/packages/cli/src/ui/hooks/atCommandProcessor.test.ts index 6380a187..572131af 100644 --- a/packages/cli/src/ui/hooks/atCommandProcessor.test.ts +++ b/packages/cli/src/ui/hooks/atCommandProcessor.test.ts @@ -21,6 +21,7 @@ const mockConfig = { isSandboxed: vi.fn(() => false), getFileService: vi.fn(), getFileFilteringRespectGitIgnore: vi.fn(() => true), + getEnableRecursiveFileSearch: vi.fn(() => true), } as unknown as Config; const mockReadManyFilesExecute = vi.fn(); @@ -720,4 +721,35 @@ describe('handleAtCommand', () => { expect(result.shouldProceed).toBe(true); }); }); + + describe('when recursive file search is disabled', () => { + beforeEach(() => { + vi.mocked(mockConfig.getEnableRecursiveFileSearch).mockReturnValue(false); + }); + + it('should not use glob search for a nonexistent file', async () => { + const invalidFile = 'nonexistent.txt'; + const query = `@${invalidFile}`; + + vi.mocked(fsPromises.stat).mockRejectedValue( + Object.assign(new Error('ENOENT'), { code: 'ENOENT' }), + ); + + const result = await handleAtCommand({ + query, + config: mockConfig, + addItem: mockAddItem, + onDebugMessage: mockOnDebugMessage, + messageId: 300, + signal: abortController.signal, + }); + + expect(mockGlobExecute).not.toHaveBeenCalled(); + expect(mockOnDebugMessage).toHaveBeenCalledWith( + `Glob tool not found. Path ${invalidFile} will be skipped.`, + ); + expect(result.processedQuery).toEqual([{ text: query }]); + expect(result.shouldProceed).toBe(true); + }); + }); }); diff --git a/packages/cli/src/ui/hooks/atCommandProcessor.ts b/packages/cli/src/ui/hooks/atCommandProcessor.ts index d6c5eded..3bbdce0d 100644 --- a/packages/cli/src/ui/hooks/atCommandProcessor.ts +++ b/packages/cli/src/ui/hooks/atCommandProcessor.ts @@ -210,10 +210,10 @@ export async function handleAtCommand({ resolvedSuccessfully = true; } catch (error) { if (isNodeError(error) && error.code === 'ENOENT') { - onDebugMessage( - `Path ${pathName} not found directly, attempting glob search.`, - ); - if (globTool) { + if (config.getEnableRecursiveFileSearch() && globTool) { + onDebugMessage( + `Path ${pathName} not found directly, attempting glob search.`, + ); try { const globResult = await globTool.execute( { pattern: `**/*${pathName}*`, path: config.getTargetDir() }, |
