Escape label while generating handle

This commit is contained in:
Sandeep Somavarapu
2017-12-04 12:05:56 +01:00
parent 3f9b66c2cd
commit 1dc587e6bb
2 changed files with 26 additions and 2 deletions

View File

@@ -141,6 +141,9 @@ class ExtHostTreeView<T> extends Disposable {
parent: parentHandle,
children: void 0
});
if (this.elements.has(treeItem.handle)) {
return TPromise.wrapError<ITreeItem>(new Error(localize('treeView.duplicateElement', 'Element {0} is already registered', element)));
}
this.elements.set(treeItem.handle, element);
}
return treeItem;
@@ -161,10 +164,12 @@ class ExtHostTreeView<T> extends Disposable {
return null;
}
const icon = this.getLightIconPath(extensionTreeItem);
const label = extensionTreeItem.label;
const handle = this.generateHandle(label, index, parentHandle);
return {
handle: `${parentHandle ? parentHandle : ExtHostTreeView.ROOT_HANDLE}/${index}:${extensionTreeItem.label}`,
handle,
parentHandle,
label: extensionTreeItem.label,
label,
command: extensionTreeItem.command ? this.commands.toInternal(extensionTreeItem.command) : void 0,
contextValue: extensionTreeItem.contextValue,
icon,
@@ -173,6 +178,12 @@ class ExtHostTreeView<T> extends Disposable {
};
}
private generateHandle(label: string, index: number, parentHandle: TreeItemHandle): TreeItemHandle {
parentHandle = parentHandle ? parentHandle : ExtHostTreeView.ROOT_HANDLE;
label = label.indexOf('/') !== -1 ? label.replace('/', '//') : label;
return `${parentHandle}/${index}:${label}`;
}
private getLightIconPath(extensionTreeItem: vscode.TreeItem): string {
if (extensionTreeItem.iconPath) {
if (typeof extensionTreeItem.iconPath === 'string' || extensionTreeItem.iconPath instanceof URI) {