Skip to content

Commit 7f28141

Browse files
authored
Merge pull request #51 from CodinGame/update-vscode-api
Update vscode api
2 parents fe6b502 + 5b0b92c commit 7f28141

File tree

9 files changed

+84
-51
lines changed

9 files changed

+84
-51
lines changed

package-lock.json

Lines changed: 20 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
],
6767
"dependencies": {
6868
"monaco-editor": "npm:@codingame/monaco-editor@^0.33.6",
69-
"vscode": "npm:@codingame/monaco-vscode-api@~1.67.9",
69+
"vscode": "npm:@codingame/monaco-vscode-api@~1.67.19",
7070
"vscode-oniguruma": "^1.6.2"
7171
},
7272
"devDependencies": {
@@ -88,6 +88,7 @@
8888
"@types/js-yaml": "^4.0.5",
8989
"@types/node": "16.11.7",
9090
"@types/rollup-plugin-node-builtins": "^2.1.2",
91+
"@types/vscode": "~1.67.0",
9192
"@typescript-eslint/eslint-plugin": "5.27.1",
9293
"@typescript-eslint/parser": "5.27.1",
9394
"conventional-changelog-conventionalcommits": "^4.6.3",

src/configuration/index.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import * as monaco from 'monaco-editor'
2+
import { IConfigurationChangeEvent, IConfigurationService } from 'vscode/services'
3+
import * as vscode from 'vscode'
4+
import { updateUserConfiguration } from 'vscode/service-override/configuration'
25
import extensions from '../languages/extensions/extensions.json'
36

47
const configurationRegistry = monaco.extra.Registry.as<monaco.extra.IConfigurationRegistry>(monaco.extra.ConfigurationExtensions.Configuration)
@@ -7,24 +10,27 @@ configurationRegistry.registerDefaultConfigurations([{
710
'editor.codeLens': false,
811
'editor.fontSize': 12,
912
'editor.maxTokenizationLineLength': 1000,
10-
'editor.quickSuggestions': false
13+
'editor.quickSuggestions': false,
14+
'files.eol': '\n'
1115
}
1216
}])
1317

1418
configurationRegistry.registerDefaultConfigurations([{
1519
overrides: extensions.configurationDefaults
1620
}])
1721

18-
const simpleConfigurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService) as monaco.extra.StandaloneConfigurationService
19-
20-
export const onConfigurationChanged = simpleConfigurationService.onDidChangeConfiguration
22+
export function onConfigurationChanged (listener: (e: IConfigurationChangeEvent) => void): vscode.Disposable {
23+
const configurationService = monaco.extra.StandaloneServices.get(IConfigurationService)
24+
return configurationService.onDidChangeConfiguration(listener)
25+
}
2126

2227
export function getConfiguration<C = Partial<monaco.editor.IEditorOptions>> (language?: string, section: string = 'editor'): C | undefined {
23-
return simpleConfigurationService.getValue(section, { overrideIdentifier: language })
28+
const configurationService = monaco.extra.StandaloneServices.get(IConfigurationService)
29+
return configurationService.getValue(section, { overrideIdentifier: language })
2430
}
2531

26-
export function updateUserConfiguration (configurationJson: string): void {
27-
simpleConfigurationService.updateUserConfiguration(configurationJson)
32+
export {
33+
updateUserConfiguration
2834
}
2935

3036
export function registerConfigurations (configurations: monaco.extra.IConfigurationNode[], validate?: boolean): void {

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: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import './languages'
33
import './theme'
44
import getModelEditorServiceOverride from 'vscode/service-override/modelEditor'
55
import getMessageServiceOverride from 'vscode/service-override/messages'
6+
import getConfigurationServiceOverride from 'vscode/service-override/configuration'
67
import './worker'
8+
import { createConfiguredEditor } from 'vscode/monaco'
79
import setupExtensions from './extensions'
810
import 'monaco-editor/esm/vs/editor/editor.all'
911
import 'monaco-editor/esm/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp'
@@ -22,25 +24,21 @@ monaco.extra.StandaloneServices.initialize({
2224
...getModelEditorServiceOverride((model, input, sideBySide) => {
2325
return editorOpenHandlerRegistry.openCodeEditor(model, input, sideBySide)
2426
}),
25-
...getMessageServiceOverride(document.body)
27+
...getMessageServiceOverride(document.body),
28+
...getConfigurationServiceOverride()
2629
})
2730
// Disable high contrast autodetection because it fallbacks on the hc-black no matter what
28-
monaco.extra.StandaloneServices.get(monaco.editor.IStandaloneThemeService).setAutoDetectHighContrast(false)
29-
30-
// Force EOL to be '\n' even on Windows
31-
const configurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService)
32-
configurationService.updateValue('files.eol', '\n').catch((error: Error) => {
33-
monaco.errorHandler.onUnexpectedError(new Error('Unable to set file eol', {
34-
cause: error
35-
}))
31+
setTimeout(() => {
32+
// In a timeout so the service can be overriden
33+
monaco.extra.StandaloneServices.get(monaco.editor.IStandaloneThemeService).setAutoDetectHighContrast(false)
3634
})
3735

3836
monaco.errorHandler.setUnexpectedErrorHandler(error => {
3937
console.warn('Unexpected error', error)
4038
})
4139

4240
function createEditor (domElement: HTMLElement, options?: monaco.editor.IStandaloneEditorConstructionOptions): monaco.editor.IStandaloneCodeEditor {
43-
const editor = monaco.editor.create(domElement, options)
41+
const editor = createConfiguredEditor(domElement, options)
4442

4543
setupExtensions(editor)
4644

0 commit comments

Comments
 (0)