Provide additional workspace API to add/remove workspace folders (for #35407) (#36820)

* Provide additional workspace API to add/remove workspace folders (for #35407)

* add/removeFolders => add/removeFolder

* make add/remove folder return a boolean

* use proper service for workspace editing

* workspac => workspace

* do not log promise canceled messages

* show confirm dialog
This commit is contained in:
Benjamin Pasero
2017-10-30 13:49:48 +00:00
committed by GitHub
parent 7ebc20495c
commit 80ece09d7f
7 changed files with 118 additions and 10 deletions

View File

@@ -403,6 +403,12 @@ export function createApiFactory(
set name(value) {
throw errors.readonly();
},
addWorkspaceFolder(uri, name) {
return extHostWorkspace.addWorkspaceFolder(extension.displayName || extension.name, uri, name);
},
removeWorkspaceFolder(folder) {
return extHostWorkspace.removeWorkspaceFolder(extension.displayName || extension.name, folder);
},
onDidChangeWorkspaceFolders: function (listener, thisArgs?, disposables?) {
return extHostWorkspace.onDidChangeWorkspace(listener, thisArgs, disposables);
},

View File

@@ -331,6 +331,8 @@ export interface MainThreadWorkspaceShape extends IDisposable {
$startSearch(include: string | IRelativePattern, exclude: string | IRelativePattern, maxResults: number, requestId: number): Thenable<URI[]>;
$cancelSearch(requestId: number): Thenable<boolean>;
$saveAll(includeUntitled?: boolean): Thenable<boolean>;
$addFolder(extensioName: string, uri: URI, name?: string): Thenable<boolean>;
$removeFolder(extensioName: string, uri: URI): Thenable<boolean>;
}
export interface MainThreadFileSystemShape extends IDisposable {

View File

@@ -78,6 +78,18 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape {
}
}
addWorkspaceFolder(extensionName: string, uri: URI, name?: string): Thenable<boolean> {
return this._proxy.$addFolder(extensionName, uri, name);
}
removeWorkspaceFolder(extensionName: string, folder: vscode.WorkspaceFolder): Thenable<boolean> {
if (this.getWorkspaceFolders().indexOf(folder) === -1) {
return Promise.resolve(false);
}
return this._proxy.$removeFolder(extensionName, folder.uri);
}
getWorkspaceFolder(uri: vscode.Uri, resolveParent?: boolean): vscode.WorkspaceFolder {
if (!this._workspace) {
return undefined;