Skip to content

Commit 7fc19cd

Browse files
authored
Merge pull request #27 from CodinGame/make-errors-catchable
[FEAT] Make unexpected errors catchable
2 parents 33cd887 + 351bf66 commit 7fc19cd

File tree

4 files changed

+32
-10
lines changed

4 files changed

+32
-10
lines changed

src/languages/index.ts

+17-5
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,23 @@ for (const languageId of languagesIds) {
3939

4040
monaco.languages.setTokenizationSupportFactory(languageId, {
4141
createTokenizationSupport: async () => {
42-
return getOrCreateTextMateTokensProvider(languageId).catch(async err => {
42+
return getOrCreateTextMateTokensProvider(languageId).catch(async (error: Error) => {
4343
const monarchLoader = monarchLanguageLoader[languageId]
4444
if (monarchLoader != null) {
45-
console.warn(`Failed to load TextMate grammar for language ${languageId}, fallback to monarch`, err)
46-
monaco.languages.setMonarchTokensProvider(languageId, (await monarchLoader()).language)
45+
monaco.errorHandler.onUnexpectedError(new Error(`Failed to load TextMate grammar for language ${languageId}, fallback to monarch`, {
46+
cause: error
47+
}))
48+
try {
49+
monaco.languages.setMonarchTokensProvider(languageId, (await monarchLoader()).language)
50+
} catch (error) {
51+
monaco.errorHandler.onUnexpectedError(new Error(`Failed to load Monarch grammar for language ${languageId}`, {
52+
cause: error as Error
53+
}))
54+
}
4755
} else {
48-
console.warn(`Failed to load TextMate grammar for language ${languageId} and no fallback monarch`, err)
56+
monaco.errorHandler.onUnexpectedError(new Error(`Failed to load TextMate grammar for language ${languageId} and no fallback monarch`, {
57+
cause: error
58+
}))
4959
}
5060
return null
5161
})
@@ -87,7 +97,9 @@ languageService.onDidEncounterLanguage(async (languageId) => {
8797
}
8898

8999
loadLanguageConfiguration(languageId).catch(error => {
90-
console.error('Unable to load language configuration', error)
100+
monaco.errorHandler.onUnexpectedError(new Error(`Unable to load language configuration for language ${languageId}`, {
101+
cause: error
102+
}))
91103
})
92104
})
93105

src/languages/textMate/CGTMGrammarFactory.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ const getOnigLib = async (binaryUrl: string): Promise<vscodeTextmate.IOnigLib> =
1616
createOnigString
1717
}
1818
} catch (error) {
19-
console.error('Unable to load wasm', error)
19+
monaco.errorHandler.onUnexpectedError(new Error('Unable to load vscode-oniguruma wasm', {
20+
cause: error as Error
21+
}))
2022
throw error
2123
}
2224
}
@@ -32,7 +34,11 @@ export default class CGTMGrammarFactory extends monaco.extra.TMGrammarFactory {
3234
const grammarFactoryHost: monaco.extra.ITMGrammarFactoryHost = {
3335
// eslint-disable-next-line no-console
3436
logTrace: console.debug,
35-
logError: console.error,
37+
logError: (msg, error: Error) => {
38+
monaco.errorHandler.onUnexpectedError(new Error(msg, {
39+
cause: error
40+
}))
41+
},
3642
async readFile (resource: monaco.Uri): Promise<string> {
3743
const scopeName = resource.path.slice(resource.path.lastIndexOf('/') + 1, -'.json'.length)
3844
const grammarLoader = scopeGrammarLoader[scopeName]

src/monaco.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ monaco.extra.StandaloneServices.initialize({
2121

2222
// Force EOL to be '\n' even on Windows
2323
const configurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService)
24-
configurationService.updateValue('files.eol', '\n').catch(err => {
25-
console.error('Unable to set file eol', err)
24+
configurationService.updateValue('files.eol', '\n').catch((error: Error) => {
25+
monaco.errorHandler.onUnexpectedError(new Error('Unable to set file eol', {
26+
cause: error
27+
}))
2628
})
2729

2830
monaco.errorHandler.setUnexpectedErrorHandler(error => {

src/theme/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ for (const themeExtensionPoint of (defaultThemes as VSCodeTheme[])) {
3535
extensionName: themeExtensionPoint.extension,
3636
extensionIsBuiltin: true
3737
}).catch((error: Error) => {
38-
console.error('Unable to define vscode theme', error)
38+
monaco.errorHandler.onUnexpectedError(new Error(`Unable to define "${themeExtensionPoint.id}" vscode theme`, {
39+
cause: error
40+
}))
3941
})
4042
}
4143

0 commit comments

Comments
 (0)