# Fix: Inconsistent Case-Sensitivity in GrepTool (#26235)

Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
This commit is contained in:
gemini-cli[bot]
2026-04-29 22:59:58 +00:00
committed by GitHub
parent 49988fc05c
commit fa1a7c10bd
2 changed files with 29 additions and 1 deletions
+28
View File
@@ -314,6 +314,34 @@ describe('GrepTool', () => {
);
}, 30000);
it('should pass -i flag to system grep for case-insensitivity', async () => {
vi.mocked(execStreaming).mockImplementationOnce(() =>
createLineGenerator(['fileA.txt:1:hello world']),
);
const params: GrepToolParams = { pattern: 'HELLO' };
const invocation = grepTool.build(params) as unknown as {
isCommandAvailable: (command: string) => Promise<boolean>;
execute: (options: ExecuteOptions) => Promise<ToolResult>;
};
// Force system grep strategy by mocking isCommandAvailable and ensuring git grep is not used
invocation.isCommandAvailable = vi.fn(async (command: string) => {
if (command === 'git') return false;
if (command === 'grep') return true;
return false;
});
await invocation.execute({ abortSignal });
expect(execStreaming).toHaveBeenCalledWith(
'grep',
expect.arrayContaining(['-i']),
expect.objectContaining({
cwd: expect.any(String),
}),
);
});
it('should throw an error if params are invalid', async () => {
const params = { dir_path: '.' } as unknown as GrepToolParams; // Invalid: pattern missing
expect(() => grepTool.build(params)).toThrow(
+1 -1
View File
@@ -465,7 +465,7 @@ class GrepToolInvocation extends BaseToolInvocation<
const grepAvailable = await this.isCommandAvailable('grep');
if (grepAvailable) {
strategyUsed = 'system grep';
const grepArgs = ['-r', '-n', '-H', '-E', '-I'];
const grepArgs = ['-r', '-n', '-H', '-E', '-I', '-i'];
// Extract directory names from exclusion patterns for grep --exclude-dir
const globExcludes = this.fileExclusions.getGlobExcludes();
const commonExcludes = globExcludes