Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions packages/amazonq/src/app/inline/EditRendering/displayImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<void> {
const document = editor.document
const fullRange = new vscode.Range(
0,
Expand All @@ -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)
})
}
Expand Down Expand Up @@ -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)
Expand All @@ -318,7 +324,7 @@ export async function displaySvgDecoration(
isInlineEdit: true,
}
languageClient.sendNotification('aws/logInlineCompletionSessionResults', params)
if (inlineCompletionProvider) {
if (inlineCompletionProvider && session.editsStreakPartialResultToken) {
await inlineCompletionProvider.provideInlineCompletionItems(
editor.document,
endPosition,
Expand Down
17 changes: 12 additions & 5 deletions packages/amazonq/src/app/inline/completion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,13 +233,20 @@ 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
if (vsCodeState.isRecommendationsActive) {
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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 []
}
Expand Down
1 change: 1 addition & 0 deletions packages/amazonq/src/app/inline/recommendationService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Loading