From 97570d9180eb7cd38bc356c401763acb0c350f8e Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 13 Jan 2017 16:07:26 +0100 Subject: [PATCH] Move MainThreadModeServiceImpl to /workbench/ --- .../editor/common/services/modeServiceImpl.ts | 139 +---------------- src/vs/workbench/electron-browser/shell.ts | 4 +- .../mode/common/workbenchModeService.ts | 147 ++++++++++++++++++ 3 files changed, 151 insertions(+), 139 deletions(-) create mode 100644 src/vs/workbench/services/mode/common/workbenchModeService.ts diff --git a/src/vs/editor/common/services/modeServiceImpl.ts b/src/vs/editor/common/services/modeServiceImpl.ts index d50561825b3..93bfaad7f64 100644 --- a/src/vs/editor/common/services/modeServiceImpl.ts +++ b/src/vs/editor/common/services/modeServiceImpl.ts @@ -7,18 +7,12 @@ import * as nls from 'vs/nls'; import { onUnexpectedError } from 'vs/base/common/errors'; import Event, { Emitter } from 'vs/base/common/event'; -import * as paths from 'vs/base/common/paths'; import { TPromise } from 'vs/base/common/winjs.base'; -import mime = require('vs/base/common/mime'); -import { IFilesConfiguration } from 'vs/platform/files/common/files'; -import { IExtensionService } from 'vs/platform/extensions/common/extensions'; -import { IExtensionPoint, IExtensionPointUser, ExtensionMessageCollector, ExtensionsRegistry } from 'vs/platform/extensions/common/extensionsRegistry'; +import { IExtensionPoint, ExtensionsRegistry } from 'vs/platform/extensions/common/extensionsRegistry'; import { IMode, LanguageId, LanguageIdentifier } from 'vs/editor/common/modes'; import { FrankensteinMode } from 'vs/editor/common/modes/abstractMode'; -import { ModesRegistry } from 'vs/editor/common/modes/modesRegistry'; import { LanguagesRegistry } from 'vs/editor/common/services/languagesRegistry'; -import { ILanguageExtensionPoint, IValidLanguageExtensionPoint, IModeLookupResult, IModeService } from 'vs/editor/common/services/modeService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ILanguageExtensionPoint, IModeLookupResult, IModeService } from 'vs/editor/common/services/modeService'; export const languagesExtPoint: IExtensionPoint = ExtensionsRegistry.registerExtensionPoint('languages', [], { description: nls.localize('vscode.extension.contributes.languages', 'Contributes language declarations.'), @@ -80,52 +74,6 @@ export const languagesExtPoint: IExtensionPoint = Ext } }); -function isUndefinedOrStringArray(value: string[]): boolean { - if (typeof value === 'undefined') { - return true; - } - if (!Array.isArray(value)) { - return false; - } - return value.every(item => typeof item === 'string'); -} - -function isValidLanguageExtensionPoint(value: ILanguageExtensionPoint, collector: ExtensionMessageCollector): boolean { - if (!value) { - collector.error(nls.localize('invalid.empty', "Empty value for `contributes.{0}`", languagesExtPoint.name)); - return false; - } - if (typeof value.id !== 'string') { - collector.error(nls.localize('require.id', "property `{0}` is mandatory and must be of type `string`", 'id')); - return false; - } - if (!isUndefinedOrStringArray(value.extensions)) { - collector.error(nls.localize('opt.extensions', "property `{0}` can be omitted and must be of type `string[]`", 'extensions')); - return false; - } - if (!isUndefinedOrStringArray(value.filenames)) { - collector.error(nls.localize('opt.filenames', "property `{0}` can be omitted and must be of type `string[]`", 'filenames')); - return false; - } - if (typeof value.firstLine !== 'undefined' && typeof value.firstLine !== 'string') { - collector.error(nls.localize('opt.firstLine', "property `{0}` can be omitted and must be of type `string`", 'firstLine')); - return false; - } - if (typeof value.configuration !== 'undefined' && typeof value.configuration !== 'string') { - collector.error(nls.localize('opt.configuration', "property `{0}` can be omitted and must be of type `string`", 'configuration')); - return false; - } - if (!isUndefinedOrStringArray(value.aliases)) { - collector.error(nls.localize('opt.aliases', "property `{0}` can be omitted and must be of type `string[]`", 'aliases')); - return false; - } - if (!isUndefinedOrStringArray(value.mimetypes)) { - collector.error(nls.localize('opt.mimetypes', "property `{0}` can be omitted and must be of type `string[]`", 'mimetypes')); - return false; - } - return true; -} - export class ModeServiceImpl implements IModeService { public _serviceBrand: any; @@ -293,86 +241,3 @@ export class ModeServiceImpl implements IModeService { return this._instantiatedModes[modeId]; } } - -export class MainThreadModeServiceImpl extends ModeServiceImpl { - private _configurationService: IConfigurationService; - private _extensionService: IExtensionService; - private _onReadyPromise: TPromise; - - constructor( - @IExtensionService extensionService: IExtensionService, - @IConfigurationService configurationService: IConfigurationService - ) { - super(); - this._configurationService = configurationService; - this._extensionService = extensionService; - - languagesExtPoint.setHandler((extensions: IExtensionPointUser[]) => { - let allValidLanguages: IValidLanguageExtensionPoint[] = []; - - for (let i = 0, len = extensions.length; i < len; i++) { - let extension = extensions[i]; - - if (!Array.isArray(extension.value)) { - extension.collector.error(nls.localize('invalid', "Invalid `contributes.{0}`. Expected an array.", languagesExtPoint.name)); - continue; - } - - for (let j = 0, lenJ = extension.value.length; j < lenJ; j++) { - let ext = extension.value[j]; - if (isValidLanguageExtensionPoint(ext, extension.collector)) { - let configuration = (ext.configuration ? paths.join(extension.description.extensionFolderPath, ext.configuration) : ext.configuration); - allValidLanguages.push({ - id: ext.id, - extensions: ext.extensions, - filenames: ext.filenames, - filenamePatterns: ext.filenamePatterns, - firstLine: ext.firstLine, - aliases: ext.aliases, - mimetypes: ext.mimetypes, - configuration: configuration - }); - } - } - } - - ModesRegistry.registerLanguages(allValidLanguages); - - }); - - this._configurationService.onDidUpdateConfiguration(e => this.onConfigurationChange(e.config)); - - this.onDidCreateMode((mode) => { - this._extensionService.activateByEvent(`onLanguage:${mode.getId()}`).done(null, onUnexpectedError); - }); - } - - protected _onReady(): TPromise { - if (!this._onReadyPromise) { - const configuration = this._configurationService.getConfiguration(); - this._onReadyPromise = this._extensionService.onReady().then(() => { - this.onConfigurationChange(configuration); - - return true; - }); - } - - return this._onReadyPromise; - } - - private onConfigurationChange(configuration: IFilesConfiguration): void { - - // Clear user configured mime associations - mime.clearTextMimes(true /* user configured */); - - // Register based on settings - if (configuration.files && configuration.files.associations) { - Object.keys(configuration.files.associations).forEach(pattern => { - const langId = configuration.files.associations[pattern]; - const mimetype = this.getMimeForMode(langId) || `text/x-${langId}`; - - mime.registerTextMime({ id: langId, mime: mimetype, filepattern: pattern, userConfigured: true }); - }); - } - } -} diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts index ad907944351..27ae0a752f5 100644 --- a/src/vs/workbench/electron-browser/shell.ts +++ b/src/vs/workbench/electron-browser/shell.ts @@ -68,7 +68,7 @@ import { ICommandService } from 'vs/platform/commands/common/commands'; import { CommandService } from 'vs/platform/commands/common/commandService'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IExtensionService } from 'vs/platform/extensions/common/extensions'; -import { MainThreadModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl'; +import { WorkbenchModeServiceImpl } from 'vs/workbench/services/mode/common/workbenchModeService'; import { IModeService } from 'vs/editor/common/services/modeService'; import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; import { CrashReporter } from 'vs/workbench/electron-browser/crashReporter'; @@ -346,7 +346,7 @@ export class WorkbenchShell { serviceCollection.set(IMarkerService, new SyncDescriptor(MarkerService)); - serviceCollection.set(IModeService, new SyncDescriptor(MainThreadModeServiceImpl)); + serviceCollection.set(IModeService, new SyncDescriptor(WorkbenchModeServiceImpl)); serviceCollection.set(IModelService, new SyncDescriptor(ModelServiceImpl)); diff --git a/src/vs/workbench/services/mode/common/workbenchModeService.ts b/src/vs/workbench/services/mode/common/workbenchModeService.ts new file mode 100644 index 00000000000..fc65de33c91 --- /dev/null +++ b/src/vs/workbench/services/mode/common/workbenchModeService.ts @@ -0,0 +1,147 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import * as nls from 'vs/nls'; +import { onUnexpectedError } from 'vs/base/common/errors'; +import * as paths from 'vs/base/common/paths'; +import { TPromise } from 'vs/base/common/winjs.base'; +import mime = require('vs/base/common/mime'); +import { IFilesConfiguration } from 'vs/platform/files/common/files'; +import { IExtensionService } from 'vs/platform/extensions/common/extensions'; +import { IExtensionPointUser, ExtensionMessageCollector } from 'vs/platform/extensions/common/extensionsRegistry'; +import { ModesRegistry } from 'vs/editor/common/modes/modesRegistry'; +import { ILanguageExtensionPoint, IValidLanguageExtensionPoint } from 'vs/editor/common/services/modeService'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { languagesExtPoint, ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl'; + +export class WorkbenchModeServiceImpl extends ModeServiceImpl { + private _configurationService: IConfigurationService; + private _extensionService: IExtensionService; + private _onReadyPromise: TPromise; + + constructor( + @IExtensionService extensionService: IExtensionService, + @IConfigurationService configurationService: IConfigurationService + ) { + super(); + this._configurationService = configurationService; + this._extensionService = extensionService; + + languagesExtPoint.setHandler((extensions: IExtensionPointUser[]) => { + let allValidLanguages: IValidLanguageExtensionPoint[] = []; + + for (let i = 0, len = extensions.length; i < len; i++) { + let extension = extensions[i]; + + if (!Array.isArray(extension.value)) { + extension.collector.error(nls.localize('invalid', "Invalid `contributes.{0}`. Expected an array.", languagesExtPoint.name)); + continue; + } + + for (let j = 0, lenJ = extension.value.length; j < lenJ; j++) { + let ext = extension.value[j]; + if (isValidLanguageExtensionPoint(ext, extension.collector)) { + let configuration = (ext.configuration ? paths.join(extension.description.extensionFolderPath, ext.configuration) : ext.configuration); + allValidLanguages.push({ + id: ext.id, + extensions: ext.extensions, + filenames: ext.filenames, + filenamePatterns: ext.filenamePatterns, + firstLine: ext.firstLine, + aliases: ext.aliases, + mimetypes: ext.mimetypes, + configuration: configuration + }); + } + } + } + + ModesRegistry.registerLanguages(allValidLanguages); + + }); + + this._configurationService.onDidUpdateConfiguration(e => this.onConfigurationChange(e.config)); + + this.onDidCreateMode((mode) => { + this._extensionService.activateByEvent(`onLanguage:${mode.getId()}`).done(null, onUnexpectedError); + }); + } + + protected _onReady(): TPromise { + if (!this._onReadyPromise) { + const configuration = this._configurationService.getConfiguration(); + this._onReadyPromise = this._extensionService.onReady().then(() => { + this.onConfigurationChange(configuration); + + return true; + }); + } + + return this._onReadyPromise; + } + + private onConfigurationChange(configuration: IFilesConfiguration): void { + + // Clear user configured mime associations + mime.clearTextMimes(true /* user configured */); + + // Register based on settings + if (configuration.files && configuration.files.associations) { + Object.keys(configuration.files.associations).forEach(pattern => { + const langId = configuration.files.associations[pattern]; + const mimetype = this.getMimeForMode(langId) || `text/x-${langId}`; + + mime.registerTextMime({ id: langId, mime: mimetype, filepattern: pattern, userConfigured: true }); + }); + } + } +} + +function isUndefinedOrStringArray(value: string[]): boolean { + if (typeof value === 'undefined') { + return true; + } + if (!Array.isArray(value)) { + return false; + } + return value.every(item => typeof item === 'string'); +} + +function isValidLanguageExtensionPoint(value: ILanguageExtensionPoint, collector: ExtensionMessageCollector): boolean { + if (!value) { + collector.error(nls.localize('invalid.empty', "Empty value for `contributes.{0}`", languagesExtPoint.name)); + return false; + } + if (typeof value.id !== 'string') { + collector.error(nls.localize('require.id', "property `{0}` is mandatory and must be of type `string`", 'id')); + return false; + } + if (!isUndefinedOrStringArray(value.extensions)) { + collector.error(nls.localize('opt.extensions', "property `{0}` can be omitted and must be of type `string[]`", 'extensions')); + return false; + } + if (!isUndefinedOrStringArray(value.filenames)) { + collector.error(nls.localize('opt.filenames', "property `{0}` can be omitted and must be of type `string[]`", 'filenames')); + return false; + } + if (typeof value.firstLine !== 'undefined' && typeof value.firstLine !== 'string') { + collector.error(nls.localize('opt.firstLine', "property `{0}` can be omitted and must be of type `string`", 'firstLine')); + return false; + } + if (typeof value.configuration !== 'undefined' && typeof value.configuration !== 'string') { + collector.error(nls.localize('opt.configuration', "property `{0}` can be omitted and must be of type `string`", 'configuration')); + return false; + } + if (!isUndefinedOrStringArray(value.aliases)) { + collector.error(nls.localize('opt.aliases', "property `{0}` can be omitted and must be of type `string[]`", 'aliases')); + return false; + } + if (!isUndefinedOrStringArray(value.mimetypes)) { + collector.error(nls.localize('opt.mimetypes', "property `{0}` can be omitted and must be of type `string[]`", 'mimetypes')); + return false; + } + return true; +} -- GitLab