66import vscode from 'vscode'
77import {
88 AuthUtil ,
9+ CodeSuggestionsState ,
10+ CodeWhispererCodeCoverageTracker ,
911 CodeWhispererConstants ,
12+ CodeWhispererSettings ,
13+ ConfigurationEntry ,
14+ DefaultCodeWhispererClient ,
15+ invokeRecommendation ,
1016 isInlineCompletionEnabled ,
17+ KeyStrokeHandler ,
18+ RecommendationHandler ,
1119 runtimeLanguageContext ,
20+ TelemetryHelper ,
1221 UserWrittenCodeTracker ,
1322 vsCodeState ,
1423} from 'aws-core-vscode/codewhisperer'
15- import { globals , sleep } from 'aws-core-vscode/shared'
24+ import { Commands , getLogger , globals , sleep } from 'aws-core-vscode/shared'
1625
1726export async function activate ( ) {
18- if ( isInlineCompletionEnabled ( ) ) {
19- // Debugging purpose: only initialize NextEditPredictionPanel when development
20- // NextEditPredictionPanel.getInstance()
27+ const codewhispererSettings = CodeWhispererSettings . instance
28+ const client = new DefaultCodeWhispererClient ( )
2129
30+ if ( isInlineCompletionEnabled ( ) ) {
2231 await setSubscriptionsforInlineCompletion ( )
2332 await AuthUtil . instance . setVscodeContextProps ( )
2433 }
2534
35+ function getAutoTriggerStatus ( ) : boolean {
36+ return CodeSuggestionsState . instance . isSuggestionsEnabled ( )
37+ }
38+
39+ async function getConfigEntry ( ) : Promise < ConfigurationEntry > {
40+ const isShowMethodsEnabled : boolean =
41+ vscode . workspace . getConfiguration ( 'editor' ) . get ( 'suggest.showMethods' ) || false
42+ const isAutomatedTriggerEnabled : boolean = getAutoTriggerStatus ( )
43+ const isManualTriggerEnabled : boolean = true
44+ const isSuggestionsWithCodeReferencesEnabled = codewhispererSettings . isSuggestionsWithCodeReferencesEnabled ( )
45+
46+ // TODO:remove isManualTriggerEnabled
47+ return {
48+ isShowMethodsEnabled,
49+ isManualTriggerEnabled,
50+ isAutomatedTriggerEnabled,
51+ isSuggestionsWithCodeReferencesEnabled,
52+ }
53+ }
54+
2655 async function setSubscriptionsforInlineCompletion ( ) {
56+ RecommendationHandler . instance . subscribeSuggestionCommands ( )
57+
2758 /**
2859 * Automated trigger
2960 */
3061 globals . context . subscriptions . push (
62+ vscode . window . onDidChangeActiveTextEditor ( async ( editor ) => {
63+ await RecommendationHandler . instance . onEditorChange ( )
64+ } ) ,
65+ vscode . window . onDidChangeWindowState ( async ( e ) => {
66+ await RecommendationHandler . instance . onFocusChange ( )
67+ } ) ,
68+ vscode . window . onDidChangeTextEditorSelection ( async ( e ) => {
69+ await RecommendationHandler . instance . onCursorChange ( e )
70+ } ) ,
3171 vscode . workspace . onDidChangeTextDocument ( async ( e ) => {
3272 const editor = vscode . window . activeTextEditor
3373 if ( ! editor ) {
@@ -40,6 +80,7 @@ export async function activate() {
4080 return
4181 }
4282
83+ CodeWhispererCodeCoverageTracker . getTracker ( e . document . languageId ) ?. countTotalTokens ( e )
4384 UserWrittenCodeTracker . instance . onTextDocumentChange ( e )
4485 /**
4586 * Handle this keystroke event only when
@@ -51,6 +92,11 @@ export async function activate() {
5192 return
5293 }
5394
95+ if ( vsCodeState . lastUserModificationTime ) {
96+ TelemetryHelper . instance . setTimeSinceLastModification (
97+ performance . now ( ) - vsCodeState . lastUserModificationTime
98+ )
99+ }
54100 vsCodeState . lastUserModificationTime = performance . now ( )
55101 /**
56102 * Important: Doing this sleep(10) is to make sure
@@ -59,6 +105,19 @@ export async function activate() {
59105 * Then this event can be processed by our code.
60106 */
61107 await sleep ( CodeWhispererConstants . vsCodeCursorUpdateDelay )
108+ if ( ! RecommendationHandler . instance . isSuggestionVisible ( ) ) {
109+ await KeyStrokeHandler . instance . processKeyStroke ( e , editor , client , await getConfigEntry ( ) )
110+ }
111+ } ) ,
112+ // manual trigger
113+ Commands . register ( { id : 'aws.amazonq.invokeInlineCompletion' , autoconnect : true } , async ( ) => {
114+ invokeRecommendation (
115+ vscode . window . activeTextEditor as vscode . TextEditor ,
116+ client ,
117+ await getConfigEntry ( )
118+ ) . catch ( ( e : Error ) => {
119+ getLogger ( ) . error ( 'invokeRecommendation failed: %s' , ( e as Error ) . message )
120+ } )
62121 } )
63122 )
64123 }
0 commit comments