mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-29 09:09:03 +01:00
Avoid creating services in APIs used by the monaco-editor repo itself (#187881)
Fixes #169268: Avoid creating services in APIs used by the monaco-editor repo itself
This commit is contained in:
@@ -54,16 +54,18 @@ export function getEncodedLanguageId(languageId: string): number {
|
||||
* @event
|
||||
*/
|
||||
export function onLanguage(languageId: string, callback: () => void): IDisposable {
|
||||
const languageService = StandaloneServices.get(ILanguageService);
|
||||
const disposable = languageService.onDidRequestRichLanguageFeatures((encounteredLanguageId) => {
|
||||
if (encounteredLanguageId === languageId) {
|
||||
// stop listening
|
||||
disposable.dispose();
|
||||
// invoke actual listener
|
||||
callback();
|
||||
}
|
||||
return StandaloneServices.withServices(() => {
|
||||
const languageService = StandaloneServices.get(ILanguageService);
|
||||
const disposable = languageService.onDidRequestRichLanguageFeatures((encounteredLanguageId) => {
|
||||
if (encounteredLanguageId === languageId) {
|
||||
// stop listening
|
||||
disposable.dispose();
|
||||
// invoke actual listener
|
||||
callback();
|
||||
}
|
||||
});
|
||||
return disposable;
|
||||
});
|
||||
return disposable;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -72,16 +74,18 @@ export function onLanguage(languageId: string, callback: () => void): IDisposabl
|
||||
* @event
|
||||
*/
|
||||
export function onLanguageEncountered(languageId: string, callback: () => void): IDisposable {
|
||||
const languageService = StandaloneServices.get(ILanguageService);
|
||||
const disposable = languageService.onDidRequestBasicLanguageFeatures((encounteredLanguageId) => {
|
||||
if (encounteredLanguageId === languageId) {
|
||||
// stop listening
|
||||
disposable.dispose();
|
||||
// invoke actual listener
|
||||
callback();
|
||||
}
|
||||
return StandaloneServices.withServices(() => {
|
||||
const languageService = StandaloneServices.get(ILanguageService);
|
||||
const disposable = languageService.onDidRequestBasicLanguageFeatures((encounteredLanguageId) => {
|
||||
if (encounteredLanguageId === languageId) {
|
||||
// stop listening
|
||||
disposable.dispose();
|
||||
// invoke actual listener
|
||||
callback();
|
||||
}
|
||||
});
|
||||
return disposable;
|
||||
});
|
||||
return disposable;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1128,6 +1128,7 @@ export module StandaloneServices {
|
||||
}
|
||||
|
||||
let initialized = false;
|
||||
const onDidInitialize = new Emitter<void>();
|
||||
export function initialize(overrides: IEditorOverrideServices): IInstantiationService {
|
||||
if (initialized) {
|
||||
return instantiationService;
|
||||
@@ -1163,6 +1164,27 @@ export module StandaloneServices {
|
||||
}
|
||||
}
|
||||
|
||||
onDidInitialize.fire();
|
||||
|
||||
return instantiationService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes callback once services are initialized.
|
||||
*/
|
||||
export function withServices(callback: () => IDisposable): IDisposable {
|
||||
if (initialized) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
const disposable = new DisposableStore();
|
||||
|
||||
const listener = disposable.add(onDidInitialize.event(() => {
|
||||
listener.dispose();
|
||||
disposable.add(callback());
|
||||
}));
|
||||
|
||||
return disposable;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user