mirror of
https://github.com/Microsoft/vscode
synced 2024-09-19 10:40:41 +00:00
make workspace service fit to add a workspace folder with a name (for #35407)
This commit is contained in:
parent
f6cf092658
commit
a7b743e02d
|
@ -599,7 +599,9 @@ export class SimpleWorkspaceContextService implements IWorkspaceContextService {
|
|||
return true;
|
||||
}
|
||||
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void> {
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void>;
|
||||
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
|
||||
public addFolders(foldersToAdd: any[]): TPromise<void> {
|
||||
return TPromise.as(void 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ export interface IWorkspaceContextService {
|
|||
onDidChangeWorkspaceFolders: Event<IWorkspaceFoldersChangeEvent>;
|
||||
|
||||
/**
|
||||
* Provides access to the workspace object the platform is running with.
|
||||
* Provides access to the workspace object the platform is running with.
|
||||
*/
|
||||
getWorkspace(): IWorkspace;
|
||||
|
||||
|
@ -56,6 +56,7 @@ export interface IWorkspaceContextService {
|
|||
* add folders to the existing workspace
|
||||
*/
|
||||
addFolders(folders: URI[]): TPromise<void>;
|
||||
addFolders(folders: { uri: URI, name?: string }[]): TPromise<void>;
|
||||
|
||||
/**
|
||||
* remove folders from the existing workspace
|
||||
|
|
|
@ -106,9 +106,11 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
|
|||
return this.workspace.getFolder(resource);
|
||||
}
|
||||
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void> {
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void>;
|
||||
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
|
||||
public addFolders(folders: URI[] | { uri: URI, name?: string }[]): TPromise<void> {
|
||||
assert.ok(this.jsonEditingService, 'Workbench is not initialized yet');
|
||||
return this.workspaceEditingQueue.queue(() => this.doAddFolders(foldersToAdd));
|
||||
return this.workspaceEditingQueue.queue(() => this.doAddFolders(folders));
|
||||
}
|
||||
|
||||
public removeFolders(foldersToRemove: URI[]): TPromise<void> {
|
||||
|
@ -130,7 +132,7 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
|
|||
return false;
|
||||
}
|
||||
|
||||
private doAddFolders(foldersToAdd: URI[]): TPromise<void> {
|
||||
private doAddFolders(foldersToAdd: (URI | { uri: URI, name?: string })[]): TPromise<void> {
|
||||
if (this.getWorkbenchState() !== WorkbenchState.WORKSPACE) {
|
||||
return TPromise.as(void 0); // we need a workspace to begin with
|
||||
}
|
||||
|
@ -144,23 +146,40 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
|
|||
const workspaceConfigFolder = dirname(this.getWorkspace().configuration.fsPath);
|
||||
|
||||
foldersToAdd.forEach(folderToAdd => {
|
||||
if (this.contains(currentWorkspaceFolderUris, folderToAdd)) {
|
||||
let folderResource: URI;
|
||||
let folderName: string;
|
||||
if (URI.isUri(folderToAdd)) {
|
||||
folderResource = folderToAdd;
|
||||
} else {
|
||||
folderResource = folderToAdd.uri;
|
||||
folderName = folderToAdd.name;
|
||||
}
|
||||
|
||||
if (this.contains(currentWorkspaceFolderUris, folderResource)) {
|
||||
return; // already existing
|
||||
}
|
||||
|
||||
let storedFolder: IStoredWorkspaceFolder;
|
||||
|
||||
// File resource: use "path" property
|
||||
if (folderToAdd.scheme === Schemas.file) {
|
||||
storedFoldersToAdd.push({
|
||||
path: massageFolderPathForWorkspace(folderToAdd.fsPath, workspaceConfigFolder, currentStoredFolders)
|
||||
});
|
||||
if (folderResource.scheme === Schemas.file) {
|
||||
storedFolder = {
|
||||
path: massageFolderPathForWorkspace(folderResource.fsPath, workspaceConfigFolder, currentStoredFolders)
|
||||
};
|
||||
}
|
||||
|
||||
// Any other resource: use "uri" property
|
||||
else {
|
||||
storedFoldersToAdd.push({
|
||||
uri: folderToAdd.toString(true)
|
||||
});
|
||||
storedFolder = {
|
||||
uri: folderResource.toString(true)
|
||||
};
|
||||
}
|
||||
|
||||
if (folderName) {
|
||||
storedFolder.name = folderName;
|
||||
}
|
||||
|
||||
storedFoldersToAdd.push(storedFolder);
|
||||
});
|
||||
|
||||
if (storedFoldersToAdd.length > 0) {
|
||||
|
|
|
@ -205,6 +205,22 @@ suite('WorkspaceContextService - Workspace', () => {
|
|||
});
|
||||
});
|
||||
|
||||
test('add folders (with name)', () => {
|
||||
const workspaceDir = path.dirname(testObject.getWorkspace().folders[0].uri.fsPath);
|
||||
return testObject.addFolders([{ uri: URI.file(path.join(workspaceDir, 'd')), name: 'DDD' }, { uri: URI.file(path.join(workspaceDir, 'c')), name: 'CCC' }])
|
||||
.then(() => {
|
||||
const actual = testObject.getWorkspace().folders;
|
||||
|
||||
assert.equal(actual.length, 4);
|
||||
assert.equal(path.basename(actual[0].uri.fsPath), 'a');
|
||||
assert.equal(path.basename(actual[1].uri.fsPath), 'b');
|
||||
assert.equal(path.basename(actual[2].uri.fsPath), 'd');
|
||||
assert.equal(path.basename(actual[3].uri.fsPath), 'c');
|
||||
assert.equal(actual[2].name, 'DDD');
|
||||
assert.equal(actual[3].name, 'CCC');
|
||||
});
|
||||
});
|
||||
|
||||
test('add folders triggers change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeWorkspaceFolders(target);
|
||||
|
|
|
@ -19,6 +19,7 @@ export interface IWorkspaceEditingService {
|
|||
* Add folders to the existing workspace
|
||||
*/
|
||||
addFolders(folders: URI[]): TPromise<void>;
|
||||
addFolders(folders: { uri: URI, name?: string }[]): TPromise<void>;
|
||||
|
||||
/**
|
||||
* Remove folders from the existing workspace
|
||||
|
|
|
@ -44,7 +44,9 @@ export class WorkspaceEditingService implements IWorkspaceEditingService {
|
|||
) {
|
||||
}
|
||||
|
||||
public addFolders(folders: URI[]): TPromise<void> {
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void>;
|
||||
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
|
||||
public addFolders(folders: any[]): TPromise<void> {
|
||||
return this.contextService.addFolders(folders)
|
||||
.then(() => null, error => this.handleWorkspaceConfigurationEditingError(error));
|
||||
}
|
||||
|
|
|
@ -117,7 +117,9 @@ export class TestContextService implements IWorkspaceContextService {
|
|||
return this.workspace;
|
||||
}
|
||||
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void> {
|
||||
public addFolders(foldersToAdd: URI[]): TPromise<void>;
|
||||
public addFolders(foldersToAdd: { uri: URI, name?: string }[]): TPromise<void>;
|
||||
public addFolders(foldersToAdd: any[]): TPromise<void> {
|
||||
return TPromise.as(void 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue