diff --git a/packages/amazonq/.changes/next-release/Bug Fix-316fb610-0ea9-40d1-bdb7-d371a6be4a4e.json b/packages/amazonq/.changes/next-release/Bug Fix-316fb610-0ea9-40d1-bdb7-d371a6be4a4e.json new file mode 100644 index 00000000000..1a9e5c32e6d --- /dev/null +++ b/packages/amazonq/.changes/next-release/Bug Fix-316fb610-0ea9-40d1-bdb7-d371a6be4a4e.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Let Enter invoke auto completion more consistently" +} diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts index f6e080453f0..9020deac824 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -241,6 +241,12 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem return [] } + const isAutoTrigger = context.triggerKind === InlineCompletionTriggerKind.Automatic + if (isAutoTrigger && !CodeSuggestionsState.instance.isSuggestionsEnabled()) { + // return early when suggestions are disabled with auto trigger + return [] + } + // yield event loop to let the document listen catch updates await sleep(1) // prevent user deletion invoking auto trigger @@ -254,12 +260,6 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem try { const t0 = performance.now() vsCodeState.isRecommendationsActive = true - const isAutoTrigger = context.triggerKind === InlineCompletionTriggerKind.Automatic - if (isAutoTrigger && !CodeSuggestionsState.instance.isSuggestionsEnabled()) { - // return early when suggestions are disabled with auto trigger - return [] - } - // handling previous session const prevSession = this.sessionManager.getActiveSession() const prevSessionId = prevSession?.sessionId diff --git a/packages/amazonq/src/app/inline/documentEventListener.ts b/packages/amazonq/src/app/inline/documentEventListener.ts index 4e60b595ce2..36f65dc7331 100644 --- a/packages/amazonq/src/app/inline/documentEventListener.ts +++ b/packages/amazonq/src/app/inline/documentEventListener.ts @@ -21,6 +21,11 @@ export class DocumentEventListener { this.lastDocumentChangeEventMap.clear() } this.lastDocumentChangeEventMap.set(e.document.uri.fsPath, { event: e, timestamp: performance.now() }) + // The VS Code provideInlineCompletionCallback may not trigger when Enter is pressed, especially in Python files + // manually make this trigger. In case of duplicate, the provideInlineCompletionCallback is already debounced + if (this.isEnter(e) && vscode.window.activeTextEditor) { + void vscode.commands.executeCommand('editor.action.inlineSuggest.trigger') + } } }) } @@ -47,4 +52,18 @@ export class DocumentEventListener { this.documentChangeListener.dispose() } } + + private isEnter(e: vscode.TextDocumentChangeEvent): boolean { + if (e.contentChanges.length !== 1) { + return false + } + const str = e.contentChanges[0].text + if (str.length === 0) { + return false + } + return ( + (str.startsWith('\r\n') && str.substring(2).trim() === '') || + (str[0] === '\n' && str.substring(1).trim() === '') + ) + } }