@@ -16,6 +16,7 @@ export function registerCodeCompleteCallbackCommand(context: vscode.ExtensionCon
1616 let disposable = vscode . commands . registerCommand (
1717 "DevChat.codecomplete_callback" ,
1818 async ( callback : any ) => {
19+ logger . channel ( ) ?. trace ( `Trigger codecomplete callback command` ) ;
1920 callback ( ) ;
2021 }
2122 ) ;
@@ -63,6 +64,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
6364 private previousCodeComplete : CodeCompleteResult | undefined ;
6465 private previousPrefix : string | undefined ;
6566 private preCompletionItem : vscode . InlineCompletionItem | undefined ;
67+ private isManualTrigger : boolean = false ;
6668
6769 constructor ( ) {
6870 // TODO
@@ -126,7 +128,17 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
126128 // return true;
127129 // }
128130
131+ async triggerCodeComplete ( document : vscode . TextDocument , position : vscode . Position ) {
132+ this . isManualTrigger = true ;
133+ await vscode . commands . executeCommand ( 'editor.action.inlineSuggest.trigger' ) ;
134+ // 重置标记,以便下次正常检查配置
135+ setTimeout ( ( ) => {
136+ this . isManualTrigger = false ;
137+ } , 100 ) ;
138+ }
139+
129140 async codeComplete ( document : vscode . TextDocument , position : vscode . Position , context : vscode . InlineCompletionContext , token : vscode . CancellationToken ) : Promise < CodeCompleteResultWithMeta | undefined > {
141+ logger . channel ( ) ?. debug ( "codeComplete called" ) ;
130142 const startTime = process . hrtime ( ) ;
131143 GitDiffWatcher . getInstance ( ) . tryRun ( ) ;
132144
@@ -139,6 +151,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
139151
140152 const prompt = await createPrompt ( fsPath , fileContent , position . line , position . character , posOffset , this . recentEditors . getEdits ( ) ) ;
141153 if ( ! prompt ) {
154+ logger . channel ( ) ?. debug ( "prompt is empty" ) ;
142155 return undefined ;
143156 }
144157 logger . channel ( ) ?. trace ( "prompt:" , prompt ) ;
@@ -203,7 +216,7 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
203216 // if (context.selectedCompletionInfo) {
204217 // return [];
205218 // }
206- if ( this . devchatConfig . get ( "complete_enable" ) !== true ) {
219+ if ( ! this . isManualTrigger && this . devchatConfig . get ( "complete_enable" ) !== true ) {
207220 return [ ] ;
208221 }
209222
@@ -221,7 +234,9 @@ export class InlineCompletionProvider implements vscode.InlineCompletionItemProv
221234 let response : CodeCompleteResultWithMeta | undefined = undefined ;
222235
223236 // 获取当前光标前三行代码
224- const linePrefix = document . getText ( new vscode . Range ( position . line - 4 , 0 , position . line , position . character ) ) ;
237+ let preLinesNum = 4 ;
238+ const startLine = Math . max ( 0 , position . line - preLinesNum ) ;
239+ const linePrefix = document . getText ( new vscode . Range ( startLine , 0 , position . line , position . character ) ) ;
225240
226241 // 如果this.previousPrefix + this.previousCodeComplete包含“当前行光标之前内容”,且index为0,那么不需要执行代码补全
227242 if ( this . previousPrefix && this . previousCodeComplete && this . previousCodeComplete . code . length > 0 ) {
0 commit comments