From ee249f86bd932cdce5d2815174b7b12452e9a04e Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 25 Jan 2016 14:49:24 +0100 Subject: [PATCH] api - add vscode.env.language --- extensions/vscode-api-tests/src/env.test.ts | 25 +++++++++++++++++++ src/vs/platform/workspace/common/workspace.ts | 2 ++ src/vs/vscode.d.ts | 11 ++++++++ src/vs/workbench/api/node/extHost.api.impl.ts | 18 ++++++------- src/vs/workbench/electron-browser/main.ts | 3 +++ 5 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 extensions/vscode-api-tests/src/env.test.ts diff --git a/extensions/vscode-api-tests/src/env.test.ts b/extensions/vscode-api-tests/src/env.test.ts new file mode 100644 index 00000000000..0959c8cead9 --- /dev/null +++ b/extensions/vscode-api-tests/src/env.test.ts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * 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 assert from 'assert'; +import {env} from 'vscode'; + +suite('env-namespace', () => { + + test('env is set', function() { + assert.equal(typeof env.language, 'string'); + assert.equal(typeof env.machineId, 'string'); + assert.equal(typeof env.sessionId, 'string'); + }); + + test('env is readonly', function() { + assert.throws(() => env.language = '234'); + assert.throws(() => env.machineId = '234'); + assert.throws(() => env.sessionId = '234'); + }); + +}); \ No newline at end of file diff --git a/src/vs/platform/workspace/common/workspace.ts b/src/vs/platform/workspace/common/workspace.ts index f6dc09ed5b6..3efa4056efe 100644 --- a/src/vs/platform/workspace/common/workspace.ts +++ b/src/vs/platform/workspace/common/workspace.ts @@ -91,6 +91,8 @@ export interface IConfiguration { } export interface IEnvironment { + language: string; + appName: string; appRoot: string; isBuilt: boolean; diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 5b386e899e0..923ef571630 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -2687,14 +2687,25 @@ declare namespace vscode { */ export namespace env { + /** + * Represents the preferred user-language, like `de-CH`, `fr`, or `en-US`. + * + * @readonly + */ + export let language: string; + /** * A unique identifier for the computer. + * + * @readonly */ export let machineId: string; /** * A unique identifier for the current session. * Changes each time the editor is started. + * + * @readonly */ export let sessionId: string; } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index eb0a2c317ee..1573a9b491a 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -39,7 +39,7 @@ import {CancellationTokenSource} from 'vs/base/common/cancellation'; import vscode = require('vscode'); import {TextEditorRevealType} from 'vs/workbench/api/node/mainThreadEditors'; import * as paths from 'vs/base/common/paths'; -import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry'; +import {ITelemetryService, ITelemetryInfo} from 'vs/platform/telemetry/common/telemetry'; /** * This class implements the API described in vscode.d.ts, @@ -144,15 +144,13 @@ export class ExtHostAPIImplementation { const extHostOutputService = new ExtHostOutputService(this._threadService); // env namespace - this.env = { - machineId: undefined, - sessionId: undefined, - // locale: undefined - } - telemetryService.getTelemetryInfo().then(info => { - this.env.machineId = info.machineId; - this.env.sessionId = info.sessionId; - }, errors.onUnexpectedError); + let telemetryInfo: ITelemetryInfo; + this.env = Object.freeze({ + get machineId() { return telemetryInfo.machineId }, + get sessionId() { return telemetryInfo.sessionId }, + get language() { return contextService.getConfiguration().env.language } + }); + telemetryService.getTelemetryInfo().then(info => telemetryInfo = info, errors.onUnexpectedError); // commands namespace this.commands = { diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index 782c84faa7b..a6829b8d36e 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -49,6 +49,9 @@ export function startup(environment: IMainEnvironment, globalSettings: IGlobalSe env: environment }; + // Inherit navigator language + environment.language = navigator.language; + // Shell Options let filesToOpen = environment.filesToOpen && environment.filesToOpen.length ? toInputs(environment.filesToOpen) : null; let filesToCreate = environment.filesToCreate && environment.filesToCreate.length ? toInputs(environment.filesToCreate) : null;