Skip to content

Commit 368eb83

Browse files
committed
make sure "only once provider" isn't registered/unregistered while completions are computed, microsoft#144362
1 parent b5205cc commit 368eb83

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

src/vs/editor/contrib/suggest/browser/suggest.ts

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -401,32 +401,30 @@ interface SuggestController extends IEditorContribution {
401401
}
402402

403403

404-
const _once = new WeakMap<ICodeEditor, IDisposable>();
404+
let _onlyOnceProvider: languages.CompletionItemProvider | undefined;
405+
let _onlyOnceSuggestions: languages.CompletionItem[] = [];
405406

406407
export function showSimpleSuggestions(accessor: ServicesAccessor, editor: ICodeEditor, suggestions: languages.CompletionItem[]) {
407408

408409
const { completionProvider } = accessor.get(ILanguageFeaturesService);
409410

410-
const _provider = new class implements languages.CompletionItemProvider {
411-
412-
onlyOnceSuggestions: languages.CompletionItem[] = [];
413-
414-
provideCompletionItems(): languages.CompletionList {
415-
let suggestions = this.onlyOnceSuggestions.slice(0);
416-
let result = { suggestions };
417-
this.onlyOnceSuggestions.length = 0;
418-
dispo.dispose();
419-
return result;
420-
}
421-
};
422-
423-
const dispo = completionProvider.register('*', _provider);
424-
_once.get(editor)?.dispose();
425-
_once.set(editor, dispo);
411+
if (!_onlyOnceProvider) {
412+
_onlyOnceProvider = new class implements languages.CompletionItemProvider {
413+
provideCompletionItems(): languages.CompletionList {
414+
let suggestions = _onlyOnceSuggestions.slice(0);
415+
let result = { suggestions };
416+
_onlyOnceSuggestions.length = 0;
417+
return result;
418+
}
419+
};
420+
completionProvider.register('*', _onlyOnceProvider);
421+
}
426422

427423
setTimeout(() => {
428-
_provider.onlyOnceSuggestions.push(...suggestions);
429-
editor.getContribution<SuggestController>('editor.contrib.suggestController')?.triggerSuggest(new Set<languages.CompletionItemProvider>().add(_provider));
424+
_onlyOnceSuggestions.push(...suggestions);
425+
editor.getContribution<SuggestController>('editor.contrib.suggestController')?.triggerSuggest(
426+
new Set<languages.CompletionItemProvider>().add(_onlyOnceProvider!)
427+
);
430428
}, 0);
431429
}
432430

0 commit comments

Comments
 (0)