Add Capabilities, add change handler.

This commit is contained in:
Dominik Moritz 2019-08-19 13:55:20 +02:00
parent f1b2e50e7c
commit 002037408a
3 changed files with 46 additions and 20 deletions

View file

@ -15,7 +15,8 @@ import IDisposable = monaco.IDisposable;
export function setupMode(defaults: LanguageServiceDefaultsImpl): void {
let disposables: IDisposable[] = [];
const disposables: IDisposable[] = [];
let formattingDisposables: IDisposable[] = []
const client = new WorkerManager(defaults);
disposables.push(client);
@ -24,20 +25,38 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void {
return client.getLanguageServiceWorker(...uris);
};
const {disableDefaultFormatter, languageId} = defaults;
const {languageId, capabilities} = defaults;
function registerFormattingDisposables() {
formattingDisposables.push(monaco.languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker)));
formattingDisposables.push(monaco.languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker)));
}
if (!capabilities.disableDefaultFormatter) {
registerFormattingDisposables()
}
disposables.push(monaco.languages.registerCompletionItemProvider(languageId, new languageFeatures.CompletionAdapter(worker)));
disposables.push(monaco.languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker)));
disposables.push(monaco.languages.registerDocumentSymbolProvider(languageId, new languageFeatures.DocumentSymbolAdapter(worker)));
if (!disableDefaultFormatter) {
disposables.push(monaco.languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker)));
disposables.push(monaco.languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker)));
}
disposables.push(new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults));
disposables.push(monaco.languages.setTokensProvider(languageId, createTokenizationSupport(true)));
disposables.push(monaco.languages.setLanguageConfiguration(languageId, richEditConfiguration));
disposables.push(monaco.languages.registerColorProvider(languageId, new languageFeatures.DocumentColorAdapter(worker)));
disposables.push(monaco.languages.registerFoldingRangeProvider(languageId, new languageFeatures.FoldingRangeAdapter(worker)));
defaults.onDidChange((newDefaults) => {
const {capabilities} = newDefaults;
const formattingDisabled = formattingDisposables.length === 0;
if (formattingDisabled != capabilities.disableDefaultFormatter) {
if (capabilities.disableDefaultFormatter) {
formattingDisposables.forEach(d => d.dispose())
formattingDisposables = [];
} else {
registerFormattingDisposables();
}
}
})
}