mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-30 12:40:44 +00:00
fix: @ file search stops working after selecting a slash command (#2518)
This commit is contained in:
parent
26e0128dc6
commit
3b2d50fad6
2 changed files with 100 additions and 8 deletions
|
|
@ -417,6 +417,95 @@ describe('useCommandCompletion', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Completion mode detection', () => {
|
||||
it('should switch to AT mode when typing @ after a slash command (#2518)', async () => {
|
||||
setupMocks({
|
||||
atSuggestions: [{ label: 'src/file.txt', value: 'src/file.txt' }],
|
||||
});
|
||||
|
||||
const text = '/qc:create-issue @file';
|
||||
renderHook(() =>
|
||||
useCommandCompletion(
|
||||
useTextBufferForTest(text),
|
||||
testDirs,
|
||||
testRootDir,
|
||||
[],
|
||||
mockCommandContext,
|
||||
false,
|
||||
mockConfig,
|
||||
),
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useAtCompletion).toHaveBeenLastCalledWith(
|
||||
expect.objectContaining({
|
||||
enabled: true,
|
||||
pattern: 'file',
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('should remain in SLASH mode when no @ is typed after slash command', async () => {
|
||||
setupMocks({
|
||||
slashSuggestions: [{ label: 'help', value: 'help' }],
|
||||
});
|
||||
|
||||
const text = '/help';
|
||||
renderHook(() =>
|
||||
useCommandCompletion(
|
||||
useTextBufferForTest(text),
|
||||
testDirs,
|
||||
testRootDir,
|
||||
[],
|
||||
mockCommandContext,
|
||||
false,
|
||||
mockConfig,
|
||||
),
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useSlashCompletion).toHaveBeenLastCalledWith(
|
||||
expect.objectContaining({
|
||||
enabled: true,
|
||||
query: '/help',
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('should complete a file path when @ appears after a slash command', async () => {
|
||||
setupMocks({
|
||||
atSuggestions: [{ label: 'src/index.ts', value: 'src/index.ts' }],
|
||||
});
|
||||
|
||||
const text = '/review @src/ind';
|
||||
const { result } = renderHook(() => {
|
||||
const textBuffer = useTextBufferForTest(text);
|
||||
const completion = useCommandCompletion(
|
||||
textBuffer,
|
||||
testDirs,
|
||||
testRootDir,
|
||||
[],
|
||||
mockCommandContext,
|
||||
false,
|
||||
mockConfig,
|
||||
);
|
||||
return { ...completion, textBuffer };
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
expect(result.current.suggestions.length).toBe(1);
|
||||
});
|
||||
|
||||
act(() => {
|
||||
result.current.handleAutocomplete(0);
|
||||
});
|
||||
|
||||
expect(result.current.textBuffer.text).toBe('/review @src/index.ts ');
|
||||
});
|
||||
});
|
||||
|
||||
describe('handleAutocomplete', () => {
|
||||
it('should complete a partial command', async () => {
|
||||
setupMocks({
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue