From 416813452eafd4b9497fe7f4b36d5000b51c969d Mon Sep 17 00:00:00 2001 From: Miguel Solorio Date: Wed, 14 May 2025 16:01:29 -0700 Subject: Improvements to suggestions & slash commands (#344) Co-authored-by: N. Taylor Mullen --- packages/cli/src/ui/hooks/useCompletion.ts | 38 +++++++++++++++++++----------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'packages/cli/src/ui/hooks/useCompletion.ts') diff --git a/packages/cli/src/ui/hooks/useCompletion.ts b/packages/cli/src/ui/hooks/useCompletion.ts index 1c693f71..622dc4c4 100644 --- a/packages/cli/src/ui/hooks/useCompletion.ts +++ b/packages/cli/src/ui/hooks/useCompletion.ts @@ -119,20 +119,30 @@ export function useCompletion( // --- Handle Slash Command Completion --- if (trimmedQuery.startsWith('/')) { const partialCommand = trimmedQuery.substring(1); - const commands = slashCommands - .map((cmd) => cmd.name) - .concat( - slashCommands - .map((cmd) => cmd.altName) - .filter((cmd) => cmd !== undefined), - ); - - const filteredSuggestions = commands - .filter((name) => name.startsWith(partialCommand)) - // Filter out ? and any other single character commands - .filter((name) => name.length > 1) - .map((name) => ({ label: name, value: name })) - .sort(); + const filteredSuggestions = slashCommands + .filter( + (cmd) => + cmd.name.startsWith(partialCommand) || + cmd.altName?.startsWith(partialCommand), + ) + // Filter out ? and any other single character commands unless it's the only char + .filter((cmd) => { + const nameMatch = cmd.name.startsWith(partialCommand); + const altNameMatch = cmd.altName?.startsWith(partialCommand); + if (partialCommand.length === 1) { + return nameMatch || altNameMatch; // Allow single char match if query is single char + } + return ( + (nameMatch && cmd.name.length > 1) || + (altNameMatch && cmd.altName && cmd.altName.length > 1) + ); + }) + .map((cmd) => ({ + label: cmd.name, // Always show the main name as label + value: cmd.name, // Value should be the main command name for execution + description: cmd.description, + })) + .sort((a, b) => a.label.localeCompare(b.label)); setSuggestions(filteredSuggestions); setShowSuggestions(filteredSuggestions.length > 0); -- cgit v1.2.3