fix: Optimize autocomplete to prevent screen flicker
- Added a preCompletionItem to hold the current autocomplete item - Refactored how autocomplete items are returned to prevent flickering - Improved logic to combine current line prefix and response code effectively
This commit is contained in:
parent
ddc4396f39
commit
0f63d2771f
@ -55,6 +55,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
|
|||||||
private recentEditors: RecentEditsManager;
|
private recentEditors: RecentEditsManager;
|
||||||
private previousCodeComplete: CodeCompleteResult | undefined;
|
private previousCodeComplete: CodeCompleteResult | undefined;
|
||||||
private previousPrefix: string | undefined;
|
private previousPrefix: string | undefined;
|
||||||
|
private preCompletionItem: vscode.InlineCompletionItem | undefined;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// TODO
|
// TODO
|
||||||
@ -210,10 +211,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
|
|||||||
if (this.previousPrefix && this.previousCodeComplete && this.previousCodeComplete.code.length > 0) {
|
if (this.previousPrefix && this.previousCodeComplete && this.previousCodeComplete.code.length > 0) {
|
||||||
const index = (this.previousPrefix + this.previousCodeComplete.code).indexOf(linePrefix);
|
const index = (this.previousPrefix + this.previousCodeComplete.code).indexOf(linePrefix);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
response = JSON.parse(JSON.stringify(this.previousCodeComplete));
|
return [this.preCompletionItem!];
|
||||||
if (response) {
|
|
||||||
response.code = (this.previousPrefix + this.previousCodeComplete.code).slice(index + linePrefix.length);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!response) {
|
if (!response) {
|
||||||
@ -283,19 +281,24 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
|
|||||||
this.previousCodeComplete = response;
|
this.previousCodeComplete = response;
|
||||||
this.previousPrefix = linePrefix;
|
this.previousPrefix = linePrefix;
|
||||||
|
|
||||||
return [
|
const currentLinePrefix = document.lineAt(position.line).text.slice(0, position.character);
|
||||||
new vscode.InlineCompletionItem(
|
const codeCompleted = currentLinePrefix + response.code;
|
||||||
response.code,
|
const rangeStartPosition = new vscode.Position(position.line, 0);
|
||||||
new vscode.Range(
|
|
||||||
position,
|
this.preCompletionItem = new vscode.InlineCompletionItem(
|
||||||
rangeEndPosition
|
codeCompleted,
|
||||||
),
|
new vscode.Range(
|
||||||
{
|
rangeStartPosition,
|
||||||
title: "code complete accept",
|
rangeEndPosition
|
||||||
command: "DevChat.codecomplete_callback",
|
|
||||||
arguments: [callback],
|
|
||||||
}
|
|
||||||
),
|
),
|
||||||
|
{
|
||||||
|
title: "code complete accept",
|
||||||
|
command: "DevChat.codecomplete_callback",
|
||||||
|
arguments: [callback],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return [
|
||||||
|
this.preCompletionItem
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user