88 inlineCompletionWithReferencesRequestType ,
99 TextDocumentContentChangeEvent ,
1010 editCompletionRequestType ,
11+ LogInlineCompletionSessionResultsParams ,
1112} from '@aws/language-server-runtimes/protocol'
12- import { CancellationToken , InlineCompletionContext , Position , TextDocument } from 'vscode'
13+ import { CancellationToken , InlineCompletionContext , Position , TextDocument , commands } from 'vscode'
1314import { LanguageClient } from 'vscode-languageclient'
1415import { SessionManager } from './sessionManager'
1516import {
@@ -24,8 +25,8 @@ import { getLogger } from 'aws-core-vscode/shared'
2425import { DocumentEventListener } from './documentEventListener'
2526import { getOpenFilesInWindow } from 'aws-core-vscode/utils'
2627import { asyncCallWithTimeout } from '../../util/timeoutUtil'
27- import { EditSuggestionState } from './editSuggestionState'
2828import { extractFileContextInNotebooks } from './notebookUtil'
29+ import { EditSuggestionState } from './editSuggestionState'
2930
3031export interface GetAllRecommendationsOptions {
3132 emitTelemetry ?: boolean
@@ -137,7 +138,7 @@ export class RecommendationService {
137138 * Completions use PartialResultToken with single 1 call of [getAllRecommendations].
138139 * Edits leverage partialResultToken to achieve EditStreak such that clients can pull all continuous suggestions generated by the model within 1 EOS block.
139140 */
140- if ( ! isTriggerByDeletion && ! request . partialResultToken && ! EditSuggestionState . isEditSuggestionActive ( ) ) {
141+ if ( ! isTriggerByDeletion && ! request . partialResultToken ) {
141142 const completionPromise : Promise < InlineCompletionListWithReferences > = languageClient . sendRequest (
142143 inlineCompletionWithReferencesRequestType . method ,
143144 request ,
@@ -187,6 +188,31 @@ export class RecommendationService {
187188 } ) ) ,
188189 } )
189190
191+ // Completion will not be rendered if an edit suggestion has been active for longer than 1 second
192+ if ( EditSuggestionState . isEditSuggestionDisplayingOverOneSecond ( ) ) {
193+ const session = this . sessionManager . getActiveSession ( )
194+ if ( ! session ) {
195+ return [ ]
196+ }
197+ const itemId = this . sessionManager . getActiveRecommendation ( ) ?. [ 0 ] ?. itemId
198+ const params : LogInlineCompletionSessionResultsParams = {
199+ sessionId : session . sessionId ,
200+ completionSessionResult : {
201+ [ itemId ] : {
202+ seen : false ,
203+ accepted : false ,
204+ discarded : true ,
205+ } ,
206+ } ,
207+ }
208+ languageClient . sendNotification ( 'aws/logInlineCompletionSessionResults' , params )
209+ this . sessionManager . clear ( )
210+ return [ ]
211+ } else if ( EditSuggestionState . isEditSuggestionActive ( ) ) {
212+ // discard the current edit suggestion if its display time is less than 1 sec
213+ await commands . executeCommand ( 'aws.amazonq.inline.rejectEdit' , true )
214+ }
215+
190216 TelemetryHelper . instance . setSdkApiCallEndTime ( )
191217 TelemetryHelper . instance . setSessionId ( result . sessionId )
192218 if ( result . items . length > 0 && result . items [ 0 ] . itemId !== undefined ) {
0 commit comments