diff --git a/extensions/vscode-api-tests/src/env.test.ts b/extensions/vscode-api-tests/src/env.test.ts index 4746255297c2c9fe5b72c9ae3534339e6371861a..b9ed8ab85260aec5f4a1277cec9b5c640414edd2 100644 --- a/extensions/vscode-api-tests/src/env.test.ts +++ b/extensions/vscode-api-tests/src/env.test.ts @@ -12,6 +12,7 @@ suite('env-namespace', () => { test('env is set', function () { assert.equal(typeof env.language, 'string'); + assert.equal(typeof env.appRoot, 'string'); assert.equal(typeof env.appName, 'string'); assert.equal(typeof env.machineId, 'string'); assert.equal(typeof env.sessionId, 'string'); @@ -19,9 +20,10 @@ suite('env-namespace', () => { test('env is readonly', function () { assert.throws(() => env.language = '234'); + assert.throws(() => env.appRoot = '234'); assert.throws(() => env.appName = '234'); assert.throws(() => env.machineId = '234'); assert.throws(() => env.sessionId = '234'); }); -}); \ No newline at end of file +}); diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 1339cffe122eabe6405c559887062becb3efa0e8..d1761abd034f8820a81f6572846efd5fddd333bf 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -3970,6 +3970,13 @@ declare module 'vscode' { */ export let appName: string; + /** + * The application root folder from which the editor is running. + * + * @readonly + */ + export let appRoot: string; + /** * Represents the preferred user-language, like `de-CH`, `fr`, or `en-US`. * diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 0ad36fa49eb5d6eb54d7cffa90d8e8b72f36760d..9346064940f0d8f7d23adce6bf1d8416d48e0234 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -201,7 +201,8 @@ export function createApiFactory( get machineId() { return initData.telemetryInfo.machineId; }, get sessionId() { return initData.telemetryInfo.sessionId; }, get language() { return Platform.language; }, - get appName() { return product.nameLong; } + get appName() { return product.nameLong; }, + get appRoot() { return initData.environment.appRoot; }, }); // namespace: extensions diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 3291bc7ef5ff5efbc384e4887c92b9863a0aae8c..5fb39e7d980d2878b272dca1b6f0882680e83985 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -53,6 +53,7 @@ export interface IEnvironment { isExtensionDevelopmentDebug: boolean; enableProposedApiForAll: boolean; enableProposedApiFor: string | string[]; + appRoot: string; appSettingsHome: string; disableExtensions: boolean; userExtensionsHome: string; diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts b/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts index 51465a972d06accb5f1ea5d7fa0301c2acaefa75..cbfcf27d66bd4b68f27b7cde5a47fa7d248f0906 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts @@ -341,6 +341,7 @@ export class ExtensionHostProcessWorker { parentPid: process.pid, environment: { isExtensionDevelopmentDebug: this._isExtensionDevDebug, + appRoot: this._environmentService.appRoot, appSettingsHome: this._environmentService.appSettingsHome, disableExtensions: this._environmentService.disableExtensions, userExtensionsHome: this._environmentService.extensionsPath,