Introduce WorkspaceFolder model that wraps information about a workspace folder.

Use WorkspaceFolder instead of URIs in IWorkspaceContextService
This commit is contained in:
Sandeep Somavarapu
2017-09-16 14:01:23 +02:00
parent 3339ad83f1
commit 80e2c7a338
53 changed files with 551 additions and 240 deletions

View File

@@ -48,6 +48,7 @@ import { ITreeItem } from 'vs/workbench/common/views';
import { ThemeColor } from 'vs/platform/theme/common/themeService';
import { IDisposable } from 'vs/base/common/lifecycle';
import { SerializedError } from 'vs/base/common/errors';
import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
export interface IEnvironment {
isExtensionDevelopmentDebug: boolean;
@@ -64,7 +65,7 @@ export interface IEnvironment {
export interface IWorkspaceData {
id: string;
name: string;
folders: URI[];
folders: WorkspaceFolder[];
}
export interface IInitData {

View File

@@ -8,7 +8,7 @@ import URI from 'vs/base/common/uri';
import Event, { Emitter } from 'vs/base/common/event';
import { normalize } from 'vs/base/common/paths';
import { delta } from 'vs/base/common/arrays';
import { relative, basename } from 'path';
import { relative } from 'path';
import { Workspace } from 'vs/platform/workspace/common/workspace';
import { IResourceEdit } from 'vs/editor/common/services/bulkEdit';
import { TPromise } from 'vs/base/common/winjs.base';
@@ -28,26 +28,22 @@ class Workspace2 extends Workspace {
return data ? new Workspace2(data) : null;
}
private readonly _folder: vscode.WorkspaceFolder[] = [];
private readonly _workspaceFolders: vscode.WorkspaceFolder[] = [];
private readonly _structure = new TrieMap<vscode.WorkspaceFolder>(s => s.split('/'));
private constructor(data: IWorkspaceData) {
super(data.id, data.name, data.folders);
// setup the workspace folder data structure
this.folders.forEach((uri, index) => {
const folder = {
name: basename(uri.fsPath),
uri,
index
};
this._folder.push(folder);
this._structure.insert(folder.uri.toString(), folder);
this.folders.forEach(({ name, uri, index }) => {
const workspaceFolder = { name, uri, index };
this._workspaceFolders.push(workspaceFolder);
this._structure.insert(workspaceFolder.uri.toString(), workspaceFolder);
});
}
get workspaceFolders(): vscode.WorkspaceFolder[] {
return this._folder.slice(0);
return this._workspaceFolders.slice(0);
}
getWorkspaceFolder(uri: URI): vscode.WorkspaceFolder {
@@ -114,7 +110,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape {
if (folders.length === 0) {
return undefined;
}
return folders[0].fsPath;
return folders[0].uri.fsPath;
}
getRelativePath(pathOrUri: string | vscode.Uri, includeWorkspace?: boolean): string {