From 5b4eaf1a1b917dd8095fd9bf011e9662fad87f3f Mon Sep 17 00:00:00 2001 From: Zoe Lin Date: Mon, 31 Mar 2025 17:11:55 -0700 Subject: [PATCH] feat(amazonq): support import through language server --- package-lock.json | 47 ++++++++++--------- packages/amazonq/src/app/inline/completion.ts | 7 +++ packages/core/package.json | 2 +- packages/core/src/codewhisperer/index.ts | 1 + 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fd4035f62d..90b376315f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10831,16 +10831,16 @@ } }, "node_modules/@aws/language-server-runtimes": { - "version": "0.2.44", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.44.tgz", - "integrity": "sha512-eFuBSb1NgW33uZPWCd1oSmc5kJDLJVaBYYpYQxHZHm+lWaHHddPfpmobsVg+FYITYlRYO66d3raw6oYVbH6jNQ==", + "version": "0.2.49", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.49.tgz", + "integrity": "sha512-GJMxZiDuV4zXGh4RBGDEobVH0CvgmFT3O3ZxYfmVGq3JvNhnKXXNYFNzWDUvF8aUUJZJGv4u4OyHitm8TSjrBg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.9.1", + "@apidevtools/json-schema-ref-parser": "^11.9.3", "@aws-crypto/sha256-js": "^5.2.0", "@aws-sdk/client-cognito-identity": "^3.758.0", - "@aws/language-server-runtimes-types": "^0.1.4", + "@aws/language-server-runtimes-types": "^0.1.6", "@opentelemetry/api": "^1.9.0", "@opentelemetry/exporter-metrics-otlp-http": "^0.57.2", "@opentelemetry/resources": "^1.30.1", @@ -10853,11 +10853,11 @@ "@smithy/signature-v4": "^5.0.1", "ajv": "^8.17.1", "aws-sdk": "^2.1692.0", - "axios": "^1.8.2", + "axios": "^1.8.4", "hpagent": "^1.2.0", "jose": "^5.9.6", "mac-ca": "^3.1.1", - "rxjs": "^7.8.1", + "rxjs": "^7.8.2", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "win-ca": "^3.5.1" @@ -11278,9 +11278,9 @@ } }, "node_modules/@aws/language-server-runtimes/node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.4.tgz", - "integrity": "sha512-UPDRghS9SKJlC1yscYFAryDT10UW9zjrnLCsEm05kDb96P0/4tKMgb0urDubN8mfSzVqnLOXZoTA3CutuWRsUA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.6.tgz", + "integrity": "sha512-D8BukMtJRauOw2h/VHOMq7xZxXtCui1zNPzfoU8p6NAAveQL2+eJiLb0l+eYfAB/F1BfWGDcCU/T6cuYg3A/Ng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11925,15 +11925,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@aws/language-server-runtimes/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@aws/language-server-runtimes/node_modules/vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -16163,9 +16154,9 @@ "link": true }, "node_modules/axios": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz", - "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "dev": true, "license": "MIT", "dependencies": { @@ -23701,6 +23692,16 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "funding": [ @@ -26799,7 +26800,7 @@ "devDependencies": { "@aws-sdk/types": "^3.13.1", "@aws/chat-client-ui-types": "^0.0.8", - "@aws/language-server-runtimes": "^0.2.44", + "@aws/language-server-runtimes": "^0.2.49", "@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 fd5ef749d0d..be390cef34c 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -29,6 +29,7 @@ import { ReferenceHoverProvider, ReferenceInlineProvider, ReferenceLogViewProvider, + ImportAdderProvider, } from 'aws-core-vscode/codewhisperer' export class InlineCompletionManager implements Disposable { @@ -66,6 +67,7 @@ export class InlineCompletionManager implements Disposable { item: InlineCompletionItemWithReferences, editor: TextEditor, requestStartTime: number, + startLine: number, firstCompletionDisplayLatency?: number ) => { // TODO: also log the seen state for other suggestions in session @@ -96,6 +98,9 @@ export class InlineCompletionManager implements Disposable { ReferenceLogViewProvider.instance.addReferenceLog(referenceLog) ReferenceHoverProvider.instance.addCodeReferences(item.insertText as string, item.references) } + if (item.mostRelevantMissingImports?.length) { + await ImportAdderProvider.instance.onAcceptRecommendation(editor, item, startLine) + } } commands.registerCommand('aws.amazonq.acceptInline', onInlineAcceptance) @@ -200,6 +205,7 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem item, editor, session.requestStartTime, + position.line, session.firstCompletionDisplayLatency, ], } @@ -208,6 +214,7 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem item.insertText as string, item.references ) + ImportAdderProvider.instance.onShowRecommendation(document, position.line, item) } return items as InlineCompletionItem[] } diff --git a/packages/core/package.json b/packages/core/package.json index 7d64a740305..c58b81ad166 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -441,7 +441,7 @@ "devDependencies": { "@aws-sdk/types": "^3.13.1", "@aws/chat-client-ui-types": "^0.0.8", - "@aws/language-server-runtimes": "^0.2.44", + "@aws/language-server-runtimes": "^0.2.49", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", diff --git a/packages/core/src/codewhisperer/index.ts b/packages/core/src/codewhisperer/index.ts index 565e9e3c238..affe4b8457e 100644 --- a/packages/core/src/codewhisperer/index.ts +++ b/packages/core/src/codewhisperer/index.ts @@ -70,6 +70,7 @@ export { RecommendationService } from './service/recommendationService' export { ClassifierTrigger } from './service/classifierTrigger' export { DocumentChangedSource, KeyStrokeHandler, DefaultDocumentChangedType } from './service/keyStrokeHandler' export { ReferenceLogViewProvider } from './service/referenceLogViewProvider' +export { ImportAdderProvider } from './service/importAdderProvider' export { LicenseUtil } from './util/licenseUtil' export { SecurityIssueProvider } from './service/securityIssueProvider' export { listScanResults, mapToAggregatedList, pollScanJobStatus } from './service/securityScanHandler'