Skip to content

Commit abc52fd

Browse files
authored
fix(codewhisperer): remove hover config hack #3016
Problem: CodeWhisperer (temporarily) disables the hover in user config to disable the vscode-driven inline-suggestions popup while CodeWhisperer is presenting suggestions. Reason for this: - The vscode-driven popup only shows when user hovers the mouse over the suggestion. - GitHub CoPilot shows confusing messaging in the popup. However, AWS Toolkit sometimes fails to restore the hover setting: microsoft/vscode#165988 Solution: To fix the immediate problem, remove the logic that temporarily disables the hover setting.
1 parent 34d7cd4 commit abc52fd

File tree

4 files changed

+10
-115
lines changed

4 files changed

+10
-115
lines changed

src/codewhisperer/activation.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import { RecommendationHandler } from './service/recommendationHandler'
4545
import { Commands } from '../shared/vscode/commands2'
4646
import { InlineCompletionService, refreshStatusBar } from './service/inlineCompletionService'
4747
import { isInlineCompletionEnabled } from './util/commonUtil'
48-
import { HoverConfigUtil } from './util/hoverConfigUtil'
4948
import { CodeWhispererCodeCoverageTracker } from './tracker/codewhispererCodeCoverageTracker'
5049
import { AuthUtil, isUpgradeableConnection } from './util/authUtil'
5150
import globals from '../shared/extensionGlobals'
@@ -56,11 +55,6 @@ import { showViewLogsMessage } from '../shared/utilities/messages'
5655
const performance = globalThis.performance ?? require('perf_hooks').performance
5756

5857
export async function activate(context: ExtContext): Promise<void> {
59-
// No need to await. This can be removed once the 'hover.enabled' hack is no longer needed.
60-
HoverConfigUtil.instance.restoreHoverConfig().catch(err => {
61-
getLogger().warn('codewhisperer: failed to restore "editor.hover.enabled" setting: %s', err)
62-
})
63-
6458
const codewhispererSettings = CodeWhispererSettings.instance
6559
// initialize AuthUtil earlier to make sure it can listen to connection change events.
6660
const auth = AuthUtil.instance
@@ -70,7 +64,6 @@ export async function activate(context: ExtContext): Promise<void> {
7064
if (isCloud9()) {
7165
await enableDefaultConfigCloud9()
7266
}
73-
7467
/**
7568
* CodeWhisperer security panel
7669
*/
@@ -631,7 +624,6 @@ export async function shutdown() {
631624
}
632625
if (isInlineCompletionEnabled()) {
633626
await InlineCompletionService.instance.clearInlineCompletionStates(vscode.window.activeTextEditor)
634-
await HoverConfigUtil.instance.restoreHoverConfig()
635627
} else {
636628
if (vscode.window.activeTextEditor) {
637629
await InlineCompletion.instance.resetInlineStates(vscode.window.activeTextEditor)

src/codewhisperer/service/inlineCompletionService.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { getLogger } from '../../shared/logger/logger'
1818
import { TelemetryHelper } from '../util/telemetryHelper'
1919
import { runtimeLanguageContext } from '../util/runtimeLanguageContext'
2020
import { Commands } from '../../shared/vscode/commands2'
21-
import { HoverConfigUtil } from '../util/hoverConfigUtil'
2221
import { getPrefixSuffixOverlap } from '../util/commonUtil'
2322
import globals from '../../shared/extensionGlobals'
2423
import { AuthUtil } from '../util/authUtil'
@@ -153,6 +152,10 @@ class CodeWhispererInlineCompletionItemProvider implements vscode.InlineCompleti
153152
const start = RecommendationHandler.instance.startPos
154153
const end = position
155154
const iteratingIndexes = this.getIteratingIndexes()
155+
const prefix = document.getText(new vscode.Range(start, end)).replace(/\r\n/g, '\n')
156+
const matchedCount = RecommendationHandler.instance.recommendations.filter(
157+
r => r.content.length > 0 && r.content.startsWith(prefix)
158+
).length
156159
for (const i of iteratingIndexes) {
157160
const r = RecommendationHandler.instance.recommendations[i]
158161
const item = this.getInlineCompletionItem(document, r, start, end, i)
@@ -168,6 +171,9 @@ class CodeWhispererInlineCompletionItemProvider implements vscode.InlineCompleti
168171
)
169172
this.nextMove = 0
170173
this._onDidShow.fire()
174+
if (matchedCount >= 2 || RecommendationHandler.instance.hasNextToken()) {
175+
return [item, { insertText: 'x' }]
176+
}
171177
return [item]
172178
}
173179
ReferenceInlineProvider.instance.removeInlineReference()
@@ -284,7 +290,6 @@ export class InlineCompletionService {
284290
this.disposeCommandOverrides()
285291
} finally {
286292
this.clearRejectionTimer()
287-
await HoverConfigUtil.instance.restoreHoverConfig()
288293
}
289294
}
290295

@@ -362,6 +367,9 @@ export class InlineCompletionService {
362367
}
363368

364369
async showRecommendation(indexShift: number, isFirstRecommendation: boolean = false) {
370+
if (vscode.window.activeTextEditor) {
371+
vscode.window.showTextDocument(vscode.window.activeTextEditor.document)
372+
}
365373
this.inlineCompletionProvider = new CodeWhispererInlineCompletionItemProvider(
366374
this.inlineCompletionProvider?.getActiveItemIndex,
367375
indexShift
@@ -427,7 +435,6 @@ export class InlineCompletionService {
427435
if (this._timer !== undefined) {
428436
return
429437
}
430-
await HoverConfigUtil.instance.overwriteHoverConfig()
431438
this._timer = globals.clock.setInterval(async () => {
432439
if (!this.isSuggestionVisible()) {
433440
getLogger().verbose(`Clearing cached suggestion`)

src/codewhisperer/util/hoverConfigUtil.ts

Lines changed: 0 additions & 37 deletions
This file was deleted.

src/test/codewhisperer/util/hoverConfigUtil.test.ts

Lines changed: 0 additions & 67 deletions
This file was deleted.

0 commit comments

Comments
 (0)