From 9a8b244cb37ced82bad1b2bbfb6d28c2bbc52983 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 22 Aug 2016 15:50:13 +0200 Subject: [PATCH] delete old node configuration service --- src/vs/code/electron-main/main.ts | 4 +- src/vs/code/node/cliProcessMain.ts | 4 +- src/vs/code/node/sharedProcessMain.ts | 4 +- .../node/nodeConfigurationService.ts | 148 ------------------ 4 files changed, 6 insertions(+), 154 deletions(-) delete mode 100644 src/vs/platform/configuration/node/nodeConfigurationService.ts diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index 9b380139112..170c4e62257 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -35,7 +35,7 @@ import { IStorageService, StorageService } from 'vs/code/electron-main/storage'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { EnvironmentService } from 'vs/platform/environment/node/environmentService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService'; +import { ConfigurationService } from 'vs/platform/configuration/node/configurationService'; import { IRequestService } from 'vs/platform/request/common/request'; import { RequestService } from 'vs/platform/request/node/requestService'; import * as cp from 'child_process'; @@ -393,7 +393,7 @@ function start(): void { services.set(IWindowsService, new SyncDescriptor(WindowsManager)); services.set(ILifecycleService, new SyncDescriptor(LifecycleService)); services.set(IStorageService, new SyncDescriptor(StorageService)); - services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService)); + services.set(IConfigurationService, new SyncDescriptor(ConfigurationService)); services.set(IRequestService, new SyncDescriptor(RequestService)); services.set(IUpdateService, new SyncDescriptor(UpdateManager)); services.set(ISettingsService, new SyncDescriptor(SettingsManager)); diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index 3574ff3cb6f..1ad830e39fe 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -28,7 +28,7 @@ import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProper import { IRequestService } from 'vs/platform/request/common/request'; import { RequestService } from 'vs/platform/request/node/requestService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService'; +import { ConfigurationService } from 'vs/platform/configuration/node/configurationService'; import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender'; import {mkdirp} from 'vs/base/node/pfs'; @@ -157,7 +157,7 @@ export function main(argv: ParsedArgs): TPromise { const services = new ServiceCollection(); services.set(IEventService, new SyncDescriptor(EventService)); - services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService)); + services.set(IConfigurationService, new SyncDescriptor(ConfigurationService)); services.set(IRequestService, new SyncDescriptor(RequestService)); services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService)); services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService)); diff --git a/src/vs/code/node/sharedProcessMain.ts b/src/vs/code/node/sharedProcessMain.ts index 0fa48cac03c..9f4069163ea 100644 --- a/src/vs/code/node/sharedProcessMain.ts +++ b/src/vs/code/node/sharedProcessMain.ts @@ -22,7 +22,7 @@ import { IExtensionManagementService, IExtensionGalleryService } from 'vs/platfo import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService'; +import { ConfigurationService } from 'vs/platform/configuration/node/configurationService'; import { IRequestService } from 'vs/platform/request/common/request'; import { RequestService } from 'vs/platform/request/node/requestService'; import { ITelemetryService, combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -59,7 +59,7 @@ function main(server: Server): void { services.set(IEventService, new SyncDescriptor(EventService)); services.set(IEnvironmentService, new SyncDescriptor(EnvironmentService, parseArgs(process.argv), process.execPath)); - services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService)); + services.set(IConfigurationService, new SyncDescriptor(ConfigurationService)); services.set(IRequestService, new SyncDescriptor(RequestService)); const instantiationService = new InstantiationService(services); diff --git a/src/vs/platform/configuration/node/nodeConfigurationService.ts b/src/vs/platform/configuration/node/nodeConfigurationService.ts deleted file mode 100644 index 84e5dd7b58f..00000000000 --- a/src/vs/platform/configuration/node/nodeConfigurationService.ts +++ /dev/null @@ -1,148 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * 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 { readFile, writeFile } from 'vs/base/node/pfs'; -import { watch, FSWatcher, readFileSync } from 'fs'; -import * as path from 'path'; -import { TPromise } from 'vs/base/common/winjs.base'; -import { mixin } from 'vs/base/common/objects'; -import { Delayer } from 'vs/base/common/async'; -import { JSONPath, parse } from 'vs/base/common/json'; -import { applyEdits } from 'vs/base/common/jsonFormatter'; -import { setProperty } from 'vs/base/common/jsonEdit'; -import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle'; -import { IConfigurationService, IConfigurationServiceEvent } from 'vs/platform/configuration/common/configuration'; -import Event, {Emitter} from 'vs/base/common/event'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; - -function deconstruct(obj: { [key: string]: any; }): any { - return Object.keys(obj).reduce((r, key) => { - const keyPath = key.split('.').filter(p => !!p); - - let k = null; - let value = obj[key]; - - while (k = keyPath.pop()) { - value = { [k]: value }; - } - - return mixin(r, value); - }, {}); -} - -/** - * Configuration service to be used in the node side. - * TODO@Joao: - * - defaults handling - * - async reading: - * - read async at construction and on file change event. but if someone - * calls getConfiguration before that first async call is done, just do - * it sync - * - * At some point, an async get() on the configuration service would be - * much easier to implement and reason about. IConfigurationService2? - */ -export class NodeConfigurationService implements IConfigurationService, IDisposable { - - _serviceBrand: any; - - private configurationPath: string; - private watcher: FSWatcher; - private cache: any; - private delayer: Delayer; - private disposables: IDisposable[]; - - private _onDidUpdateConfiguration = new Emitter(); - get onDidUpdateConfiguration(): Event { return this._onDidUpdateConfiguration.event; } - - constructor( - @IEnvironmentService environmentService: IEnvironmentService - ) { - this.cache = {}; - this.disposables = []; - - this.delayer = new Delayer(300); - - // TODO@joao cleanup! - this.configurationPath = path.join(environmentService.userDataPath, 'User', 'settings.json'); - - // TODO@joao sync? - this.load(); - - this.watcher = watch(path.dirname(this.configurationPath)); - this.disposables.push(toDisposable(() => { - this.watcher.removeAllListeners(); - this.watcher.close(); - })); - - this.watcher.on('change', () => this.delayer.trigger(() => this.load())); - } - - getConfiguration(section?: string): T { - return this._getConfiguration(section); - } - - setUserConfiguration(key: string | JSONPath, value: any) : Thenable { - return readFile(this.configurationPath, 'utf8').then(content => { - // todo: revisit when defaults are read as well - let config = this.getConfiguration<{ tabSize: number; insertSpaces: boolean }>('editor'); - let tabSize = typeof config.tabSize === 'number' ? config.tabSize : 4; - let insertSpaces = typeof config.insertSpaces === 'boolean' ? config.insertSpaces : false; - - let path: JSONPath = typeof key === 'string' ? ( key).split('.') : key; - let edits = setProperty(content, path, value, { insertSpaces, tabSize, eol: '\n' }); - content = applyEdits(content, edits); - return writeFile(this.configurationPath, content, 'utf8'); - }); - } - - loadConfiguration(section?: string): TPromise { - return TPromise.wrapError(new Error('not implemented')); - } - - private _getConfiguration(section: string = ''): T { - let value = this.cache; - - let parts = section - .split('.') - .filter(p => !!p); - - while (parts.length && value) { - let part = parts.shift(); - value = value[part]; - } - - return value; - } - - private load(): void { - let raw = '{}'; - - try { - // TODO@Joao: is sync really the way to go? - raw = readFileSync(this.configurationPath, 'utf8'); - } catch (error) { - raw = '{}'; - } - - let content = {}; - try { - content = parse(raw) || {}; - } catch (error) { - // noop - } - - this.cache = deconstruct(content); - } - - hasWorkspaceConfiguration(): boolean { - return false; - } - - dispose(): void { - this.disposables = dispose(this.disposables); - } -}