Skip to content

Commit 52d4622

Browse files
authored
Avoid creating services in APIs used by the monaco-editor repo itself (microsoft#187881)
Fixes microsoft#169268: Avoid creating services in APIs used by the monaco-editor repo itself
1 parent c0d560e commit 52d4622

File tree

2 files changed

+44
-18
lines changed

2 files changed

+44
-18
lines changed

src/vs/editor/standalone/browser/standaloneLanguages.ts

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,18 @@ export function getEncodedLanguageId(languageId: string): number {
5454
* @event
5555
*/
5656
export function onLanguage(languageId: string, callback: () => void): IDisposable {
57-
const languageService = StandaloneServices.get(ILanguageService);
58-
const disposable = languageService.onDidRequestRichLanguageFeatures((encounteredLanguageId) => {
59-
if (encounteredLanguageId === languageId) {
60-
// stop listening
61-
disposable.dispose();
62-
// invoke actual listener
63-
callback();
64-
}
57+
return StandaloneServices.withServices(() => {
58+
const languageService = StandaloneServices.get(ILanguageService);
59+
const disposable = languageService.onDidRequestRichLanguageFeatures((encounteredLanguageId) => {
60+
if (encounteredLanguageId === languageId) {
61+
// stop listening
62+
disposable.dispose();
63+
// invoke actual listener
64+
callback();
65+
}
66+
});
67+
return disposable;
6568
});
66-
return disposable;
6769
}
6870

6971
/**
@@ -72,16 +74,18 @@ export function onLanguage(languageId: string, callback: () => void): IDisposabl
7274
* @event
7375
*/
7476
export function onLanguageEncountered(languageId: string, callback: () => void): IDisposable {
75-
const languageService = StandaloneServices.get(ILanguageService);
76-
const disposable = languageService.onDidRequestBasicLanguageFeatures((encounteredLanguageId) => {
77-
if (encounteredLanguageId === languageId) {
78-
// stop listening
79-
disposable.dispose();
80-
// invoke actual listener
81-
callback();
82-
}
77+
return StandaloneServices.withServices(() => {
78+
const languageService = StandaloneServices.get(ILanguageService);
79+
const disposable = languageService.onDidRequestBasicLanguageFeatures((encounteredLanguageId) => {
80+
if (encounteredLanguageId === languageId) {
81+
// stop listening
82+
disposable.dispose();
83+
// invoke actual listener
84+
callback();
85+
}
86+
});
87+
return disposable;
8388
});
84-
return disposable;
8589
}
8690

8791
/**

src/vs/editor/standalone/browser/standaloneServices.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,7 @@ export module StandaloneServices {
11281128
}
11291129

11301130
let initialized = false;
1131+
const onDidInitialize = new Emitter<void>();
11311132
export function initialize(overrides: IEditorOverrideServices): IInstantiationService {
11321133
if (initialized) {
11331134
return instantiationService;
@@ -1163,6 +1164,27 @@ export module StandaloneServices {
11631164
}
11641165
}
11651166

1167+
onDidInitialize.fire();
1168+
11661169
return instantiationService;
11671170
}
1171+
1172+
/**
1173+
* Executes callback once services are initialized.
1174+
*/
1175+
export function withServices(callback: () => IDisposable): IDisposable {
1176+
if (initialized) {
1177+
return callback();
1178+
}
1179+
1180+
const disposable = new DisposableStore();
1181+
1182+
const listener = disposable.add(onDidInitialize.event(() => {
1183+
listener.dispose();
1184+
disposable.add(callback());
1185+
}));
1186+
1187+
return disposable;
1188+
}
1189+
11681190
}

0 commit comments

Comments
 (0)