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();
}
}
})
}

View file

@ -16,13 +16,13 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua
private _onDidChange = new Emitter<monaco.languages.json.LanguageServiceDefaults>();
private _diagnosticsOptions: monaco.languages.json.DiagnosticsOptions;
private _disableDefaultFormatter: boolean;
private _capabilities: monaco.languages.json.Capabilities;
private _languageId: string;
constructor(languageId: string, diagnosticsOptions: monaco.languages.json.DiagnosticsOptions, disableDefaultFormatter: boolean) {
constructor(languageId: string, diagnosticsOptions: monaco.languages.json.DiagnosticsOptions, capabilities: monaco.languages.json.Capabilities) {
this._languageId = languageId;
this.setDiagnosticsOptions(diagnosticsOptions);
this.setDisableDefaultFormatter(disableDefaultFormatter)
this.setCapabilities(capabilities)
}
get onDidChange(): IEvent<monaco.languages.json.LanguageServiceDefaults> {
@ -33,8 +33,8 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua
return this._languageId;
}
get disableDefaultFormatter(): boolean {
return this._disableDefaultFormatter;
get capabilities(): monaco.languages.json.Capabilities {
return this._capabilities;
}
get diagnosticsOptions(): monaco.languages.json.DiagnosticsOptions {
@ -45,8 +45,8 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua
this._diagnosticsOptions = options || Object.create(null);
this._onDidChange.fire(this);
}
setDisableDefaultFormatter(disable: boolean): void {
this._disableDefaultFormatter = disable;
setCapabilities(capabilities: monaco.languages.json.Capabilities): void {
this._capabilities = capabilities || Object.create(null);
this._onDidChange.fire(this);
};
}
@ -58,13 +58,16 @@ const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = {
enableSchemaRequest: false
};
const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, false);
const capabilitiesDefault: monaco.languages.json.Capabilities = {
disableDefaultFormatter: false
}
const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, capabilitiesDefault);
// Export API
function createAPI(): typeof monaco.languages.json {
return {
jsonDefaults: jsonDefaults,
jsonDefaults: jsonDefaults
}
}
monaco.languages.json = createAPI();

14
src/monaco.d.ts vendored
View file

@ -36,15 +36,19 @@ declare module monaco.languages.json {
readonly enableSchemaRequest? : boolean;
}
export interface LanguageServiceDefaults {
readonly onDidChange: IEvent<LanguageServiceDefaults>;
readonly diagnosticsOptions: DiagnosticsOptions;
setDiagnosticsOptions(options: DiagnosticsOptions): void;
export interface Capabilities {
/**
* Disable the default JSON formatter.
*/
readonly disableDefaultFormatter?: boolean;
setDisableDefaultFormatter(disable: boolean): void;
}
export interface LanguageServiceDefaults {
readonly onDidChange: IEvent<LanguageServiceDefaults>;
readonly diagnosticsOptions: DiagnosticsOptions;
readonly capabilities: Capabilities;
setDiagnosticsOptions(options: DiagnosticsOptions): void;
setCapabilities(capabilities: Capabilities): void;
}
export var jsonDefaults: LanguageServiceDefaults;