Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type": "Removal",
"description": "Deprecate \"amazon q is generating...\" UI for inline suggestion"
}
11 changes: 2 additions & 9 deletions packages/amazonq/src/app/inline/completion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ import {
noInlineSuggestionsMsg,
ReferenceInlineProvider,
} from 'aws-core-vscode/codewhisperer'
import { InlineGeneratingMessage } from './inlineGeneratingMessage'
import { LineTracker } from './stateTracker/lineTracker'
import { InlineTutorialAnnotation } from './tutorials/inlineTutorialAnnotation'
import { TelemetryHelper } from './telemetryHelper'
Expand All @@ -55,7 +54,7 @@ export class InlineCompletionManager implements Disposable {
private sessionManager: SessionManager
private recommendationService: RecommendationService
private lineTracker: LineTracker
private incomingGeneratingMessage: InlineGeneratingMessage

private inlineTutorialAnnotation: InlineTutorialAnnotation
private readonly logSessionResultMessageName = 'aws/logInlineCompletionSessionResults'
private documentChangeListener: Disposable
Expand All @@ -70,12 +69,7 @@ export class InlineCompletionManager implements Disposable {
this.languageClient = languageClient
this.sessionManager = sessionManager
this.lineTracker = lineTracker
this.incomingGeneratingMessage = new InlineGeneratingMessage(this.lineTracker)
this.recommendationService = new RecommendationService(
this.sessionManager,
this.incomingGeneratingMessage,
cursorUpdateRecorder
)
this.recommendationService = new RecommendationService(this.sessionManager, cursorUpdateRecorder)
this.inlineTutorialAnnotation = inlineTutorialAnnotation
this.inlineCompletionProvider = new AmazonQInlineCompletionItemProvider(
languageClient,
Expand Down Expand Up @@ -105,7 +99,6 @@ export class InlineCompletionManager implements Disposable {
public dispose(): void {
if (this.disposable) {
this.disposable.dispose()
this.incomingGeneratingMessage.dispose()
this.lineTracker.dispose()
}
if (this.documentChangeListener) {
Expand Down
98 changes: 0 additions & 98 deletions packages/amazonq/src/app/inline/inlineGeneratingMessage.ts

This file was deleted.

4 changes: 0 additions & 4 deletions packages/amazonq/src/app/inline/recommendationService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
import { CancellationToken, InlineCompletionContext, Position, TextDocument } from 'vscode'
import { LanguageClient } from 'vscode-languageclient'
import { SessionManager } from './sessionManager'
import { InlineGeneratingMessage } from './inlineGeneratingMessage'
import { AuthUtil, CodeWhispererStatusBarManager } from 'aws-core-vscode/codewhisperer'
import { TelemetryHelper } from './telemetryHelper'
import { ICursorUpdateRecorder } from './cursorUpdateManager'
Expand All @@ -25,7 +24,6 @@ export interface GetAllRecommendationsOptions {
export class RecommendationService {
constructor(
private readonly sessionManager: SessionManager,
private readonly inlineGeneratingMessage: InlineGeneratingMessage,
private cursorUpdateRecorder?: ICursorUpdateRecorder
) {}
/**
Expand Down Expand Up @@ -65,7 +63,6 @@ export class RecommendationService {
try {
// Show UI indicators only if UI is enabled
if (options.showUi) {
await this.inlineGeneratingMessage.showGenerating(context.triggerKind)
await statusBar.setLoading()
}

Expand Down Expand Up @@ -149,7 +146,6 @@ export class RecommendationService {
} finally {
// Remove all UI indicators if UI is enabled
if (options.showUi) {
this.inlineGeneratingMessage.hideGenerating()
void statusBar.refreshStatusBar() // effectively "stop loading"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import {
ReferenceLogViewProvider,
vsCodeState,
} from 'aws-core-vscode/codewhisperer'
import { InlineGeneratingMessage } from '../../../../../src/app/inline/inlineGeneratingMessage'
import { LineTracker } from '../../../../../src/app/inline/stateTracker/lineTracker'
import { InlineTutorialAnnotation } from '../../../../../src/app/inline/tutorials/inlineTutorialAnnotation'

Expand Down Expand Up @@ -247,9 +246,8 @@ describe('InlineCompletionManager', () => {

beforeEach(() => {
const lineTracker = new LineTracker()
const activeStateController = new InlineGeneratingMessage(lineTracker)
inlineTutorialAnnotation = new InlineTutorialAnnotation(lineTracker, mockSessionManager)
recommendationService = new RecommendationService(mockSessionManager, activeStateController)
recommendationService = new RecommendationService(mockSessionManager)
vsCodeState.isRecommendationsActive = false
mockSessionManager = {
getActiveSession: getActiveSessionStub,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import assert from 'assert'
import { RecommendationService } from '../../../../../src/app/inline/recommendationService'
import { SessionManager } from '../../../../../src/app/inline/sessionManager'
import { createMockDocument } from 'aws-core-vscode/test'
import { LineTracker } from '../../../../../src/app/inline/stateTracker/lineTracker'
import { InlineGeneratingMessage } from '../../../../../src/app/inline/inlineGeneratingMessage'
// Import CursorUpdateManager directly instead of the interface
import { CursorUpdateManager } from '../../../../../src/app/inline/cursorUpdateManager'
import { CodeWhispererStatusBarManager } from 'aws-core-vscode/codewhisperer'
Expand All @@ -22,8 +20,6 @@ describe('RecommendationService', () => {
let sendRequestStub: sinon.SinonStub
let sandbox: sinon.SinonSandbox
let sessionManager: SessionManager
let lineTracker: LineTracker
let activeStateController: InlineGeneratingMessage
let service: RecommendationService
let cursorUpdateManager: CursorUpdateManager
let statusBarStub: any
Expand Down Expand Up @@ -69,8 +65,6 @@ describe('RecommendationService', () => {
} as unknown as LanguageClient

sessionManager = new SessionManager()
lineTracker = new LineTracker()
activeStateController = new InlineGeneratingMessage(lineTracker)

// Create cursor update manager mock
cursorUpdateManager = {
Expand All @@ -94,7 +88,7 @@ describe('RecommendationService', () => {
sandbox.stub(CodeWhispererStatusBarManager, 'instance').get(() => statusBarStub)

// Create the service without cursor update recorder initially
service = new RecommendationService(sessionManager, activeStateController)
service = new RecommendationService(sessionManager)
})

afterEach(() => {
Expand All @@ -104,11 +98,7 @@ describe('RecommendationService', () => {

describe('constructor', () => {
it('should initialize with optional cursorUpdateRecorder', () => {
const serviceWithRecorder = new RecommendationService(
sessionManager,
activeStateController,
cursorUpdateManager
)
const serviceWithRecorder = new RecommendationService(sessionManager, cursorUpdateManager)

// Verify the service was created with the recorder
assert.strictEqual(serviceWithRecorder['cursorUpdateRecorder'], cursorUpdateManager)
Expand Down Expand Up @@ -232,26 +222,7 @@ describe('RecommendationService', () => {
sinon.assert.calledOnce(cursorUpdateManager.recordCompletionRequest as sinon.SinonStub)
})

// Helper function to setup UI test
function setupUITest() {
const mockFirstResult = {
sessionId: 'test-session',
items: [mockInlineCompletionItemOne],
partialResultToken: undefined,
}

sendRequestStub.resolves(mockFirstResult)

// Spy on the UI methods
const showGeneratingStub = sandbox.stub(activeStateController, 'showGenerating').resolves()
const hideGeneratingStub = sandbox.stub(activeStateController, 'hideGenerating')

return { showGeneratingStub, hideGeneratingStub }
}

it('should not show UI indicators when showUi option is false', async () => {
const { showGeneratingStub, hideGeneratingStub } = setupUITest()

// Call with showUi: false option
await service.getAllRecommendations(
languageClient,
Expand All @@ -267,15 +238,11 @@ describe('RecommendationService', () => {
)

// Verify UI methods were not called
sinon.assert.notCalled(showGeneratingStub)
sinon.assert.notCalled(hideGeneratingStub)
sinon.assert.notCalled(statusBarStub.setLoading)
sinon.assert.notCalled(statusBarStub.refreshStatusBar)
})

it('should show UI indicators when showUi option is true (default)', async () => {
const { showGeneratingStub, hideGeneratingStub } = setupUITest()

// Call with default options (showUi: true)
await service.getAllRecommendations(
languageClient,
Expand All @@ -287,8 +254,6 @@ describe('RecommendationService', () => {
)

// Verify UI methods were called
sinon.assert.calledOnce(showGeneratingStub)
sinon.assert.calledOnce(hideGeneratingStub)
sinon.assert.calledOnce(statusBarStub.setLoading)
sinon.assert.calledOnce(statusBarStub.refreshStatusBar)
})
Expand All @@ -304,10 +269,6 @@ describe('RecommendationService', () => {
// Set up UI options
const options = { showUi: true }

// Stub the UI methods to avoid errors
// const showGeneratingStub = sandbox.stub(activeStateController, 'showGenerating').resolves()
const hideGeneratingStub = sandbox.stub(activeStateController, 'hideGenerating')

// Temporarily replace console.error with a no-op function to prevent test failure
const originalConsoleError = console.error
console.error = () => {}
Expand All @@ -328,7 +289,6 @@ describe('RecommendationService', () => {
assert.deepStrictEqual(result, [])

// Verify the UI indicators were hidden even when an error occurs
sinon.assert.calledOnce(hideGeneratingStub)
sinon.assert.calledOnce(statusBarStub.refreshStatusBar)
} finally {
// Restore the original console.error function
Expand Down
Loading