From 0c29dc72ca2b5446ee67ef271a73ee1d5964c30a Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 21 Sep 2017 16:18:38 +0200 Subject: [PATCH] allow workspaces with 0 folders (#34622) --- .../electron-main/workspacesMainService.ts | 4 ++-- .../files/browser/fileActions.contribution.ts | 15 +++++++-------- .../services/configuration/node/configuration.ts | 7 ++----- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts index 1764e625a5f..432850ff32d 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts @@ -103,13 +103,13 @@ export class WorkspacesMainService implements IWorkspacesMainService { throw new Error(`${path} cannot be parsed as JSON file (${error}).`); } - // Filter out folders which do not have a path set + // Filter out folders which do not have a path or uri set if (Array.isArray(storedWorkspace.folders)) { storedWorkspace.folders = storedWorkspace.folders.filter(folder => isStoredWorkspaceFolder(folder)); } // Validate - if (!Array.isArray(storedWorkspace.folders) || storedWorkspace.folders.length === 0) { + if (!Array.isArray(storedWorkspace.folders)) { throw new Error(`${path} looks like an invalid workspace file.`); } diff --git a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts index 150727ee766..c64ab4ad996 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts @@ -92,14 +92,13 @@ class FilesViewerActionContributor extends ActionBarContributor { } if (stat.isRoot && this.environmentService.appQuality !== 'stable') { - let action: Action = this.instantiationService.createInstance(AddRootFolderAction, AddRootFolderAction.ID, AddRootFolderAction.LABEL); - action.order = 52; - actions.push(action); - if (this.contextService.getWorkspace().folders.length > 1) { - action = this.instantiationService.createInstance(RemoveRootFolderAction, stat.resource, RemoveRootFolderAction.ID, RemoveRootFolderAction.LABEL); - action.order = 53; - actions.push(action); - } + const addRootFolderAction: Action = this.instantiationService.createInstance(AddRootFolderAction, AddRootFolderAction.ID, AddRootFolderAction.LABEL); + addRootFolderAction.order = 52; + actions.push(addRootFolderAction); + + const removeRootFolderAction = this.instantiationService.createInstance(RemoveRootFolderAction, stat.resource, RemoveRootFolderAction.ID, RemoveRootFolderAction.LABEL); + removeRootFolderAction.order = 53; + actions.push(removeRootFolderAction); actions.push(new Separator(null, 54)); } diff --git a/src/vs/workbench/services/configuration/node/configuration.ts b/src/vs/workbench/services/configuration/node/configuration.ts index f2f7f20657e..dc937676842 100644 --- a/src/vs/workbench/services/configuration/node/configuration.ts +++ b/src/vs/workbench/services/configuration/node/configuration.ts @@ -211,9 +211,9 @@ contributionRegistry.registerSchema('vscode://schemas/workspaceConfig', { required: ['folders'], properties: { 'folders': { - minItems: 1, + minItems: 0, uniqueItems: true, - description: nls.localize('workspaceConfig.folders.description', "List of folders to be loaded in the workspace. Must be a file path. e.g. `/root/folderA` or `./folderA` for a relative path that will be resolved against the location of the workspace file."), + description: nls.localize('workspaceConfig.folders.description', "List of folders to be loaded in the workspace."), items: { type: 'object', default: { path: '' }, @@ -407,9 +407,6 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat .then(() => { const workspaceConfigurationModel = this.workspaceConfiguration.workspaceConfigurationModel; const workspaceFolders = toWorkspaceFolders(workspaceConfigurationModel.folders, URI.file(paths.dirname(workspaceConfigPath.fsPath))); - if (!workspaceFolders.length) { - return TPromise.wrapError(new Error('Invalid workspace configuraton file ' + workspaceConfigPath)); - } const workspaceId = workspaceIdentifier.id; const workspaceName = getWorkspaceLabel({ id: workspaceId, configPath: workspaceConfigPath.fsPath }, this.environmentService); return new Workspace(workspaceId, workspaceName, workspaceFolders, workspaceConfigPath); -- GitLab