have TrieMap and StringTrieMap for more flex

This commit is contained in:
Johannes Rieken
2017-09-20 16:53:48 +02:00
parent 53190ab840
commit 55490528e7
10 changed files with 60 additions and 58 deletions

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 } from 'path';
import { relative, dirname } from 'path';
import { Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { IWorkspaceData, ExtHostWorkspaceShape, MainContext, MainThreadWorkspaceShape, IMainContext } from './extHost.protocol';
import * as vscode from 'vscode';
@@ -22,7 +22,7 @@ class Workspace2 extends Workspace {
}
private readonly _workspaceFolders: vscode.WorkspaceFolder[] = [];
private readonly _structure = new TrieMap<vscode.WorkspaceFolder>(s => s.split('/'));
private readonly _structure = new TrieMap<URI, vscode.WorkspaceFolder>(uri => [uri.scheme, uri.authority].concat(uri.path.split('/')));
private constructor(data: IWorkspaceData) {
super(data.id, data.name, data.folders.map(folder => new WorkspaceFolder(folder)));
@@ -31,7 +31,7 @@ class Workspace2 extends Workspace {
this.folders.forEach(({ name, uri, index }) => {
const workspaceFolder = { name, uri, index };
this._workspaceFolders.push(workspaceFolder);
this._structure.insert(workspaceFolder.uri.toString(), workspaceFolder);
this._structure.insert(workspaceFolder.uri, workspaceFolder);
});
}
@@ -40,19 +40,13 @@ class Workspace2 extends Workspace {
}
getWorkspaceFolder(uri: URI): vscode.WorkspaceFolder {
let str = uri.toString();
let folder = this._structure.lookUp(str);
let folder = this._structure.lookUp(uri);
if (folder) {
// `uri` is a workspace folder so we
let parts = str.split('/');
while (parts.length) {
if (parts.pop()) {
break;
}
}
str = parts.join('/');
// `uri` is a workspace folder so we check for
// its parent
uri = uri.with({ path: dirname(uri.path) });
}
return this._structure.findSubstr(str);
return this._structure.findSubstr(uri);
}
}