Skip to content

Commit a7b743e

Browse files
committed
make workspace service fit to add a workspace folder with a name (for #35407)
1 parent f6cf092 commit a7b743e

File tree

7 files changed

+58
-15
lines changed

7 files changed

+58
-15
lines changed

src/vs/editor/standalone/browser/simpleServices.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,9 @@ export class SimpleWorkspaceContextService implements IWorkspaceContextService {
599599
return true;
600600
}
601601

602-
public addFolders(foldersToAdd: URI[]): TPromise<void> {
602+
public addFolders(foldersToAdd: URI[]): TPromise<void>;
603+
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
604+
public addFolders(foldersToAdd: any[]): TPromise<void> {
603605
return TPromise.as(void 0);
604606
}
605607

src/vs/platform/workspace/common/workspace.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,15 @@ export interface IWorkspaceContextService {
4848
onDidChangeWorkspaceFolders: Event<IWorkspaceFoldersChangeEvent>;
4949

5050
/**
51-
* Provides access to the workspace object the platform is running with.
51+
* Provides access to the workspace object the platform is running with.
5252
*/
5353
getWorkspace(): IWorkspace;
5454

5555
/**
5656
* add folders to the existing workspace
5757
*/
5858
addFolders(folders: URI[]): TPromise<void>;
59+
addFolders(folders: { uri: URI, name?: string }[]): TPromise<void>;
5960

6061
/**
6162
* remove folders from the existing workspace

src/vs/workbench/services/configuration/node/configurationService.ts

+30-11
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,11 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
106106
return this.workspace.getFolder(resource);
107107
}
108108

109-
public addFolders(foldersToAdd: URI[]): TPromise<void> {
109+
public addFolders(foldersToAdd: URI[]): TPromise<void>;
110+
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
111+
public addFolders(folders: URI[] | { uri: URI, name?: string }[]): TPromise<void> {
110112
assert.ok(this.jsonEditingService, 'Workbench is not initialized yet');
111-
return this.workspaceEditingQueue.queue(() => this.doAddFolders(foldersToAdd));
113+
return this.workspaceEditingQueue.queue(() => this.doAddFolders(folders));
112114
}
113115

114116
public removeFolders(foldersToRemove: URI[]): TPromise<void> {
@@ -130,7 +132,7 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
130132
return false;
131133
}
132134

133-
private doAddFolders(foldersToAdd: URI[]): TPromise<void> {
135+
private doAddFolders(foldersToAdd: (URI | { uri: URI, name?: string })[]): TPromise<void> {
134136
if (this.getWorkbenchState() !== WorkbenchState.WORKSPACE) {
135137
return TPromise.as(void 0); // we need a workspace to begin with
136138
}
@@ -144,23 +146,40 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
144146
const workspaceConfigFolder = dirname(this.getWorkspace().configuration.fsPath);
145147

146148
foldersToAdd.forEach(folderToAdd => {
147-
if (this.contains(currentWorkspaceFolderUris, folderToAdd)) {
149+
let folderResource: URI;
150+
let folderName: string;
151+
if (URI.isUri(folderToAdd)) {
152+
folderResource = folderToAdd;
153+
} else {
154+
folderResource = folderToAdd.uri;
155+
folderName = folderToAdd.name;
156+
}
157+
158+
if (this.contains(currentWorkspaceFolderUris, folderResource)) {
148159
return; // already existing
149160
}
150161

162+
let storedFolder: IStoredWorkspaceFolder;
163+
151164
// File resource: use "path" property
152-
if (folderToAdd.scheme === Schemas.file) {
153-
storedFoldersToAdd.push({
154-
path: massageFolderPathForWorkspace(folderToAdd.fsPath, workspaceConfigFolder, currentStoredFolders)
155-
});
165+
if (folderResource.scheme === Schemas.file) {
166+
storedFolder = {
167+
path: massageFolderPathForWorkspace(folderResource.fsPath, workspaceConfigFolder, currentStoredFolders)
168+
};
156169
}
157170

158171
// Any other resource: use "uri" property
159172
else {
160-
storedFoldersToAdd.push({
161-
uri: folderToAdd.toString(true)
162-
});
173+
storedFolder = {
174+
uri: folderResource.toString(true)
175+
};
176+
}
177+
178+
if (folderName) {
179+
storedFolder.name = folderName;
163180
}
181+
182+
storedFoldersToAdd.push(storedFolder);
164183
});
165184

166185
if (storedFoldersToAdd.length > 0) {

src/vs/workbench/services/configuration/test/node/configurationService.test.ts

+16
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,22 @@ suite('WorkspaceContextService - Workspace', () => {
205205
});
206206
});
207207

208+
test('add folders (with name)', () => {
209+
const workspaceDir = path.dirname(testObject.getWorkspace().folders[0].uri.fsPath);
210+
return testObject.addFolders([{ uri: URI.file(path.join(workspaceDir, 'd')), name: 'DDD' }, { uri: URI.file(path.join(workspaceDir, 'c')), name: 'CCC' }])
211+
.then(() => {
212+
const actual = testObject.getWorkspace().folders;
213+
214+
assert.equal(actual.length, 4);
215+
assert.equal(path.basename(actual[0].uri.fsPath), 'a');
216+
assert.equal(path.basename(actual[1].uri.fsPath), 'b');
217+
assert.equal(path.basename(actual[2].uri.fsPath), 'd');
218+
assert.equal(path.basename(actual[3].uri.fsPath), 'c');
219+
assert.equal(actual[2].name, 'DDD');
220+
assert.equal(actual[3].name, 'CCC');
221+
});
222+
});
223+
208224
test('add folders triggers change event', () => {
209225
const target = sinon.spy();
210226
testObject.onDidChangeWorkspaceFolders(target);

src/vs/workbench/services/workspace/common/workspaceEditing.ts

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export interface IWorkspaceEditingService {
1919
* Add folders to the existing workspace
2020
*/
2121
addFolders(folders: URI[]): TPromise<void>;
22+
addFolders(folders: { uri: URI, name?: string }[]): TPromise<void>;
2223

2324
/**
2425
* Remove folders from the existing workspace

src/vs/workbench/services/workspace/node/workspaceEditingService.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ export class WorkspaceEditingService implements IWorkspaceEditingService {
4444
) {
4545
}
4646

47-
public addFolders(folders: URI[]): TPromise<void> {
47+
public addFolders(foldersToAdd: URI[]): TPromise<void>;
48+
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
49+
public addFolders(folders: any[]): TPromise<void> {
4850
return this.contextService.addFolders(folders)
4951
.then(() => null, error => this.handleWorkspaceConfigurationEditingError(error));
5052
}

src/vs/workbench/test/workbenchTestServices.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ export class TestContextService implements IWorkspaceContextService {
117117
return this.workspace;
118118
}
119119

120-
public addFolders(foldersToAdd: URI[]): TPromise<void> {
120+
public addFolders(foldersToAdd: URI[]): TPromise<void>;
121+
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
122+
public addFolders(foldersToAdd: any[]): TPromise<void> {
121123
return TPromise.as(void 0);
122124
}
123125

0 commit comments

Comments
 (0)