Skip to content

Commit bdc49eb

Browse files
committed
fix(amazonq): Seperate inline completion from regular codewhisperer activation
1 parent b17b3fa commit bdc49eb

File tree

4 files changed

+75
-71
lines changed

4 files changed

+75
-71
lines changed

packages/amazonq/src/extension.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
*/
55

66
import { AuthUtils, CredentialsStore, LoginManager, initializeAuth } from 'aws-core-vscode/auth'
7-
import { activate as activateCodeWhisperer, shutdown as shutdownCodeWhisperer } from 'aws-core-vscode/codewhisperer'
7+
import {
8+
activate as activateCodeWhisperer,
9+
shutdown as shutdownCodeWhisperer,
10+
activateInlineCompletion,
11+
} from 'aws-core-vscode/codewhisperer'
812
import { makeEndpointsProvider, registerGenericCommands } from 'aws-core-vscode'
913
import { CommonAuthWebview } from 'aws-core-vscode/login'
1014
import {
@@ -31,6 +35,7 @@ import {
3135
setContext,
3236
setupUninstallHandler,
3337
maybeShowMinVscodeWarning,
38+
Experiments,
3439
} from 'aws-core-vscode/shared'
3540
import { ExtStartUpSources } from 'aws-core-vscode/telemetry'
3641
import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils'
@@ -39,6 +44,7 @@ import * as semver from 'semver'
3944
import * as vscode from 'vscode'
4045
import { registerCommands } from './commands'
4146
import { focusAmazonQPanel } from 'aws-core-vscode/codewhispererChat'
47+
import { activate as activateAmazonqLsp } from './lsp/activation'
4248

4349
export const amazonQContextPrefix = 'amazonq'
4450

@@ -113,7 +119,13 @@ export async function activateAmazonQCommon(context: vscode.ExtensionContext, is
113119
const extContext = {
114120
extensionContext: context,
115121
}
122+
// This contains every lsp agnostic things (auth, security scan, code scan)
116123
await activateCodeWhisperer(extContext as ExtContext)
124+
if (Experiments.instance.get('amazonqLSP', false)) {
125+
await activateAmazonqLsp(context)
126+
} else {
127+
await activateInlineCompletion()
128+
}
117129

118130
// Generic extension commands
119131
registerGenericCommands(context, amazonQContextPrefix)

packages/amazonq/src/extensionNode.ts

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,7 @@ import * as vscode from 'vscode'
77
import { activateAmazonQCommon, amazonQContextPrefix, deactivateCommon } from './extension'
88
import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq'
99
import { activate as activateQGumby } from 'aws-core-vscode/amazonqGumby'
10-
import {
11-
ExtContext,
12-
globals,
13-
CrashMonitoring,
14-
getLogger,
15-
isNetworkError,
16-
isSageMaker,
17-
Experiments,
18-
} from 'aws-core-vscode/shared'
10+
import { ExtContext, globals, CrashMonitoring, getLogger, isNetworkError, isSageMaker } from 'aws-core-vscode/shared'
1911
import { filetypes, SchemaService } from 'aws-core-vscode/sharedNode'
2012
import { updateDevMode } from 'aws-core-vscode/dev'
2113
import { CommonAuthViewProvider } from 'aws-core-vscode/login'
@@ -29,7 +21,6 @@ import { beta } from 'aws-core-vscode/dev'
2921
import { activate as activateNotifications, NotificationsController } from 'aws-core-vscode/notifications'
3022
import { AuthState, AuthUtil } from 'aws-core-vscode/codewhisperer'
3123
import { telemetry, AuthUserState } from 'aws-core-vscode/telemetry'
32-
import { activate as activateAmazonqLsp } from './lsp/activation'
3324

3425
export async function activate(context: vscode.ExtensionContext) {
3526
// IMPORTANT: No other code should be added to this function. Place it in one of the following 2 functions where appropriate.
@@ -52,12 +43,8 @@ async function activateAmazonQNode(context: vscode.ExtensionContext) {
5243
extensionContext: context,
5344
}
5445

55-
if (Experiments.instance.get('amazonqLSP', false)) {
56-
await activateAmazonqLsp(context)
57-
} else {
58-
await activateCWChat(context)
59-
await activateQGumby(extContext as ExtContext)
60-
}
46+
await activateCWChat(context)
47+
await activateQGumby(extContext as ExtContext)
6148

6249
const authProvider = new CommonAuthViewProvider(
6350
context,

packages/core/src/codewhisperer/activation.ts

Lines changed: 58 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,12 @@ import { setContext } from '../shared/vscode/setContext'
9898
import { syncSecurityIssueWebview } from './views/securityIssue/securityIssueWebview'
9999
import { detectCommentAboveLine } from '../shared/utilities/commentUtils'
100100
import { UserWrittenCodeTracker } from './tracker/userWrittenCodeTracker'
101+
import globals from '../shared/extensionGlobals'
101102

102103
let localize: nls.LocalizeFunc
103104

104105
export async function activate(context: ExtContext): Promise<void> {
105106
localize = nls.loadMessageBundle()
106-
const codewhispererSettings = CodeWhispererSettings.instance
107107

108108
// initialize AuthUtil earlier to make sure it can listen to connection change events.
109109
const auth = AuthUtil.instance
@@ -303,16 +303,6 @@ export async function activate(context: ExtContext): Promise<void> {
303303
SecurityIssueProvider.instance.issues.some((group) => group.issues.some((issue) => issue.visible))
304304
void setContext('aws.amazonq.security.noMatches', noMatches)
305305
}),
306-
// manual trigger
307-
Commands.register({ id: 'aws.amazonq.invokeInlineCompletion', autoconnect: true }, async () => {
308-
invokeRecommendation(
309-
vscode.window.activeTextEditor as vscode.TextEditor,
310-
client,
311-
await getConfigEntry()
312-
).catch((e) => {
313-
getLogger().error('invokeRecommendation failed: %s', (e as Error).message)
314-
})
315-
}),
316306
// select customization
317307
selectCustomizationPrompt.register(),
318308
// notify new customizations
@@ -480,6 +470,52 @@ export async function activate(context: ExtContext): Promise<void> {
480470
})
481471
}
482472

473+
void FeatureConfigProvider.instance.fetchFeatureConfigs().catch((error) => {
474+
getLogger().error('Failed to fetch feature configs - %s', error)
475+
})
476+
477+
await Commands.tryExecute('aws.amazonq.refreshConnectionCallback')
478+
container.ready()
479+
480+
function setSubscriptionsForCodeIssues() {
481+
context.extensionContext.subscriptions.push(
482+
vscode.workspace.onDidChangeTextDocument(async (e) => {
483+
if (e.document.uri.scheme !== 'file') {
484+
return
485+
}
486+
const diagnostics = securityScanRender.securityDiagnosticCollection?.get(e.document.uri)
487+
if (!diagnostics || diagnostics.length === 0) {
488+
return
489+
}
490+
disposeSecurityDiagnostic(e)
491+
492+
SecurityIssueProvider.instance.handleDocumentChange(e)
493+
SecurityIssueTreeViewProvider.instance.refresh()
494+
await syncSecurityIssueWebview(context)
495+
496+
toggleIssuesVisibility((issue, filePath) =>
497+
filePath !== e.document.uri.fsPath
498+
? issue.visible
499+
: !detectCommentAboveLine(
500+
e.document,
501+
issue.startLine,
502+
CodeWhispererConstants.amazonqIgnoreNextLine
503+
)
504+
)
505+
})
506+
)
507+
}
508+
}
509+
510+
export async function activateInlineCompletion() {
511+
const codewhispererSettings = CodeWhispererSettings.instance
512+
const client = new codewhispererClient.DefaultCodeWhispererClient()
513+
514+
if (isInlineCompletionEnabled()) {
515+
await setSubscriptionsforInlineCompletion()
516+
await AuthUtil.instance.setVscodeContextProps()
517+
}
518+
483519
function getAutoTriggerStatus(): boolean {
484520
return CodeSuggestionsState.instance.isSuggestionsEnabled()
485521
}
@@ -500,17 +536,12 @@ export async function activate(context: ExtContext): Promise<void> {
500536
}
501537
}
502538

503-
if (isInlineCompletionEnabled()) {
504-
await setSubscriptionsforInlineCompletion()
505-
await AuthUtil.instance.setVscodeContextProps()
506-
}
507-
508539
async function setSubscriptionsforInlineCompletion() {
509540
RecommendationHandler.instance.subscribeSuggestionCommands()
510541
/**
511542
* Automated trigger
512543
*/
513-
context.extensionContext.subscriptions.push(
544+
globals.context.subscriptions.push(
514545
vscode.window.onDidChangeActiveTextEditor(async (editor) => {
515546
await RecommendationHandler.instance.onEditorChange()
516547
}),
@@ -560,42 +591,16 @@ export async function activate(context: ExtContext): Promise<void> {
560591
if (!RecommendationHandler.instance.isSuggestionVisible()) {
561592
await KeyStrokeHandler.instance.processKeyStroke(e, editor, client, await getConfigEntry())
562593
}
563-
})
564-
)
565-
}
566-
567-
void FeatureConfigProvider.instance.fetchFeatureConfigs().catch((error) => {
568-
getLogger().error('Failed to fetch feature configs - %s', error)
569-
})
570-
571-
await Commands.tryExecute('aws.amazonq.refreshConnectionCallback')
572-
container.ready()
573-
574-
function setSubscriptionsForCodeIssues() {
575-
context.extensionContext.subscriptions.push(
576-
vscode.workspace.onDidChangeTextDocument(async (e) => {
577-
if (e.document.uri.scheme !== 'file') {
578-
return
579-
}
580-
const diagnostics = securityScanRender.securityDiagnosticCollection?.get(e.document.uri)
581-
if (!diagnostics || diagnostics.length === 0) {
582-
return
583-
}
584-
disposeSecurityDiagnostic(e)
585-
586-
SecurityIssueProvider.instance.handleDocumentChange(e)
587-
SecurityIssueTreeViewProvider.instance.refresh()
588-
await syncSecurityIssueWebview(context)
589-
590-
toggleIssuesVisibility((issue, filePath) =>
591-
filePath !== e.document.uri.fsPath
592-
? issue.visible
593-
: !detectCommentAboveLine(
594-
e.document,
595-
issue.startLine,
596-
CodeWhispererConstants.amazonqIgnoreNextLine
597-
)
598-
)
594+
}),
595+
// manual trigger
596+
Commands.register({ id: 'aws.amazonq.invokeInlineCompletion', autoconnect: true }, async () => {
597+
invokeRecommendation(
598+
vscode.window.activeTextEditor as vscode.TextEditor,
599+
client,
600+
await getConfigEntry()
601+
).catch((e) => {
602+
getLogger().error('invokeRecommendation failed: %s', (e as Error).message)
603+
})
599604
})
600605
)
601606
}

packages/core/src/codewhisperer/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
export { activate, shutdown } from './activation'
6+
export { activate, shutdown, activateInlineCompletion } from './activation'
77
export * from './util/authUtil'
88
export * from './models/model'
99
export * from './models/constants'

0 commit comments

Comments
 (0)