Skip to content

Commit c1f9a0e

Browse files
committed
fix(amazonq): isEditSuggestionActive to use boolean flag
1 parent fdf6178 commit c1f9a0e

File tree

6 files changed

+52
-10
lines changed

6 files changed

+52
-10
lines changed

packages/amazonq/src/app/inline/EditRendering/displayImage.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import { LogInlineCompletionSessionResultsParams } from '@aws/language-server-ru
1212
import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes/protocol'
1313
import path from 'path'
1414
import { imageVerticalOffset } from './svgGenerator'
15-
import { AmazonQInlineCompletionItemProvider } from '../completion'
15+
import { EditSuggestionState } from '../editSuggestionState'
16+
import type { AmazonQInlineCompletionItemProvider } from '../completion'
1617
import { vsCodeState } from 'aws-core-vscode/codewhisperer'
1718

1819
export class EditDecorationManager {
@@ -136,6 +137,7 @@ export class EditDecorationManager {
136137
await this.clearDecorations(editor)
137138

138139
await setContext('aws.amazonq.editSuggestionActive' as any, true)
140+
EditSuggestionState.setEditSuggestionActive(true)
139141

140142
this.acceptHandler = onAccept
141143
this.rejectHandler = onReject
@@ -166,6 +168,7 @@ export class EditDecorationManager {
166168
this.acceptHandler = undefined
167169
this.rejectHandler = undefined
168170
await setContext('aws.amazonq.editSuggestionActive' as any, false)
171+
EditSuggestionState.setEditSuggestionActive(false)
169172
}
170173

171174
/**

packages/amazonq/src/app/inline/EditRendering/imageRenderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { getLogger } from 'aws-core-vscode/shared'
1010
import { LanguageClient } from 'vscode-languageclient'
1111
import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes/protocol'
1212
import { CodeWhispererSession } from '../sessionManager'
13-
import { AmazonQInlineCompletionItemProvider } from '../completion'
13+
import type { AmazonQInlineCompletionItemProvider } from '../completion'
1414

1515
export async function showEdits(
1616
item: InlineCompletionItemWithReferences,

packages/amazonq/src/app/inline/completion.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ import {
4141
import { LineTracker } from './stateTracker/lineTracker'
4242
import { InlineTutorialAnnotation } from './tutorials/inlineTutorialAnnotation'
4343
import { TelemetryHelper } from './telemetryHelper'
44-
import { Experiments, getContext, getLogger, sleep } from 'aws-core-vscode/shared'
44+
import { Experiments, getLogger, sleep } from 'aws-core-vscode/shared'
4545
import { messageUtils } from 'aws-core-vscode/utils'
4646
import { showEdits } from './EditRendering/imageRenderer'
47+
import { EditSuggestionState } from './editSuggestionState'
4748
import { ICursorUpdateRecorder } from './cursorUpdateManager'
4849
import { DocumentEventListener } from './documentEventListener'
4950

@@ -291,7 +292,7 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem
291292
* Check if an edit suggestion is currently active
292293
*/
293294
private isEditSuggestionActive(): boolean {
294-
return getContext('aws.amazonq.editSuggestionActive') || false
295+
return EditSuggestionState.isEditSuggestionActive()
295296
}
296297

297298
// this method is automatically invoked by VS Code as user types
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
/**
7+
* Manages the state of edit suggestions to avoid circular dependencies
8+
*/
9+
export class EditSuggestionState {
10+
private static isEditSuggestionCurrentlyActive = false
11+
12+
static setEditSuggestionActive(active: boolean): void {
13+
this.isEditSuggestionCurrentlyActive = active
14+
}
15+
16+
static isEditSuggestionActive(): boolean {
17+
return this.isEditSuggestionCurrentlyActive
18+
}
19+
}

packages/amazonq/test/unit/amazonq/apps/inline/completion.test.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import assert from 'assert'
1717
import { LanguageClient } from 'vscode-languageclient'
1818
import { StringValue } from 'vscode-languageserver-types'
1919
import { AmazonQInlineCompletionItemProvider, InlineCompletionManager } from '../../../../../src/app/inline/completion'
20+
import { EditSuggestionState } from '../../../../../src/app/inline/editSuggestionState'
2021
import { RecommendationService } from '../../../../../src/app/inline/recommendationService'
2122
import { SessionManager } from '../../../../../src/app/inline/sessionManager'
2223
import { createMockDocument, createMockTextEditor, getTestWindow, installFakeClock } from 'aws-core-vscode/test'
@@ -429,8 +430,8 @@ describe('InlineCompletionManager', () => {
429430
documentEventListener
430431
)
431432

432-
// Stub the private method to return true (following existing pattern)
433-
sandbox.stub(provider as any, 'isEditSuggestionActive').returns(true)
433+
// Set edit suggestion active to trigger discard behavior
434+
EditSuggestionState.setEditSuggestionActive(true)
434435

435436
const result = await provider.provideInlineCompletionItems(
436437
mockDocument,
@@ -463,7 +464,7 @@ describe('InlineCompletionManager', () => {
463464
documentEventListener
464465
)
465466

466-
sandbox.stub(provider as any, 'isEditSuggestionActive').returns(true)
467+
EditSuggestionState.setEditSuggestionActive(true)
467468

468469
// Mix of inline edits and completions
469470
const mixedSuggestions = [
@@ -498,7 +499,7 @@ describe('InlineCompletionManager', () => {
498499
documentEventListener
499500
)
500501

501-
sandbox.stub(provider as any, 'isEditSuggestionActive').returns(true)
502+
EditSuggestionState.setEditSuggestionActive(true)
502503

503504
// Set up suggestions where some don't have itemId
504505
const suggestionsWithoutId = [
@@ -533,10 +534,28 @@ describe('InlineCompletionManager', () => {
533534
documentEventListener
534535
)
535536

536-
// Since getContext returns undefined by default, this should return false
537+
// Set the static property to false
538+
EditSuggestionState.setEditSuggestionActive(false)
539+
537540
const result = (provider as any).isEditSuggestionActive()
538541
assert.strictEqual(result, false)
539542
})
543+
544+
it('should return true when edit suggestion is active', () => {
545+
provider = new AmazonQInlineCompletionItemProvider(
546+
languageClient,
547+
recommendationService,
548+
mockSessionManager,
549+
inlineTutorialAnnotation,
550+
documentEventListener
551+
)
552+
553+
// Set the static property to true
554+
EditSuggestionState.setEditSuggestionActive(true)
555+
556+
const result = (provider as any).isEditSuggestionActive()
557+
assert.strictEqual(result, true)
558+
})
540559
})
541560
})
542561
})

packages/amazonq/test/unit/app/inline/completion.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ describe('AmazonQInlineCompletionItemProvider', function () {
102102
it('should not send notification when no valid items', function () {
103103
const items = [
104104
{ itemId: 'item1', isInlineEdit: true }, // Filtered out
105-
{ itemId: null, isInlineEdit: false }, // No itemId
105+
{ itemId: undefined, isInlineEdit: false }, // No itemId
106106
]
107107

108108
const session = {

0 commit comments

Comments
 (0)