From d092865a400fad68b02ed67a7464479383750886 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 17 Jul 2025 11:29:57 -0700 Subject: [PATCH 1/4] use document change event for inline completion --- package-lock.json | 18 +++++++++--------- packages/amazonq/src/app/inline/completion.ts | 3 ++- .../src/app/inline/recommendationService.ts | 15 ++++++++++++++- packages/core/package.json | 4 ++-- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed21305ffee..93ebbf2e8dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15044,13 +15044,13 @@ } }, "node_modules/@aws/language-server-runtimes": { - "version": "0.2.102", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.102.tgz", - "integrity": "sha512-O68zmXClLP6mtKxh0fzGKYW3MwgFCTkAgL32WKzOWLwD6gMc5CaVRrNsZ2cabkAudf2laTeWeSDZJZsiQ0hCfA==", + "version": "0.2.111", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.111.tgz", + "integrity": "sha512-eIHKzWkLTTb3qUCeT2nIrpP99dEv/OiUOcPB00MNCsOPWBBO/IoZhfGRNrE8+stgZMQkKLFH2ZYxn3ByB6OsCQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.43", + "@aws/language-server-runtimes-types": "^0.1.47", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", @@ -15077,9 +15077,9 @@ } }, "node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.43.tgz", - "integrity": "sha512-qXaAGkiJ1hldF+Ynu6ZBXS18s47UOnbZEHxKiGRrBlBX2L75ih/4yasj8ITgshqS5Kx5JMntu+8vpc0CkGV6jA==", + "version": "0.1.47", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.47.tgz", + "integrity": "sha512-l5dOdx/MR3SO0HYXkSL9fcR05f4Aw7qRMuASMdWOK93LOSZeANPVOGIWblRnoJejfYiPXcufCFyjLnGpATExag==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -30063,8 +30063,8 @@ "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.47", - "@aws/language-server-runtimes": "^0.2.102", - "@aws/language-server-runtimes-types": "^0.1.43", + "@aws/language-server-runtimes": "^0.2.111", + "@aws/language-server-runtimes-types": "^0.1.47", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts index 360be53e67a..f6e080453f0 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -335,7 +335,8 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem context, token, isAutoTrigger, - getAllRecommendationsOptions + getAllRecommendationsOptions, + this.documentEventListener.getLastDocumentChangeEvent(document.uri.fsPath)?.event ) // get active item from session for displaying const items = this.sessionManager.getActiveRecommendation() diff --git a/packages/amazonq/src/app/inline/recommendationService.ts b/packages/amazonq/src/app/inline/recommendationService.ts index ddde310999f..cdccd42c5b2 100644 --- a/packages/amazonq/src/app/inline/recommendationService.ts +++ b/packages/amazonq/src/app/inline/recommendationService.ts @@ -2,10 +2,12 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ +import * as vscode from 'vscode' import { InlineCompletionListWithReferences, InlineCompletionWithReferencesParams, inlineCompletionWithReferencesRequestType, + TextDocumentContentChangeEvent, } from '@aws/language-server-runtimes/protocol' import { CancellationToken, InlineCompletionContext, Position, TextDocument } from 'vscode' import { LanguageClient } from 'vscode-languageclient' @@ -40,10 +42,20 @@ export class RecommendationService { context: InlineCompletionContext, token: CancellationToken, isAutoTrigger: boolean, - options: GetAllRecommendationsOptions = { emitTelemetry: true, showUi: true } + options: GetAllRecommendationsOptions = { emitTelemetry: true, showUi: true }, + documentChangeEvent?: vscode.TextDocumentChangeEvent ) { // Record that a regular request is being made this.cursorUpdateRecorder?.recordCompletionRequest() + let documentChangeParams = documentChangeEvent + ? { + textDocument: { + uri: document.uri.toString(), + version: document.version, + }, + contentChanges: documentChangeEvent.contentChanges.map((x) => x as TextDocumentContentChangeEvent), + } + : undefined let request: InlineCompletionWithReferencesParams = { textDocument: { @@ -51,6 +63,7 @@ export class RecommendationService { }, position, context, + documentChangeParams: documentChangeParams, } if (options.editsStreakToken) { request = { ...request, partialResultToken: options.editsStreakToken } diff --git a/packages/core/package.json b/packages/core/package.json index 6f8d27ef4dc..d446a1bdf41 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -471,8 +471,8 @@ "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.47", - "@aws/language-server-runtimes": "^0.2.102", - "@aws/language-server-runtimes-types": "^0.1.43", + "@aws/language-server-runtimes": "^0.2.111", + "@aws/language-server-runtimes-types": "^0.1.47", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", From 9ed6fa4771a460bba3bd0f17943bb6daa3a3b4f4 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 17 Jul 2025 12:45:54 -0700 Subject: [PATCH 2/4] add change log --- .../Bug Fix-9d694e40-7fc7-4504-b08c-6b22a5ebcb1c.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/amazonq/.changes/next-release/Bug Fix-9d694e40-7fc7-4504-b08c-6b22a5ebcb1c.json diff --git a/packages/amazonq/.changes/next-release/Bug Fix-9d694e40-7fc7-4504-b08c-6b22a5ebcb1c.json b/packages/amazonq/.changes/next-release/Bug Fix-9d694e40-7fc7-4504-b08c-6b22a5ebcb1c.json new file mode 100644 index 00000000000..f2234549a0d --- /dev/null +++ b/packages/amazonq/.changes/next-release/Bug Fix-9d694e40-7fc7-4504-b08c-6b22a5ebcb1c.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Use documentChangeEvent as auto trigger condition" +} From 580a6397432de76a403c7a43809c4b3ff56ee1fe Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 17 Jul 2025 13:48:35 -0700 Subject: [PATCH 3/4] add unit test --- .../test/unit/amazonq/apps/inline/recommendationService.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts b/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts index 744fcc63c53..54eea8347c5 100644 --- a/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts +++ b/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts @@ -146,6 +146,7 @@ describe('RecommendationService', () => { }, position: mockPosition, context: mockContext, + documentChangeParams: undefined, }) // Verify session management @@ -187,6 +188,7 @@ describe('RecommendationService', () => { }, position: mockPosition, context: mockContext, + documentChangeParams: undefined, } const secondRequestArgs = sendRequestStub.secondCall.args[1] assert.deepStrictEqual(firstRequestArgs, expectedRequestArgs) From 46e366f14301811bcddebeeb37342583088ddb5c Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 17 Jul 2025 14:15:34 -0700 Subject: [PATCH 4/4] lint --- packages/amazonq/src/app/inline/recommendationService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/app/inline/recommendationService.ts b/packages/amazonq/src/app/inline/recommendationService.ts index cdccd42c5b2..1329c68a51c 100644 --- a/packages/amazonq/src/app/inline/recommendationService.ts +++ b/packages/amazonq/src/app/inline/recommendationService.ts @@ -47,7 +47,7 @@ export class RecommendationService { ) { // Record that a regular request is being made this.cursorUpdateRecorder?.recordCompletionRequest() - let documentChangeParams = documentChangeEvent + const documentChangeParams = documentChangeEvent ? { textDocument: { uri: document.uri.toString(),