Skip to content

Commit d35e9b2

Browse files
committed
fix: Never use a service at code root
1 parent 30bdce9 commit d35e9b2

File tree

7 files changed

+51
-30
lines changed

7 files changed

+51
-30
lines changed

src/configuration/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@ configurationRegistry.registerDefaultConfigurations([{
1616
overrides: extensions.configurationDefaults
1717
}])
1818

19-
const simpleConfigurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService) as monaco.extra.StandaloneConfigurationService
20-
21-
export const onConfigurationChanged = simpleConfigurationService.onDidChangeConfiguration
19+
export function onConfigurationChanged (listener: (e: monaco.extra.IConfigurationChangeEvent) => void): monaco.IDisposable {
20+
const simpleConfigurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService) as monaco.extra.StandaloneConfigurationService
21+
return simpleConfigurationService.onDidChangeConfiguration(listener)
22+
}
2223

2324
export function getConfiguration<C = Partial<monaco.editor.IEditorOptions>> (language?: string, section: string = 'editor'): C | undefined {
25+
const simpleConfigurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService) as monaco.extra.StandaloneConfigurationService
2426
return simpleConfigurationService.getValue(section, { overrideIdentifier: language })
2527
}
2628

2729
export function updateUserConfiguration (configurationJson: string): void {
30+
const simpleConfigurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService) as monaco.extra.StandaloneConfigurationService
2831
simpleConfigurationService.updateUserConfiguration(configurationJson)
2932
}
3033

src/features/htmlContribution.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,16 @@ registerConfigurations([{
2828
}
2929
}])
3030

31-
let autoClosingTags = getConfiguration<boolean>(undefined, 'html.autoClosingTags')!
32-
onConfigurationChanged(e => {
33-
if (e.affectsConfiguration('html.autoClosingTags')) {
34-
autoClosingTags = getConfiguration<boolean>(undefined, 'html.autoClosingTags')!
35-
}
31+
let autoClosingTags = false
32+
33+
setTimeout(() => {
34+
// In a timeout so the service can be overriden
35+
autoClosingTags = getConfiguration<boolean>(undefined, 'html.autoClosingTags')!
36+
onConfigurationChanged(e => {
37+
if (e.affectsConfiguration('html.autoClosingTags')) {
38+
autoClosingTags = getConfiguration<boolean>(undefined, 'html.autoClosingTags')!
39+
}
40+
})
3641
})
3742

3843
function autoCloseHtmlTags (editor: monaco.editor.ICodeEditor): monaco.IDisposable {
@@ -100,13 +105,17 @@ function autoCloseHtmlTags (editor: monaco.editor.ICodeEditor): monaco.IDisposab
100105
return disposableStore
101106
}
102107

103-
const codeEditors = monaco.extra.StandaloneServices.get(monaco.extra.ICodeEditorService).listCodeEditors()
104-
for (const editor of codeEditors) {
105-
autoCloseHtmlTags(editor)
106-
}
107-
monaco.editor.onDidCreateEditor(editor => {
108-
autoCloseHtmlTags(editor)
108+
setTimeout(() => {
109+
// In a timeout so the service can be overriden
110+
const codeEditors = monaco.extra.StandaloneServices.get(monaco.extra.ICodeEditorService).listCodeEditors()
111+
for (const editor of codeEditors) {
112+
autoCloseHtmlTags(editor)
113+
}
114+
monaco.editor.onDidCreateEditor(editor => {
115+
autoCloseHtmlTags(editor)
116+
})
109117
})
118+
110119
/**
111120
* End autoclosing html tags
112121
*/
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as monaco from 'monaco-editor'
22

3-
const keybindingService = monaco.extra.StandaloneServices.get(monaco.extra.IKeybindingService) as monaco.extra.StandaloneKeybindingService
4-
53
export function updateKeybindings (bindings: monaco.extra.IUserFriendlyKeybinding[]): void {
4+
const keybindingService = monaco.extra.StandaloneServices.get(monaco.extra.IKeybindingService) as monaco.extra.StandaloneKeybindingService
65
keybindingService.setUserKeybindings(bindings)
76
}

src/languages/index.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ for (const [languageId, aliases] of Object.entries(customAliases)) {
2626
})
2727
}
2828

29-
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
3029
const languagesIds = Array.from(new Set([
3130
...Object.keys(monarchLanguageLoader),
3231
...textMateLanguages.map(rawLanguage => rawLanguage.id)
@@ -91,19 +90,24 @@ async function loadLanguageConfiguration (languageId: string) {
9190
}
9291
}
9392

94-
languageService.onDidEncounterLanguage(async (languageId) => {
95-
if (languageId === 'plaintext') {
96-
return
97-
}
93+
setTimeout(() => {
94+
// In a timeout so the service can be overriden
95+
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
96+
languageService.onDidEncounterLanguage(async (languageId) => {
97+
if (languageId === 'plaintext') {
98+
return
99+
}
98100

99-
loadLanguageConfiguration(languageId).catch(error => {
100-
monaco.errorHandler.onUnexpectedError(new Error(`Unable to load language configuration for language ${languageId}`, {
101-
cause: error
102-
}))
101+
loadLanguageConfiguration(languageId).catch(error => {
102+
monaco.errorHandler.onUnexpectedError(new Error(`Unable to load language configuration for language ${languageId}`, {
103+
cause: error
104+
}))
105+
})
103106
})
104107
})
105108

106109
function getMonacoLanguage (languageOrModeId: string): string {
110+
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
107111
const modeId = languageService.getLanguageIdByLanguageName(languageOrModeId.toLowerCase())
108112
if (modeId != null) {
109113
return modeId

src/languages/snippets/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class SimpleSnippetService implements monaco.extra.ISnippetsService {
3737
}
3838
}
3939

40-
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
41-
const languageConfigurationService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageConfigurationService)
42-
monaco.extra.setSnippetSuggestSupport(new monaco.extra.SnippetCompletionProvider(languageService, new SimpleSnippetService(), languageConfigurationService))
40+
setTimeout(() => {
41+
// In a timeout so the service can be overriden
42+
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
43+
const languageConfigurationService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageConfigurationService)
44+
monaco.extra.setSnippetSuggestSupport(new monaco.extra.SnippetCompletionProvider(languageService, new SimpleSnippetService(), languageConfigurationService))
45+
})

src/languages/textMate/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ function getOrCreateGrammarFactory (): CGTMGrammarFactory {
3232
return textMateGrammarFactory
3333
}
3434

35-
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
3635
async function createTextMateTokensProvider (languageId: string): Promise<monaco.languages.ITokenizationSupport | null> {
36+
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
3737
const grammarFactory = getOrCreateGrammarFactory()
3838
const encodedLanguageId = languageService.languageIdCodec.encodeLanguageId(languageId)
3939
if (!grammarFactory.has(languageId)) {

src/monaco.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ monaco.extra.StandaloneServices.initialize({
2525
...getMessageServiceOverride(document.body)
2626
})
2727
// Disable high contrast autodetection because it fallbacks on the hc-black no matter what
28-
monaco.extra.StandaloneServices.get(monaco.editor.IStandaloneThemeService).setAutoDetectHighContrast(false)
28+
setTimeout(() => {
29+
// In a timeout so the service can be overriden
30+
monaco.extra.StandaloneServices.get(monaco.editor.IStandaloneThemeService).setAutoDetectHighContrast(false)
31+
})
2932

3033
monaco.errorHandler.setUnexpectedErrorHandler(error => {
3134
console.warn('Unexpected error', error)

0 commit comments

Comments
 (0)