From 11ea2b653ea7a907caa3fb7cc10a7b46269ea524 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Tue, 8 Mar 2016 21:46:52 +0100 Subject: [PATCH] Show message when "auto" is detected --- build/lib/util.js | 4 +++- .../browser/standalone/standaloneServices.ts | 2 +- .../common/services/modelServiceImpl.ts | 19 ++++++++++++++++++- .../editor/test/common/servicesTestUtils.ts | 2 +- .../test/common/projectResolver.test.ts | 3 ++- src/vs/workbench/electron-browser/shell.ts | 2 +- .../test/node/api/extHostApiCommands.test.ts | 3 ++- 7 files changed, 28 insertions(+), 7 deletions(-) diff --git a/build/lib/util.js b/build/lib/util.js index 43046c8ed9d..84fa4aac3d9 100644 --- a/build/lib/util.js +++ b/build/lib/util.js @@ -252,7 +252,9 @@ exports.loadSourcemaps = function () { exports.rimraf = function(dir) { return function (cb) { - rimraf(dir, cb); + rimraf(dir, { + maxBusyTries: 1 + }, cb); }; }; diff --git a/src/vs/editor/browser/standalone/standaloneServices.ts b/src/vs/editor/browser/standalone/standaloneServices.ts index 384b265f7c3..05514c14088 100644 --- a/src/vs/editor/browser/standalone/standaloneServices.ts +++ b/src/vs/editor/browser/standalone/standaloneServices.ts @@ -187,7 +187,7 @@ export function getOrCreateStaticServices(services?: IEditorOverrideServices): I let markerService = services.markerService || new MainProcessMarkerService(threadService); let requestService = services.requestService || new SimpleEditorRequestService(contextService, telemetryService); let modeService = services.modeService || new MainThreadModeServiceImpl(threadService, extensionService, configurationService); - let modelService = services.modelService || new ModelServiceImpl(threadService, markerService, modeService, configurationService); + let modelService = services.modelService || new ModelServiceImpl(threadService, markerService, modeService, configurationService, messageService); let editorWorkerService = services.editorWorkerService || new EditorWorkerServiceImpl(modelService); let codeEditorService = services.codeEditorService || new CodeEditorServiceImpl(); diff --git a/src/vs/editor/common/services/modelServiceImpl.ts b/src/vs/editor/common/services/modelServiceImpl.ts index 725e42949c6..90b877aa5e1 100644 --- a/src/vs/editor/common/services/modelServiceImpl.ts +++ b/src/vs/editor/common/services/modelServiceImpl.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; +import * as nls from 'vs/nls'; import {onUnexpectedError} from 'vs/base/common/errors'; import Event, {Emitter} from 'vs/base/common/event'; import {IEmitterEvent} from 'vs/base/common/eventEmitter'; @@ -26,6 +27,7 @@ import {IResourceService} from 'vs/editor/common/services/resourceService'; import * as platform from 'vs/base/common/platform'; import {IConfigurationService, ConfigurationServiceEventTypes, IConfigurationServiceEvent} from 'vs/platform/configuration/common/configuration'; import {DEFAULT_INDENTATION} from 'vs/editor/common/config/defaultConfig'; +import {IMessageService} from 'vs/platform/message/common/message'; export interface IRawModelData { url:URI; @@ -188,6 +190,7 @@ export class ModelServiceImpl implements IModelService { private _markerServiceSubscription: IDisposable; private _threadService: IThreadService; private _modeService: IModeService; + private _messageService: IMessageService; private _configurationService: IConfigurationService; private _configurationServiceSubscription: IDisposable; private _workerHelper: ModelServiceWorkerHelper; @@ -198,6 +201,8 @@ export class ModelServiceImpl implements IModelService { private _modelCreationOptions: editorCommon.ITextModelCreationOptions; + private _hasShownMigrationMessage: boolean; + /** * All the models known in the system. */ @@ -207,7 +212,8 @@ export class ModelServiceImpl implements IModelService { threadService: IThreadService, markerService: IMarkerService, modeService: IModeService, - configurationService: IConfigurationService + configurationService: IConfigurationService, + messageService: IMessageService ) { this._modelCreationOptions = { tabSize: DEFAULT_INDENTATION.tabSize, @@ -220,21 +226,27 @@ export class ModelServiceImpl implements IModelService { this._modeService = modeService; this._workerHelper = this._threadService.getRemotable(ModelServiceWorkerHelper); this._configurationService = configurationService; + this._messageService = messageService; + this._hasShownMigrationMessage = false; let readConfig = (config:IRawConfig) => { const eol = config.files && config.files.eol; + let shouldShowMigrationMessage = false; + let tabSize = DEFAULT_INDENTATION.tabSize; if (config.editor && typeof config.editor.tabSize !== 'undefined') { let parsedTabSize = parseInt(config.editor.tabSize, 10); if (!isNaN(parsedTabSize)) { tabSize = parsedTabSize; } + shouldShowMigrationMessage = shouldShowMigrationMessage || (config.editor.tabSize === 'auto'); } let insertSpaces = DEFAULT_INDENTATION.insertSpaces; if (config.editor && typeof config.editor.insertSpaces !== 'undefined') { insertSpaces = (config.editor.insertSpaces === 'false' ? false : Boolean(config.editor.insertSpaces)); + shouldShowMigrationMessage = shouldShowMigrationMessage || (config.editor.insertSpaces === 'auto'); } let newDefaultEOL = this._modelCreationOptions.defaultEOL; @@ -256,6 +268,11 @@ export class ModelServiceImpl implements IModelService { defaultEOL: newDefaultEOL }); + + if (shouldShowMigrationMessage && !this._hasShownMigrationMessage) { + this._hasShownMigrationMessage = true; + this._messageService.show(Severity.Info, nls.localize('indentAutoMigrate', "Please update your settings: `editor.detectIndentation` replaces `editor.tabSize`: \"auto\" or `editor.insertSpaces`: \"auto\"")); + } }; this._configurationServiceSubscription = this._configurationService.addListener2(ConfigurationServiceEventTypes.UPDATED, (e: IConfigurationServiceEvent) => { readConfig(e.config); diff --git a/src/vs/editor/test/common/servicesTestUtils.ts b/src/vs/editor/test/common/servicesTestUtils.ts index 8d6df844371..0763d4f5de8 100644 --- a/src/vs/editor/test/common/servicesTestUtils.ts +++ b/src/vs/editor/test/common/servicesTestUtils.ts @@ -157,7 +157,7 @@ export function createMockModelService(): IModelService { var threadService = NULL_THREAD_SERVICE; var extensionService = new MockExtensionService(); var modeService = new MockModeService(threadService, extensionService); - var modelService = new MockModelService(threadService, null, modeService, configurationService); + var modelService = new MockModelService(threadService, null, modeService, configurationService, null); var inst = createInstantiationService({ threadService: threadService, extensionService: extensionService, diff --git a/src/vs/languages/typescript.workbench/test/common/projectResolver.test.ts b/src/vs/languages/typescript.workbench/test/common/projectResolver.test.ts index 78e25e39dd0..8e71c912bb9 100644 --- a/src/vs/languages/typescript.workbench/test/common/projectResolver.test.ts +++ b/src/vs/languages/typescript.workbench/test/common/projectResolver.test.ts @@ -62,7 +62,8 @@ function createModelService(): IModelService { onModelAdded: undefined, onModelRemoved: undefined, onModelModeChanged: undefined, - destroyModel: undefined + destroyModel: undefined, + getCreationOptions: undefined } } diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts index 3f79a3e5203..6c9faa6719c 100644 --- a/src/vs/workbench/electron-browser/shell.ts +++ b/src/vs/workbench/electron-browser/shell.ts @@ -272,7 +272,7 @@ export class WorkbenchShell { this.keybindingService.setExtensionService(extensionService); let modeService = new MainThreadModeServiceImpl(this.threadService, extensionService, configService); - let modelService = new ModelServiceImpl(this.threadService, markerService, modeService, configService); + let modelService = new ModelServiceImpl(this.threadService, markerService, modeService, configService, this.messageService); let editorWorkerService = new EditorWorkerServiceImpl(modelService); let untitledEditorService = new UntitledEditorService(); diff --git a/src/vs/workbench/test/node/api/extHostApiCommands.test.ts b/src/vs/workbench/test/node/api/extHostApiCommands.test.ts index ca497fb6c51..64afdeedfdd 100644 --- a/src/vs/workbench/test/node/api/extHostApiCommands.test.ts +++ b/src/vs/workbench/test/node/api/extHostApiCommands.test.ts @@ -71,7 +71,8 @@ suite('ExtHostLanguageFeatureCommands', function() { getModels(): any { throw new Error(); }, onModelAdded: undefined, onModelModeChanged: undefined, - onModelRemoved: undefined + onModelRemoved: undefined, + getCreationOptions(): any { throw new Error(); } }); threadService.getRemotable(ExtHostModelService)._acceptModelAdd({