diff --git a/packages/amazonq/src/app/inline/EditRendering/displayImage.ts b/packages/amazonq/src/app/inline/EditRendering/displayImage.ts index bb02b9251cd..0793f5460a1 100644 --- a/packages/amazonq/src/app/inline/EditRendering/displayImage.ts +++ b/packages/amazonq/src/app/inline/EditRendering/displayImage.ts @@ -13,6 +13,7 @@ import { InlineCompletionItemWithReferences } from '@aws/language-server-runtime import path from 'path' import { imageVerticalOffset } from './svgGenerator' import { AmazonQInlineCompletionItemProvider } from '../completion' +import { vsCodeState } from 'aws-core-vscode/codewhisperer' export class EditDecorationManager { private imageDecorationType: vscode.TextEditorDecorationType @@ -211,7 +212,7 @@ export const decorationManager = EditDecorationManager.getDecorationManager() /** * Function to replace editor's content with new code */ -function replaceEditorContent(editor: vscode.TextEditor, newCode: string): void { +async function replaceEditorContent(editor: vscode.TextEditor, newCode: string): Promise { const document = editor.document const fullRange = new vscode.Range( 0, @@ -220,7 +221,7 @@ function replaceEditorContent(editor: vscode.TextEditor, newCode: string): void document.lineAt(document.lineCount - 1).text.length ) - void editor.edit((editBuilder) => { + await editor.edit((editBuilder) => { editBuilder.replace(fullRange, newCode) }) } @@ -294,7 +295,12 @@ export async function displaySvgDecoration( getLogger().info('Edit suggestion accepted') // Replace content - replaceEditorContent(editor, newCode) + try { + vsCodeState.isCodeWhispererEditing = true + await replaceEditorContent(editor, newCode) + } finally { + vsCodeState.isCodeWhispererEditing = false + } // Move cursor to end of the actual changed content const endPosition = getEndOfEditPosition(originalCode, newCode) diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts index 6933a69f3e5..90b9d4cf15f 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -233,6 +233,7 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem position, context, triggerKind: context.triggerKind === InlineCompletionTriggerKind.Automatic ? 'Automatic' : 'Invoke', + options: JSON.stringify(getAllRecommendationsOptions), }) // prevent concurrent API calls and write to shared state variables @@ -240,6 +241,12 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem getLogger().info('Recommendations already active, returning empty') return [] } + + if (vsCodeState.isCodeWhispererEditing) { + getLogger().info('Q is editing, returning empty') + return [] + } + // yield event loop to let the document listen catch updates await sleep(1) // prevent user deletion invoking auto trigger @@ -341,6 +348,7 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem const t2 = performance.now() logstr = logstr += `- number of suggestions: ${items.length} +- sessionId: ${this.sessionManager.getActiveSession()?.sessionId} - first suggestion content (next line): ${itemLog} - duration since trigger to before sending Flare call: ${t1 - t0}ms @@ -388,11 +396,10 @@ ${itemLog} if (item.isInlineEdit) { // Check if Next Edit Prediction feature flag is enabled if (Experiments.instance.isExperimentEnabled('amazonqLSPNEP')) { - void showEdits(item, editor, session, this.languageClient, this).then(() => { - const t3 = performance.now() - logstr = logstr + `- duration since trigger to NEP suggestion is displayed: ${t3 - t0}ms` - this.logger.info(logstr) - }) + await showEdits(item, editor, session, this.languageClient, this) + const t3 = performance.now() + logstr = logstr + `- duration since trigger to NEP suggestion is displayed: ${t3 - t0}ms` + this.logger.info(logstr) } return [] } diff --git a/packages/amazonq/src/app/inline/recommendationService.ts b/packages/amazonq/src/app/inline/recommendationService.ts index e13828f88f9..10dd25f5cdf 100644 --- a/packages/amazonq/src/app/inline/recommendationService.ts +++ b/packages/amazonq/src/app/inline/recommendationService.ts @@ -77,6 +77,7 @@ export class RecommendationService { textDocument: request.textDocument, position: request.position, context: request.context, + nextToken: request.partialResultToken, }, }) let result: InlineCompletionListWithReferences = await languageClient.sendRequest(