@@ -89,7 +89,7 @@ interface IRenameInputField {
89
89
where : IRange ,
90
90
currentName : string ,
91
91
supportPreview : boolean ,
92
- candidates : ProviderResult < NewSymbolName [ ] > [ ] ,
92
+ requestRenameSuggestions : ( cts : CancellationToken ) => ProviderResult < NewSymbolName [ ] > [ ] ,
93
93
cts : CancellationTokenSource
94
94
) : Promise < RenameInputFieldResult | boolean > ;
95
95
@@ -133,6 +133,8 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
133
133
*/
134
134
private _timeBeforeFirstInputFieldEdit : number | undefined ;
135
135
136
+ private _renameCandidateProvidersCts : CancellationTokenSource | undefined ;
137
+
136
138
private readonly _visibleContextKey : IContextKey < boolean > ;
137
139
private readonly _disposables = new DisposableStore ( ) ;
138
140
@@ -200,6 +202,9 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
200
202
this . _isEditingRenameCandidate = true ;
201
203
}
202
204
this . _timeBeforeFirstInputFieldEdit ??= this . _beforeFirstInputFieldEditSW . elapsed ( ) ;
205
+ if ( this . _renameCandidateProvidersCts ?. token . isCancellationRequested === false ) {
206
+ this . _renameCandidateProvidersCts . cancel ( ) ;
207
+ }
203
208
this . _renameCandidateListView ?. clearFocus ( ) ;
204
209
} )
205
210
) ;
@@ -356,12 +361,16 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
356
361
where : IRange ,
357
362
currentName : string ,
358
363
supportPreview : boolean ,
359
- candidates : ProviderResult < NewSymbolName [ ] > [ ] ,
364
+ requestRenameSuggestions : ( cts : CancellationToken ) => ProviderResult < NewSymbolName [ ] > [ ] ,
360
365
cts : CancellationTokenSource
361
366
) : Promise < RenameInputFieldResult | boolean > {
362
367
363
368
const { start : selectionStart , end : selectionEnd } = this . _getSelection ( where , currentName ) ;
364
369
370
+ this . _renameCandidateProvidersCts = new CancellationTokenSource ( ) ;
371
+ const candidates = requestRenameSuggestions ( this . _renameCandidateProvidersCts . token ) ;
372
+ this . _updateRenameCandidates ( candidates , currentName , cts . token ) ;
373
+
365
374
this . _isEditingRenameCandidate = false ;
366
375
367
376
this . _domNode ! . classList . toggle ( 'preview' , supportPreview ) ;
@@ -379,8 +388,12 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
379
388
const disposeOnDone = new DisposableStore ( ) ;
380
389
381
390
disposeOnDone . add ( toDisposable ( ( ) => cts . dispose ( true ) ) ) ; // @ulugbekna : this may result in `this.cancelInput` being called twice, but it should be safe since we set it to undefined after 1st call
382
-
383
- this . _updateRenameCandidates ( candidates , currentName , cts . token ) ;
391
+ disposeOnDone . add ( toDisposable ( ( ) => {
392
+ if ( this . _renameCandidateProvidersCts !== undefined ) {
393
+ this . _renameCandidateProvidersCts . dispose ( true ) ;
394
+ this . _renameCandidateProvidersCts = undefined ;
395
+ }
396
+ } ) ) ;
384
397
385
398
const inputResult = new DeferredPromise < RenameInputFieldResult | boolean > ( ) ;
386
399
0 commit comments