refactor(core): Rename useSlashCompletion to useCommandCompletion (#5532)

This commit is contained in:
Sandy Tao 2025-08-04 13:35:26 -07:00 committed by GitHub
parent 37b83e05a7
commit 8da6d23688
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 141 additions and 141 deletions

View File

@ -20,9 +20,9 @@ import {
UseShellHistoryReturn,
} from '../hooks/useShellHistory.js';
import {
useSlashCompletion,
UseSlashCompletionReturn,
} from '../hooks/useSlashCompletion.js';
useCommandCompletion,
UseCommandCompletionReturn,
} from '../hooks/useCommandCompletion.js';
import {
useInputHistory,
UseInputHistoryReturn,
@ -31,7 +31,7 @@ import * as clipboardUtils from '../utils/clipboardUtils.js';
import { createMockCommandContext } from '../../test-utils/mockCommandContext.js';
vi.mock('../hooks/useShellHistory.js');
vi.mock('../hooks/useSlashCompletion.js');
vi.mock('../hooks/useCommandCompletion.js');
vi.mock('../hooks/useInputHistory.js');
vi.mock('../utils/clipboardUtils.js');
@ -86,13 +86,13 @@ const mockSlashCommands: SlashCommand[] = [
describe('InputPrompt', () => {
let props: InputPromptProps;
let mockShellHistory: UseShellHistoryReturn;
let mockSlashCompletion: UseSlashCompletionReturn;
let mockCommandCompletion: UseCommandCompletionReturn;
let mockInputHistory: UseInputHistoryReturn;
let mockBuffer: TextBuffer;
let mockCommandContext: CommandContext;
const mockedUseShellHistory = vi.mocked(useShellHistory);
const mockedUseSlashCompletion = vi.mocked(useSlashCompletion);
const mockedUseCommandCompletion = vi.mocked(useCommandCompletion);
const mockedUseInputHistory = vi.mocked(useInputHistory);
beforeEach(() => {
@ -146,7 +146,7 @@ describe('InputPrompt', () => {
};
mockedUseShellHistory.mockReturnValue(mockShellHistory);
mockSlashCompletion = {
mockCommandCompletion = {
suggestions: [],
activeSuggestionIndex: -1,
isLoadingSuggestions: false,
@ -160,7 +160,7 @@ describe('InputPrompt', () => {
setShowSuggestions: vi.fn(),
handleAutocomplete: vi.fn(),
};
mockedUseSlashCompletion.mockReturnValue(mockSlashCompletion);
mockedUseCommandCompletion.mockReturnValue(mockCommandCompletion);
mockInputHistory = {
navigateUp: vi.fn(),
@ -271,8 +271,8 @@ describe('InputPrompt', () => {
});
it('should call completion.navigateUp for both up arrow and Ctrl+P when suggestions are showing', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [
{ label: 'memory', value: 'memory' },
@ -291,15 +291,15 @@ describe('InputPrompt', () => {
stdin.write('\u0010'); // Ctrl+P
await wait();
expect(mockSlashCompletion.navigateUp).toHaveBeenCalledTimes(2);
expect(mockSlashCompletion.navigateDown).not.toHaveBeenCalled();
expect(mockCommandCompletion.navigateUp).toHaveBeenCalledTimes(2);
expect(mockCommandCompletion.navigateDown).not.toHaveBeenCalled();
unmount();
});
it('should call completion.navigateDown for both down arrow and Ctrl+N when suggestions are showing', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [
{ label: 'memory', value: 'memory' },
@ -317,15 +317,15 @@ describe('InputPrompt', () => {
stdin.write('\u000E'); // Ctrl+N
await wait();
expect(mockSlashCompletion.navigateDown).toHaveBeenCalledTimes(2);
expect(mockSlashCompletion.navigateUp).not.toHaveBeenCalled();
expect(mockCommandCompletion.navigateDown).toHaveBeenCalledTimes(2);
expect(mockCommandCompletion.navigateUp).not.toHaveBeenCalled();
unmount();
});
it('should NOT call completion navigation when suggestions are not showing', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
});
props.buffer.setText('some text');
@ -342,8 +342,8 @@ describe('InputPrompt', () => {
stdin.write('\u000E'); // Ctrl+N
await wait();
expect(mockSlashCompletion.navigateUp).not.toHaveBeenCalled();
expect(mockSlashCompletion.navigateDown).not.toHaveBeenCalled();
expect(mockCommandCompletion.navigateUp).not.toHaveBeenCalled();
expect(mockCommandCompletion.navigateDown).not.toHaveBeenCalled();
unmount();
});
@ -472,8 +472,8 @@ describe('InputPrompt', () => {
it('should complete a partial parent command', async () => {
// SCENARIO: /mem -> Tab
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'memory', value: 'memory', description: '...' }],
activeSuggestionIndex: 0,
@ -486,14 +486,14 @@ describe('InputPrompt', () => {
stdin.write('\t'); // Press Tab
await wait();
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
unmount();
});
it('should append a sub-command when the parent command is already complete', async () => {
// SCENARIO: /memory -> Tab (to accept 'add')
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [
{ label: 'show', value: 'show' },
@ -509,14 +509,14 @@ describe('InputPrompt', () => {
stdin.write('\t'); // Press Tab
await wait();
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(1);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(1);
unmount();
});
it('should handle the "backspace" edge case correctly', async () => {
// SCENARIO: /memory -> Backspace -> /memory -> Tab (to accept 'show')
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [
{ label: 'show', value: 'show' },
@ -534,14 +534,14 @@ describe('InputPrompt', () => {
await wait();
// It should NOT become '/show'. It should correctly become '/memory show'.
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
unmount();
});
it('should complete a partial argument for a command', async () => {
// SCENARIO: /chat resume fi- -> Tab
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'fix-foo', value: 'fix-foo' }],
activeSuggestionIndex: 0,
@ -554,13 +554,13 @@ describe('InputPrompt', () => {
stdin.write('\t'); // Press Tab
await wait();
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
unmount();
});
it('should autocomplete on Enter when suggestions are active, without submitting', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'memory', value: 'memory' }],
activeSuggestionIndex: 0,
@ -574,7 +574,7 @@ describe('InputPrompt', () => {
await wait();
// The app should autocomplete the text, NOT submit.
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(props.onSubmit).not.toHaveBeenCalled();
unmount();
@ -590,8 +590,8 @@ describe('InputPrompt', () => {
},
];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'help', value: 'help' }],
activeSuggestionIndex: 0,
@ -604,7 +604,7 @@ describe('InputPrompt', () => {
stdin.write('\t'); // Press Tab for autocomplete
await wait();
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
unmount();
});
@ -622,8 +622,8 @@ describe('InputPrompt', () => {
});
it('should submit directly on Enter when isPerfectMatch is true', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
isPerfectMatch: true,
});
@ -640,8 +640,8 @@ describe('InputPrompt', () => {
});
it('should submit directly on Enter when a complete leaf command is typed', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
isPerfectMatch: false, // Added explicit isPerfectMatch false
});
@ -658,8 +658,8 @@ describe('InputPrompt', () => {
});
it('should autocomplete an @-path on Enter without submitting', async () => {
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'index.ts', value: 'index.ts' }],
activeSuggestionIndex: 0,
@ -672,7 +672,7 @@ describe('InputPrompt', () => {
stdin.write('\r');
await wait();
expect(mockSlashCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(mockCommandCompletion.handleAutocomplete).toHaveBeenCalledWith(0);
expect(props.onSubmit).not.toHaveBeenCalled();
unmount();
});
@ -704,7 +704,7 @@ describe('InputPrompt', () => {
await wait();
expect(props.buffer.setText).toHaveBeenCalledWith('');
expect(mockSlashCompletion.resetCompletionState).toHaveBeenCalled();
expect(mockCommandCompletion.resetCompletionState).toHaveBeenCalled();
expect(props.onSubmit).not.toHaveBeenCalled();
unmount();
});
@ -728,8 +728,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@src/components'];
mockBuffer.cursor = [0, 15];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'Button.tsx', value: 'Button.tsx' }],
});
@ -738,7 +738,7 @@ describe('InputPrompt', () => {
await wait();
// Verify useCompletion was called with correct signature
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -756,8 +756,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['/memory'];
mockBuffer.cursor = [0, 7];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'show', value: 'show' }],
});
@ -765,7 +765,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -783,8 +783,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@src/file.ts hello'];
mockBuffer.cursor = [0, 18];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
suggestions: [],
});
@ -792,7 +792,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -810,8 +810,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['/memory add'];
mockBuffer.cursor = [0, 11];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
suggestions: [],
});
@ -819,7 +819,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -837,8 +837,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['hello world'];
mockBuffer.cursor = [0, 5];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
suggestions: [],
});
@ -846,7 +846,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -864,8 +864,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['first line', '/memory'];
mockBuffer.cursor = [1, 7];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
suggestions: [],
});
@ -874,7 +874,7 @@ describe('InputPrompt', () => {
await wait();
// Verify useCompletion was called with the buffer
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -892,8 +892,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['/memory'];
mockBuffer.cursor = [0, 7];
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'show', value: 'show' }],
});
@ -901,7 +901,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -920,8 +920,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@src/file👍.txt'];
mockBuffer.cursor = [0, 14]; // After the emoji character
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'file👍.txt', value: 'file👍.txt' }],
});
@ -929,7 +929,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -948,8 +948,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@src/file👍.txt hello'];
mockBuffer.cursor = [0, 20]; // After the space
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
suggestions: [],
});
@ -957,7 +957,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -976,8 +976,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@src/my\\ file.txt'];
mockBuffer.cursor = [0, 16]; // After the escaped space and filename
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'my file.txt', value: 'my file.txt' }],
});
@ -985,7 +985,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -1004,8 +1004,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@path/my\\ file.txt hello'];
mockBuffer.cursor = [0, 24]; // After "hello"
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: false,
suggestions: [],
});
@ -1013,7 +1013,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -1032,8 +1032,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@docs/my\\ long\\ file\\ name.md'];
mockBuffer.cursor = [0, 29]; // At the end
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [
{ label: 'my long file name.md', value: 'my long file name.md' },
@ -1043,7 +1043,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -1062,8 +1062,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['/memory\\ test'];
mockBuffer.cursor = [0, 13]; // At the end
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [{ label: 'test-command', value: 'test-command' }],
});
@ -1071,7 +1071,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),
@ -1090,8 +1090,8 @@ describe('InputPrompt', () => {
mockBuffer.lines = ['@' + path.join('files', 'emoji\\ 👍\\ test.txt')];
mockBuffer.cursor = [0, 25]; // After the escaped space and emoji
mockedUseSlashCompletion.mockReturnValue({
...mockSlashCompletion,
mockedUseCommandCompletion.mockReturnValue({
...mockCommandCompletion,
showSuggestions: true,
suggestions: [
{ label: 'emoji 👍 test.txt', value: 'emoji 👍 test.txt' },
@ -1101,7 +1101,7 @@ describe('InputPrompt', () => {
const { unmount } = render(<InputPrompt {...props} />);
await wait();
expect(mockedUseSlashCompletion).toHaveBeenCalledWith(
expect(mockedUseCommandCompletion).toHaveBeenCalledWith(
mockBuffer,
['/test/project/src'],
path.join('test', 'project', 'src'),

View File

@ -15,7 +15,7 @@ import chalk from 'chalk';
import stringWidth from 'string-width';
import { useShellHistory } from '../hooks/useShellHistory.js';
import { useReverseSearchCompletion } from '../hooks/useReverseSearchCompletion.js';
import { useSlashCompletion } from '../hooks/useSlashCompletion.js';
import { useCommandCompletion } from '../hooks/useCommandCompletion.js';
import { useKeypress, Key } from '../hooks/useKeypress.js';
import { CommandContext, SlashCommand } from '../commands/types.js';
import { Config } from '@google/gemini-cli-core';
@ -78,7 +78,7 @@ export const InputPrompt: React.FC<InputPromptProps> = ({
const shellHistory = useShellHistory(config.getProjectRoot());
const historyData = shellHistory.history;
const completion = useSlashCompletion(
const completion = useCommandCompletion(
buffer,
dirs,
config.getTargetDir(),

View File

@ -8,7 +8,7 @@
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
import { renderHook, act, waitFor } from '@testing-library/react';
import { useSlashCompletion } from './useSlashCompletion.js';
import { useCommandCompletion } from './useCommandCompletion.js';
import * as fs from 'fs/promises';
import * as path from 'path';
import * as os from 'os';
@ -16,7 +16,7 @@ import { CommandContext, SlashCommand } from '../commands/types.js';
import { Config, FileDiscoveryService } from '@google/gemini-cli-core';
import { useTextBuffer } from '../components/shared/text-buffer.js';
describe('useSlashCompletion', () => {
describe('useCommandCompletion', () => {
let testRootDir: string;
let mockConfig: Config;
@ -82,7 +82,7 @@ describe('useSlashCompletion', () => {
{ name: 'dummy', description: 'dummy' },
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest(''),
testDirs,
testRootDir,
@ -113,7 +113,7 @@ describe('useSlashCompletion', () => {
const { result, rerender } = renderHook(
({ text }) => {
const textBuffer = useTextBufferForTest(text);
return useSlashCompletion(
return useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -145,7 +145,7 @@ describe('useSlashCompletion', () => {
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/help'),
testDirs,
testRootDir,
@ -184,7 +184,7 @@ describe('useSlashCompletion', () => {
{ name: 'dummy', description: 'dummy' },
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest(''),
testDirs,
testRootDir,
@ -207,7 +207,7 @@ describe('useSlashCompletion', () => {
{ name: 'dummy', description: 'dummy' },
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest(''),
testDirs,
testRootDir,
@ -234,7 +234,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/h'),
testDirs,
testRootDir,
@ -264,7 +264,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/h'),
testDirs,
testRootDir,
@ -295,7 +295,7 @@ describe('useSlashCompletion', () => {
{ name: 'chat', description: 'Manage chat' },
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/'),
testDirs,
testRootDir,
@ -343,7 +343,7 @@ describe('useSlashCompletion', () => {
})) as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/command'),
testDirs,
testRootDir,
@ -403,7 +403,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/'),
testDirs,
testRootDir,
@ -426,7 +426,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/mem'),
testDirs,
testRootDir,
@ -450,7 +450,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/usag'), // part of the word "usage"
testDirs,
testRootDir,
@ -477,7 +477,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/clear'), // No trailing space
testDirs,
testRootDir,
@ -509,7 +509,7 @@ describe('useSlashCompletion', () => {
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest(query),
testDirs,
testRootDir,
@ -530,7 +530,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/clear '),
testDirs,
testRootDir,
@ -551,7 +551,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/unknown-command'),
testDirs,
testRootDir,
@ -585,7 +585,7 @@ describe('useSlashCompletion', () => {
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/memory'), // Note: no trailing space
testDirs,
testRootDir,
@ -623,7 +623,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/memory'),
testDirs,
testRootDir,
@ -659,7 +659,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/memory a'),
testDirs,
testRootDir,
@ -691,7 +691,7 @@ describe('useSlashCompletion', () => {
},
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/memory dothisnow'),
testDirs,
testRootDir,
@ -734,7 +734,7 @@ describe('useSlashCompletion', () => {
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/chat resume my-ch'),
testDirs,
testRootDir,
@ -778,7 +778,7 @@ describe('useSlashCompletion', () => {
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/chat resume '),
testDirs,
testRootDir,
@ -813,7 +813,7 @@ describe('useSlashCompletion', () => {
] as unknown as SlashCommand[];
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('/chat resume '),
testDirs,
testRootDir,
@ -843,7 +843,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'README.md');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@s'),
testDirs,
testRootDir,
@ -879,7 +879,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'src', 'index.ts');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@src/comp'),
testDirs,
testRootDir,
@ -907,7 +907,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'src', 'index.ts');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@.'),
testDirs,
testRootDir,
@ -941,7 +941,7 @@ describe('useSlashCompletion', () => {
await createEmptyDir('dist');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@d'),
testDirs,
testRootDir,
@ -969,7 +969,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'README.md');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@'),
testDirs,
testRootDir,
@ -1004,7 +1004,7 @@ describe('useSlashCompletion', () => {
.mockImplementation(() => {});
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@'),
testDirs,
testRootDir,
@ -1037,7 +1037,7 @@ describe('useSlashCompletion', () => {
await createEmptyDir('data');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@d'),
testDirs,
testRootDir,
@ -1073,7 +1073,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'README.md');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@'),
testDirs,
testRootDir,
@ -1108,7 +1108,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'temp', 'temp.log');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@t'),
testDirs,
testRootDir,
@ -1153,7 +1153,7 @@ describe('useSlashCompletion', () => {
const { result } = renderHook(() => {
const textBuffer = useTextBufferForTest('/mem');
const completion = useSlashCompletion(
const completion = useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -1197,7 +1197,7 @@ describe('useSlashCompletion', () => {
const { result } = renderHook(() => {
const textBuffer = useTextBufferForTest('/memory');
const completion = useSlashCompletion(
const completion = useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -1243,7 +1243,7 @@ describe('useSlashCompletion', () => {
const { result } = renderHook(() => {
const textBuffer = useTextBufferForTest('/?');
const completion = useSlashCompletion(
const completion = useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -1272,7 +1272,7 @@ describe('useSlashCompletion', () => {
it('should complete a file path', () => {
const { result } = renderHook(() => {
const textBuffer = useTextBufferForTest('@src/fi');
const completion = useSlashCompletion(
const completion = useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -1302,7 +1302,7 @@ describe('useSlashCompletion', () => {
const { result } = renderHook(() => {
const textBuffer = useTextBufferForTest(text, cursorOffset);
const completion = useSlashCompletion(
const completion = useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -1331,7 +1331,7 @@ describe('useSlashCompletion', () => {
const { result } = renderHook(() => {
const textBuffer = useTextBufferForTest(text);
const completion = useSlashCompletion(
const completion = useCommandCompletion(
textBuffer,
testDirs,
testRootDir,
@ -1363,7 +1363,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'backup[old].txt');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@my'),
testDirs,
testRootDir,
@ -1390,7 +1390,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'script(v2).sh');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@doc'),
testDirs,
testRootDir,
@ -1417,7 +1417,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'config[dev].json');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@backup'),
testDirs,
testRootDir,
@ -1444,7 +1444,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'data & config {prod}.json');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@my'),
testDirs,
testRootDir,
@ -1477,7 +1477,7 @@ describe('useSlashCompletion', () => {
);
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@projects/my'),
testDirs,
testRootDir,
@ -1512,7 +1512,7 @@ describe('useSlashCompletion', () => {
);
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@deep/nested/special'),
testDirs,
testRootDir,
@ -1542,7 +1542,7 @@ describe('useSlashCompletion', () => {
await createEmptyDir('data & logs');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@'),
testDirs,
testRootDir,
@ -1583,7 +1583,7 @@ describe('useSlashCompletion', () => {
await createTestFile('', 'important!.md');
const { result } = renderHook(() =>
useSlashCompletion(
useCommandCompletion(
useTextBufferForTest('@'),
testDirs,
testRootDir,

View File

@ -28,7 +28,7 @@ import { isSlashCommand } from '../utils/commandUtils.js';
import { toCodePoints } from '../utils/textUtils.js';
import { useCompletion } from './useCompletion.js';
export interface UseSlashCompletionReturn {
export interface UseCommandCompletionReturn {
suggestions: Suggestion[];
activeSuggestionIndex: number;
visibleStartIndex: number;
@ -43,7 +43,7 @@ export interface UseSlashCompletionReturn {
handleAutocomplete: (indexToUse: number) => void;
}
export function useSlashCompletion(
export function useCommandCompletion(
buffer: TextBuffer,
dirs: readonly string[],
cwd: string,
@ -51,7 +51,7 @@ export function useSlashCompletion(
commandContext: CommandContext,
reverseSearchActive: boolean = false,
config?: Config,
): UseSlashCompletionReturn {
): UseCommandCompletionReturn {
const {
suggestions,
activeSuggestionIndex,