/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as mode from './jsonMode'; import { Emitter, IEvent, languages } from './fillers/monaco-editor-core' // --- JSON configuration and defaults --------- export interface DiagnosticsOptions { /** * If set, the validator will be enabled and perform syntax validation as well as schema based validation. */ readonly validate?: boolean; /** * If set, comments are tolerated. If set to false, syntax errors will be emitted for comments. */ readonly allowComments?: boolean; /** * A list of known schemas and/or associations of schemas to file names. */ readonly schemas?: { /** * The URI of the schema, which is also the identifier of the schema. */ readonly uri: string; /** * A list of file names that are associated to the schema. The '*' wildcard can be used. For example '*.schema.json', 'package.json' */ readonly fileMatch?: string[]; /** * The schema for the given URI. */ readonly schema?: any; }[]; /** * If set, the schema service would load schema content on-demand with 'fetch' if available */ readonly enableSchemaRequest?: boolean; } export interface ModeConfiguration { /** * Defines whether the built-in documentFormattingEdit provider is enabled. */ readonly documentFormattingEdits?: boolean; /** * Defines whether the built-in documentRangeFormattingEdit provider is enabled. */ readonly documentRangeFormattingEdits?: boolean; /** * Defines whether the built-in completionItemProvider is enabled. */ readonly completionItems?: boolean; /** * Defines whether the built-in hoverProvider is enabled. */ readonly hovers?: boolean; /** * Defines whether the built-in documentSymbolProvider is enabled. */ readonly documentSymbols?: boolean; /** * Defines whether the built-in tokens provider is enabled. */ readonly tokens?: boolean; /** * Defines whether the built-in color provider is enabled. */ readonly colors?: boolean; /** * Defines whether the built-in foldingRange provider is enabled. */ readonly foldingRanges?: boolean; /** * Defines whether the built-in diagnostic provider is enabled. */ readonly diagnostics?: boolean; /** * Defines whether the built-in selection range provider is enabled. */ readonly selectionRanges?: boolean; } export interface LanguageServiceDefaults { readonly languageId: string; readonly onDidChange: IEvent; readonly diagnosticsOptions: DiagnosticsOptions; readonly modeConfiguration: ModeConfiguration; setDiagnosticsOptions(options: DiagnosticsOptions): void; setModeConfiguration(modeConfiguration: ModeConfiguration): void; } class LanguageServiceDefaultsImpl implements LanguageServiceDefaults { private _onDidChange = new Emitter(); private _diagnosticsOptions: DiagnosticsOptions; private _modeConfiguration: ModeConfiguration; private _languageId: string; constructor(languageId: string, diagnosticsOptions: DiagnosticsOptions, modeConfiguration: ModeConfiguration) { this._languageId = languageId; this.setDiagnosticsOptions(diagnosticsOptions); this.setModeConfiguration(modeConfiguration); } get onDidChange(): IEvent { return this._onDidChange.event; } get languageId(): string { return this._languageId; } get modeConfiguration(): ModeConfiguration { return this._modeConfiguration; } get diagnosticsOptions(): DiagnosticsOptions { return this._diagnosticsOptions; } setDiagnosticsOptions(options: DiagnosticsOptions): void { this._diagnosticsOptions = options || Object.create(null); this._onDidChange.fire(this); } setModeConfiguration(modeConfiguration: ModeConfiguration): void { this._modeConfiguration = modeConfiguration || Object.create(null); this._onDidChange.fire(this); }; } const diagnosticDefault: Required = { validate: true, allowComments: true, schemas: [], enableSchemaRequest: false }; const modeConfigurationDefault: Required = { documentFormattingEdits: true, documentRangeFormattingEdits: true, completionItems: true, hovers: true, documentSymbols: true, tokens: true, colors: true, foldingRanges: true, diagnostics: true, selectionRanges: true } export const jsonDefaults: LanguageServiceDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, modeConfigurationDefault); // export to the global based API (languages).json = { jsonDefaults }; // --- Registration to monaco editor --- function getMode(): Promise { return import('./jsonMode'); } languages.register({ id: 'json', extensions: ['.json', '.bowerrc', '.jshintrc', '.jscsrc', '.eslintrc', '.babelrc', '.har'], aliases: ['JSON', 'json'], mimetypes: ['application/json'], }); languages.onLanguage('json', () => { getMode().then(mode => mode.setupMode(jsonDefaults)); });