From d48ba11f8a9c9f26cd6130e0a9b0b15df4f50ded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D4=9C=D0=B5=D1=95?= <5124946+wesinator@users.noreply.github.com> Date: Sat, 29 Jun 2019 11:21:23 -0400 Subject: [PATCH 1/8] Add .har extension --- src/monaco.contribution.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 2408c6d7..c776a3a7 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -67,7 +67,7 @@ function getMode(): Promise { monaco.languages.register({ id: 'json', - extensions: ['.json', '.bowerrc', '.jshintrc', '.jscsrc', '.eslintrc', '.babelrc'], + extensions: ['.json', '.bowerrc', '.jshintrc', '.jscsrc', '.eslintrc', '.babelrc', '.har'], aliases: ['JSON', 'json'], mimetypes: ['application/json'], }); From f558b8f4ff9bcecf24d215db9245f2d8b2985a8d Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Fri, 2 Aug 2019 12:54:47 +0200 Subject: [PATCH 2/8] add config to disable default formatter fixes Microsoft/monaco-editor#889 --- src/jsonMode.ts | 6 ++++-- src/monaco.contribution.ts | 3 ++- src/monaco.d.ts | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/jsonMode.ts b/src/jsonMode.ts index cbdd06e3..cd7b2113 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -29,8 +29,10 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void { 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))); - disposables.push(monaco.languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker))); - disposables.push(monaco.languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker))); + if (!defaults.diagnosticsOptions.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)); diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 2408c6d7..7c6438ca 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -45,7 +45,8 @@ const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = { validate: true, allowComments: true, schemas: [], - enableSchemaRequest: false + enableSchemaRequest: false, + disableDefaultFormatter: false }; const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault); diff --git a/src/monaco.d.ts b/src/monaco.d.ts index c1b21edc..83b5517a 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -30,10 +30,14 @@ declare module monaco.languages.json { */ readonly schema?: any; }[]; + /** + * Disable the default JSON formatter. + */ + readonly disableDefaultFormatter?: boolean; /** * If set, the schema service would load schema content on-demand with 'fetch' if available */ - readonly enableSchemaRequest? : boolean + readonly enableSchemaRequest? : boolean; } export interface LanguageServiceDefaults { From f1b2e50e7c7883233a008d90ac3f7bf71bd8cff9 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Sat, 17 Aug 2019 10:30:05 +0200 Subject: [PATCH 3/8] Move disableDefaultFormatter to LanguageServiceDefaults --- src/jsonMode.ts | 4 ++-- src/monaco.contribution.ts | 17 +++++++++++++---- src/monaco.d.ts | 9 +++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/jsonMode.ts b/src/jsonMode.ts index cd7b2113..671c492f 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -24,12 +24,12 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void { return client.getLanguageServiceWorker(...uris); }; - let languageId = defaults.languageId; + const {disableDefaultFormatter, languageId} = defaults; 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 (!defaults.diagnosticsOptions.disableDefaultFormatter) { + if (!disableDefaultFormatter) { disposables.push(monaco.languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker))); disposables.push(monaco.languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker))); } diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 7c6438ca..fcb81fdc 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -16,11 +16,13 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua private _onDidChange = new Emitter(); private _diagnosticsOptions: monaco.languages.json.DiagnosticsOptions; + private _disableDefaultFormatter: boolean; private _languageId: string; - constructor(languageId: string, diagnosticsOptions: monaco.languages.json.DiagnosticsOptions) { + constructor(languageId: string, diagnosticsOptions: monaco.languages.json.DiagnosticsOptions, disableDefaultFormatter: boolean) { this._languageId = languageId; this.setDiagnosticsOptions(diagnosticsOptions); + this.setDisableDefaultFormatter(disableDefaultFormatter) } get onDidChange(): IEvent { @@ -31,6 +33,10 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua return this._languageId; } + get disableDefaultFormatter(): boolean { + return this._disableDefaultFormatter; + } + get diagnosticsOptions(): monaco.languages.json.DiagnosticsOptions { return this._diagnosticsOptions; } @@ -39,17 +45,20 @@ 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; + this._onDidChange.fire(this); + }; } const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = { validate: true, allowComments: true, schemas: [], - enableSchemaRequest: false, - disableDefaultFormatter: false + enableSchemaRequest: false }; -const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault); +const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, false); // Export API diff --git a/src/monaco.d.ts b/src/monaco.d.ts index 83b5517a..25e04d49 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -30,10 +30,6 @@ declare module monaco.languages.json { */ readonly schema?: any; }[]; - /** - * Disable the default JSON formatter. - */ - readonly disableDefaultFormatter?: boolean; /** * If set, the schema service would load schema content on-demand with 'fetch' if available */ @@ -44,6 +40,11 @@ declare module monaco.languages.json { readonly onDidChange: IEvent; readonly diagnosticsOptions: DiagnosticsOptions; setDiagnosticsOptions(options: DiagnosticsOptions): void; + /** + * Disable the default JSON formatter. + */ + readonly disableDefaultFormatter?: boolean; + setDisableDefaultFormatter(disable: boolean): void; } export var jsonDefaults: LanguageServiceDefaults; From 002037408af6679c5f01ddce88d7fe096ec48721 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Mon, 19 Aug 2019 13:55:20 +0200 Subject: [PATCH 4/8] Add Capabilities, add change handler. --- src/jsonMode.ts | 31 +++++++++++++++++++++++++------ src/monaco.contribution.ts | 21 ++++++++++++--------- src/monaco.d.ts | 14 +++++++++----- 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/jsonMode.ts b/src/jsonMode.ts index 671c492f..5fe3a980 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -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(); + } + } + }) } diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index fcb81fdc..9ef8a830 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -16,13 +16,13 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua private _onDidChange = new Emitter(); 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 { @@ -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(); diff --git a/src/monaco.d.ts b/src/monaco.d.ts index 25e04d49..4a81873a 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -36,15 +36,19 @@ declare module monaco.languages.json { readonly enableSchemaRequest? : boolean; } - export interface LanguageServiceDefaults { - readonly onDidChange: IEvent; - 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; + readonly diagnosticsOptions: DiagnosticsOptions; + readonly capabilities: Capabilities; + setDiagnosticsOptions(options: DiagnosticsOptions): void; + setCapabilities(capabilities: Capabilities): void; } export var jsonDefaults: LanguageServiceDefaults; From bdc9560718e26b70ee82c7a50be8a3abbe0aa20c Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Tue, 20 Aug 2019 18:03:47 +0200 Subject: [PATCH 5/8] generalize as mode configuration --- package-lock.json | 6 ++-- src/jsonMode.ts | 73 ++++++++++++++++++++++++-------------- src/monaco.contribution.ts | 29 +++++++++------ src/monaco.d.ts | 53 +++++++++++++++++++++++---- 4 files changed, 116 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35f5cd68..4938900c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,9 +17,9 @@ "dev": true }, "monaco-editor-core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.16.0.tgz", - "integrity": "sha512-8tm8vq0SVuQ+VXZFtPIEIronK3102SYCWe8wviWu/5TV4zlDQcf4YdzI6A4CrNqbUc46dD0ngijaKWoRSViI8g==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.16.1.tgz", + "integrity": "sha512-nydAuVbU3B1T/sNz4ZiO+92HUnLyVE4YQWr91R8WDEBItFZuwPs7Z2VaCTgouU6BwNrSnDdK/kAyhKgpih+GHQ==", "dev": true }, "monaco-languages": { diff --git a/src/jsonMode.ts b/src/jsonMode.ts index 5fe3a980..58f587f9 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -16,7 +16,7 @@ import IDisposable = monaco.IDisposable; export function setupMode(defaults: LanguageServiceDefaultsImpl): void { const disposables: IDisposable[] = []; - let formattingDisposables: IDisposable[] = [] + const providers: IDisposable[] = []; const client = new WorkerManager(defaults); disposables.push(client); @@ -25,40 +25,61 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void { return client.getLanguageServiceWorker(...uris); }; - 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))); - } + function registerProviders(): void { + const { languageId, modeConfiguration } = defaults; + + disposeAll(providers); - if (!capabilities.disableDefaultFormatter) { - registerFormattingDisposables() + if (modeConfiguration.documentFormattingEdits) { + providers.push(monaco.languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker))); + } + if (modeConfiguration.documentRangeFormattingEdits) { + providers.push(monaco.languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker))); + } + if (modeConfiguration.completionItems) { + providers.push(monaco.languages.registerCompletionItemProvider(languageId, new languageFeatures.CompletionAdapter(worker))); + } + if (modeConfiguration.hovers) { + providers.push(monaco.languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker))); + } + if (modeConfiguration.documentSymbols) { + providers.push(monaco.languages.registerDocumentSymbolProvider(languageId, new languageFeatures.DocumentSymbolAdapter(worker))); + } + if (modeConfiguration.tokens) { + providers.push(monaco.languages.setTokensProvider(languageId, createTokenizationSupport(true))); + } + if (modeConfiguration.colors) { + providers.push(monaco.languages.registerColorProvider(languageId, new languageFeatures.DocumentColorAdapter(worker))); + } + if (modeConfiguration.foldingRanges) { + providers.push(monaco.languages.registerFoldingRangeProvider(languageId, new languageFeatures.FoldingRangeAdapter(worker))); + } + if (modeConfiguration.diagnostics) { + providers.push(new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults)); + } } - 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))); - 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))); + registerProviders(); + + disposables.push(monaco.languages.setLanguageConfiguration(defaults.languageId, richEditConfiguration)); + let modeConfiguration = defaults.modeConfiguration; 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(); - } + if (newDefaults.modeConfiguration !== modeConfiguration) { + modeConfiguration = newDefaults.modeConfiguration; + registerProviders(); } - }) + }); + + disposables.push({ dispose: () => disposeAll(providers) }); } +function disposeAll(disposables: IDisposable[]) { + while (disposables.length) { + disposables.pop().dispose(); + } +} const richEditConfiguration: monaco.languages.LanguageConfiguration = { wordPattern: /(-?\d*\.\d\w*)|([^\[\{\]\}\:\"\,\s]+)/g, diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 9ef8a830..e0060e63 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -16,13 +16,13 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua private _onDidChange = new Emitter(); private _diagnosticsOptions: monaco.languages.json.DiagnosticsOptions; - private _capabilities: monaco.languages.json.Capabilities; + private _modeConfiguration: monaco.languages.json.ModeConfiguration; private _languageId: string; - constructor(languageId: string, diagnosticsOptions: monaco.languages.json.DiagnosticsOptions, capabilities: monaco.languages.json.Capabilities) { + constructor(languageId: string, diagnosticsOptions: monaco.languages.json.DiagnosticsOptions, modeConfiguration: monaco.languages.json.ModeConfiguration) { this._languageId = languageId; this.setDiagnosticsOptions(diagnosticsOptions); - this.setCapabilities(capabilities) + this.setModeConfiguration(modeConfiguration) } get onDidChange(): IEvent { @@ -33,8 +33,8 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua return this._languageId; } - get capabilities(): monaco.languages.json.Capabilities { - return this._capabilities; + get modeConfiguration(): monaco.languages.json.ModeConfiguration { + return this._modeConfiguration; } 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); } - setCapabilities(capabilities: monaco.languages.json.Capabilities): void { - this._capabilities = capabilities || Object.create(null); + setModeConfiguration(modeConfiguration: monaco.languages.json.ModeConfiguration): void { + this._modeConfiguration = modeConfiguration || Object.create(null); this._onDidChange.fire(this); }; } @@ -58,11 +58,19 @@ const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = { enableSchemaRequest: false }; -const capabilitiesDefault: monaco.languages.json.Capabilities = { - disableDefaultFormatter: false +const providersDefault: monaco.languages.json.ModeConfiguration = { + documentFormattingEdits: true, + documentRangeFormattingEdits: true, + completionItems: true, + hovers: true, + documentSymbols: true, + tokens: true, + colors: true, + foldingRanges: true, + diagnostics: true } -const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, capabilitiesDefault); +const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, providersDefault); // Export API function createAPI(): typeof monaco.languages.json { @@ -84,6 +92,7 @@ monaco.languages.register({ aliases: ['JSON', 'json'], mimetypes: ['application/json'], }); + monaco.languages.onLanguage('json', () => { getMode().then(mode => mode.setupMode(jsonDefaults)); }); diff --git a/src/monaco.d.ts b/src/monaco.d.ts index 4a81873a..202ca1ed 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -33,22 +33,63 @@ declare module monaco.languages.json { /** * If set, the schema service would load schema content on-demand with 'fetch' if available */ - readonly enableSchemaRequest? : boolean; + readonly enableSchemaRequest?: boolean; } - export interface Capabilities { + export interface ModeConfiguration { /** - * Disable the default JSON formatter. + * Defines wheter the built-in documentFormattingEdit provider is enabled. */ - readonly disableDefaultFormatter?: boolean; + readonly documentFormattingEdits?: boolean; + + /** + * Defines wheter the built-in documentRangeFormattingEdit provider is enabled. + */ + readonly documentRangeFormattingEdits?: boolean; + + /** + * Defines wheter the built-in completionItemProvider is enabled. + */ + readonly completionItems?: boolean; + + /** + * Defines wheter the built-in hoverProvider is enabled. + */ + readonly hovers?: boolean; + + /** + * Defines wheter the built-in documentSymbolProvider is enabled. + */ + readonly documentSymbols?: boolean; + + /** + * Defines wheter the built-in tokens provider is enabled. + */ + readonly tokens?: boolean; + + /** + * Defines wheter the built-in color provider is enabled. + */ + readonly colors?: boolean; + + /** + * Defines wheter the built-in foldingRange provider is enabled. + */ + readonly foldingRanges?: boolean; + + /** + * Defines wheter the built-in diagnostic provider is enabled. + */ + readonly diagnostics?: boolean; + } export interface LanguageServiceDefaults { readonly onDidChange: IEvent; readonly diagnosticsOptions: DiagnosticsOptions; - readonly capabilities: Capabilities; + readonly modeConfiguration: ModeConfiguration; setDiagnosticsOptions(options: DiagnosticsOptions): void; - setCapabilities(capabilities: Capabilities): void; + setModeConfiguration(modeConfiguration: ModeConfiguration): void; } export var jsonDefaults: LanguageServiceDefaults; From de8bd2ba4f29a06667a55044ca5661180be84b02 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 21 Aug 2019 08:54:36 +0200 Subject: [PATCH 6/8] fix typo --- src/monaco.d.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/monaco.d.ts b/src/monaco.d.ts index 202ca1ed..091b2184 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -38,47 +38,47 @@ declare module monaco.languages.json { export interface ModeConfiguration { /** - * Defines wheter the built-in documentFormattingEdit provider is enabled. + * Defines whether the built-in documentFormattingEdit provider is enabled. */ readonly documentFormattingEdits?: boolean; /** - * Defines wheter the built-in documentRangeFormattingEdit provider is enabled. + * Defines whether the built-in documentRangeFormattingEdit provider is enabled. */ readonly documentRangeFormattingEdits?: boolean; /** - * Defines wheter the built-in completionItemProvider is enabled. + * Defines whether the built-in completionItemProvider is enabled. */ readonly completionItems?: boolean; /** - * Defines wheter the built-in hoverProvider is enabled. + * Defines whether the built-in hoverProvider is enabled. */ readonly hovers?: boolean; /** - * Defines wheter the built-in documentSymbolProvider is enabled. + * Defines whether the built-in documentSymbolProvider is enabled. */ readonly documentSymbols?: boolean; /** - * Defines wheter the built-in tokens provider is enabled. + * Defines whether the built-in tokens provider is enabled. */ readonly tokens?: boolean; /** - * Defines wheter the built-in color provider is enabled. + * Defines whether the built-in color provider is enabled. */ readonly colors?: boolean; /** - * Defines wheter the built-in foldingRange provider is enabled. + * Defines whether the built-in foldingRange provider is enabled. */ readonly foldingRanges?: boolean; /** - * Defines wheter the built-in diagnostic provider is enabled. + * Defines whether the built-in diagnostic provider is enabled. */ readonly diagnostics?: boolean; From 6ca4958538887dc536527d1ae8c7b4cf79467033 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 21 Aug 2019 10:12:55 +0200 Subject: [PATCH 7/8] more polish --- src/jsonMode.ts | 10 ++++++++-- src/monaco.contribution.ts | 5 ++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/jsonMode.ts b/src/jsonMode.ts index 58f587f9..656136fb 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -13,7 +13,7 @@ import { createTokenizationSupport } from './tokenization'; import Uri = monaco.Uri; import IDisposable = monaco.IDisposable; -export function setupMode(defaults: LanguageServiceDefaultsImpl): void { +export function setupMode(defaults: LanguageServiceDefaultsImpl): IDisposable { const disposables: IDisposable[] = []; const providers: IDisposable[] = []; @@ -72,7 +72,13 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void { } }); - disposables.push({ dispose: () => disposeAll(providers) }); + disposables.push(asDisposable(providers)); + + return asDisposable(disposables); +} + +function asDisposable(disposables: IDisposable[]): IDisposable { + return { dispose: () => disposeAll(disposables) }; } function disposeAll(disposables: IDisposable[]) { diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index e0060e63..dbe911e9 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -8,7 +8,6 @@ import * as mode from './jsonMode'; import Emitter = monaco.Emitter; import IEvent = monaco.IEvent; -import IDisposable = monaco.IDisposable; // --- JSON configuration and defaults --------- @@ -58,7 +57,7 @@ const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = { enableSchemaRequest: false }; -const providersDefault: monaco.languages.json.ModeConfiguration = { +const modeConfigurationDefault: monaco.languages.json.ModeConfiguration = { documentFormattingEdits: true, documentRangeFormattingEdits: true, completionItems: true, @@ -70,7 +69,7 @@ const providersDefault: monaco.languages.json.ModeConfiguration = { diagnostics: true } -const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, providersDefault); +const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, modeConfigurationDefault); // Export API function createAPI(): typeof monaco.languages.json { From 603e67266106a2e0e425e1d14418fdf1fab9498c Mon Sep 17 00:00:00 2001 From: Peng Lyu Date: Wed, 4 Sep 2019 10:37:18 -0700 Subject: [PATCH 8/8] 2.6.0 --- package-lock.json | 6 +++--- package.json | 4 ++-- src/languageFeatures.ts | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35f5cd68..a17c0e29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,9 +17,9 @@ "dev": true }, "monaco-editor-core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.16.0.tgz", - "integrity": "sha512-8tm8vq0SVuQ+VXZFtPIEIronK3102SYCWe8wviWu/5TV4zlDQcf4YdzI6A4CrNqbUc46dD0ngijaKWoRSViI8g==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.18.0.tgz", + "integrity": "sha512-URcHNAqH9X2JvO2skkIisAL4XAcZXxrDC8kcyr453sXQpOHUxicZpXHQb4/arXGvxrWvei3a6zZzpdT1gjeVJA==", "dev": true }, "monaco-languages": { diff --git a/package.json b/package.json index 7edab2ab..5dd0ce41 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "monaco-json", - "version": "2.5.1", + "version": "2.6.0", "description": "JSON plugin for the Monaco Editor", "scripts": { "compile": "mrmdir ./out && tsc -p ./src/tsconfig.json && tsc -p ./src/tsconfig.esm.json", @@ -20,7 +20,7 @@ }, "devDependencies": { "jsonc-parser": "^2.0.3", - "monaco-editor-core": "0.16.1", + "monaco-editor-core": "0.18.0", "monaco-languages": "1.7.0", "monaco-plugin-helpers": "^1.0.2", "requirejs": "^2.3.6", diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 88085318..c050aeed 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -393,7 +393,8 @@ export class DocumentSymbolAdapter implements monaco.languages.DocumentSymbolPro containerName: item.containerName, kind: toSymbolKind(item.kind), range: toRange(item.location.range), - selectionRange: toRange(item.location.range) + selectionRange: toRange(item.location.range), + tags: [] })); }); }