Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
2315df4b
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2315df4b
编写于
1月 11, 2018
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "Fix #40018"
This reverts commit
7ffffa09
.
上级
e37de9d1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
75 addition
and
49 deletion
+75
-49
src/vs/workbench/api/node/extHostTreeViews.ts
src/vs/workbench/api/node/extHostTreeViews.ts
+20
-7
src/vs/workbench/test/electron-browser/api/extHostTreeViews.test.ts
...kbench/test/electron-browser/api/extHostTreeViews.test.ts
+55
-42
未找到文件。
src/vs/workbench/api/node/extHostTreeViews.ts
浏览文件 @
2315df4b
...
...
@@ -77,7 +77,7 @@ interface TreeNode {
class
ExtHostTreeView
<
T
>
extends
Disposable
{
private
_itemHandlePool
=
0
;
private
static
ROOT_HANDLE
=
'
0
'
;
private
elements
:
Map
<
TreeItemHandle
,
T
>
=
new
Map
<
TreeItemHandle
,
T
>
();
private
nodes
:
Map
<
T
,
TreeNode
>
=
new
Map
<
T
,
TreeNode
>
();
...
...
@@ -103,10 +103,12 @@ class ExtHostTreeView<T> extends Disposable {
elements
=
coalesce
(
elements
||
[]);
return
TPromise
.
join
(
elements
.
map
((
element
,
index
)
=>
{
const
node
=
this
.
nodes
.
get
(
element
);
return
this
.
resolveElement
(
element
,
node
?
node
.
handle
:
`
${
++
this
.
_itemHandlePool
}
`
,
parentHandle
)
const
currentHandle
=
node
&&
node
.
parentHandle
===
parentHandle
?
node
.
handle
:
void
0
;
return
this
.
resolveElement
(
element
,
currentHandle
?
currentHandle
:
index
,
parentHandle
)
.
then
(
treeItem
=>
{
if
(
treeItem
)
{
if
(
!
node
)
{
if
(
!
currentHandle
)
{
// update the caches if current handle is not used
this
.
nodes
.
set
(
element
,
{
handle
:
treeItem
.
handle
,
parentHandle
,
...
...
@@ -137,21 +139,26 @@ class ExtHostTreeView<T> extends Disposable {
}
}
private
resolveElement
(
element
:
T
,
handle
:
TreeItemHandle
,
parentHandle
:
TreeItemHandle
):
TPromise
<
ITreeItem
>
{
private
resolveElement
(
element
:
T
,
handle
OrIndex
:
TreeItemHandle
|
number
,
parentHandle
:
TreeItemHandle
):
TPromise
<
ITreeItem
>
{
return
asWinJsPromise
(()
=>
this
.
dataProvider
.
getTreeItem
(
element
))
.
then
(
extTreeItem
=>
this
.
massageTreeItem
(
element
,
extTreeItem
,
handle
,
parentHandle
));
.
then
(
extTreeItem
=>
this
.
massageTreeItem
(
element
,
extTreeItem
,
handle
OrIndex
,
parentHandle
));
}
private
massageTreeItem
(
element
:
T
,
extensionTreeItem
:
vscode
.
TreeItem
,
handle
:
TreeItemHandle
,
parentHandle
:
TreeItemHandle
):
ITreeItem
{
private
massageTreeItem
(
element
:
T
,
extensionTreeItem
:
vscode
.
TreeItem
,
handle
OrIndex
:
TreeItemHandle
|
number
,
parentHandle
:
TreeItemHandle
):
ITreeItem
{
if
(
!
extensionTreeItem
)
{
return
null
;
}
const
icon
=
this
.
getLightIconPath
(
extensionTreeItem
);
const
label
=
extensionTreeItem
.
label
;
const
handle
=
typeof
handleOrIndex
===
'
number
'
?
this
.
generateHandle
(
label
,
handleOrIndex
,
parentHandle
)
// create the handle
:
handleOrIndex
;
// reuse the passed handle
return
{
handle
,
parentHandle
,
label
:
extensionTreeItem
.
label
,
label
,
command
:
extensionTreeItem
.
command
?
this
.
commands
.
toInternal
(
extensionTreeItem
.
command
)
:
void
0
,
contextValue
:
extensionTreeItem
.
contextValue
,
icon
,
...
...
@@ -160,6 +167,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
)
{
...
...
src/vs/workbench/test/electron-browser/api/extHostTreeViews.test.ts
浏览文件 @
2315df4b
...
...
@@ -83,24 +83,24 @@ suite('ExtHostTreeView', function () {
return
testObject
.
$getElements
(
'
testNodeTreeProvider
'
)
.
then
(
elements
=>
{
const
actuals
=
elements
.
map
(
e
=>
e
.
handle
);
assert
.
deepEqual
(
actuals
,
[
'
1
'
,
'
2
'
]);
assert
.
deepEqual
(
actuals
,
[
'
0/0:a
'
,
'
0/1:b
'
]);
return
TPromise
.
join
([
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
1
'
)
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
0/0:a
'
)
.
then
(
children
=>
{
const
actuals
=
children
.
map
(
e
=>
e
.
handle
);
assert
.
deepEqual
(
actuals
,
[
'
3
'
,
'
4
'
]);
assert
.
deepEqual
(
actuals
,
[
'
0/0:a/0:aa
'
,
'
0/0:a/1:ab
'
]);
return
TPromise
.
join
([
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
3
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
4
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
0/0:a/0:aa
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
0/0:a/1:ab
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
]);
}),
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
2
'
)
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
0/1:b
'
)
.
then
(
children
=>
{
const
actuals
=
children
.
map
(
e
=>
e
.
handle
);
assert
.
deepEqual
(
actuals
,
[
'
5
'
,
'
6
'
]);
assert
.
deepEqual
(
actuals
,
[
'
0/1:b/0:ba
'
,
'
0/1:b/1:bb
'
]);
return
TPromise
.
join
([
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
5
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
6
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
0/1:b/0:ba
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
,
'
0/1:b/1:bb
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
]);
})
]);
...
...
@@ -111,24 +111,24 @@ suite('ExtHostTreeView', function () {
return
testObject
.
$getElements
(
'
testStringTreeProvider
'
)
.
then
(
elements
=>
{
const
actuals
=
elements
.
map
(
e
=>
e
.
handle
);
assert
.
deepEqual
(
actuals
,
[
'
1
'
,
'
2
'
]);
assert
.
deepEqual
(
actuals
,
[
'
0/0:a
'
,
'
0/1:b
'
]);
return
TPromise
.
join
([
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
1
'
)
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
0/0:a
'
)
.
then
(
children
=>
{
const
actuals
=
children
.
map
(
e
=>
e
.
handle
);
assert
.
deepEqual
(
actuals
,
[
'
3
'
,
'
4
'
]);
assert
.
deepEqual
(
actuals
,
[
'
0/0:a/0:aa
'
,
'
0/0:a/1:ab
'
]);
return
TPromise
.
join
([
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
3
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
4
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
0/0:a/0:aa
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
0/0:a/1:ab
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
]);
}),
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
2
'
)
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
0/1:b
'
)
.
then
(
children
=>
{
const
actuals
=
children
.
map
(
e
=>
e
.
handle
);
assert
.
deepEqual
(
actuals
,
[
'
5
'
,
'
6
'
]);
assert
.
deepEqual
(
actuals
,
[
'
0/1:b/0:ba
'
,
'
0/1:b/1:bb
'
]);
return
TPromise
.
join
([
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
5
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
6
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
0/1:b/0:ba
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
)),
testObject
.
$getChildren
(
'
testStringTreeProvider
'
,
'
0/1:b/1:bb
'
).
then
(
children
=>
assert
.
equal
(
children
.
length
,
0
))
]);
})
]);
...
...
@@ -146,9 +146,9 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh a parent node
'
,
()
=>
{
return
new
TPromise
((
c
,
e
)
=>
{
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
2
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
2
'
]),
{
handle
:
'
2
'
,
assert
.
deepEqual
([
'
0/1:b
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/1:b
'
]),
{
handle
:
'
0/1:b
'
,
label
:
'
b
'
,
});
c
(
null
);
...
...
@@ -159,10 +159,10 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh a leaf node
'
,
function
(
done
)
{
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
6
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
6
'
]),
{
handle
:
'
6
'
,
parentHandle
:
'
2
'
,
assert
.
deepEqual
([
'
0/1:b/1:bb
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/1:b/1:bb
'
]),
{
handle
:
'
0/1:b/1:bb
'
,
parentHandle
:
'
0/1:b
'
,
label
:
'
bb
'
});
done
();
...
...
@@ -172,14 +172,14 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh parent and child node trigger refresh only on parent - scenario 1
'
,
function
(
done
)
{
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
2
'
,
'
3
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
2
'
]),
{
handle
:
'
2
'
,
assert
.
deepEqual
([
'
0/1:b
'
,
'
0/0:a/0:aa
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/1:b
'
]),
{
handle
:
'
0/1:b
'
,
label
:
'
b
'
,
});
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
3
'
]),
{
handle
:
'
3
'
,
parentHandle
:
'
1
'
,
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/0:a/0:aa
'
]),
{
handle
:
'
0/0:a/0:aa
'
,
parentHandle
:
'
0/0:a
'
,
label
:
'
aa
'
,
});
done
();
...
...
@@ -191,14 +191,14 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh parent and child node trigger refresh only on parent - scenario 2
'
,
function
(
done
)
{
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
2
'
,
'
3
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
2
'
]),
{
handle
:
'
2
'
,
assert
.
deepEqual
([
'
0/0:a/0:aa
'
,
'
0/1:b
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/1:b
'
]),
{
handle
:
'
0/1:b
'
,
label
:
'
b
'
,
});
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
3
'
]),
{
handle
:
'
3
'
,
parentHandle
:
'
1
'
,
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/0:a/0:aa
'
]),
{
handle
:
'
0/0:a/0:aa
'
,
parentHandle
:
'
0/0:a
'
,
label
:
'
aa
'
,
});
done
();
...
...
@@ -211,9 +211,9 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh an element for label change
'
,
function
(
done
)
{
labels
[
'
a
'
]
=
'
aa
'
;
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
1
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
1
'
]),
{
handle
:
'
1
'
,
assert
.
deepEqual
([
'
0/0:a
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
(
removeUnsetKeys
(
actuals
[
'
0/0:a
'
]),
{
handle
:
'
0/0:a
'
,
label
:
'
aa
'
,
});
done
();
...
...
@@ -234,7 +234,7 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh calls are throttled on elements
'
,
function
(
done
)
{
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
1
'
,
'
2
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
([
'
0/0:a
'
,
'
0/1:b
'
],
Object
.
keys
(
actuals
));
done
();
});
...
...
@@ -246,7 +246,7 @@ suite('ExtHostTreeView', function () {
test
(
'
refresh calls are throttled on unknown elements
'
,
function
(
done
)
{
target
.
onRefresh
.
event
(
actuals
=>
{
assert
.
deepEqual
([
'
1
'
,
'
2
'
],
Object
.
keys
(
actuals
));
assert
.
deepEqual
([
'
0/0:a
'
,
'
0/1:b
'
],
Object
.
keys
(
actuals
));
done
();
});
...
...
@@ -280,6 +280,19 @@ suite('ExtHostTreeView', function () {
onDidChangeTreeNode
.
fire
(
getNode
(
'
a
'
));
});
test
(
'
generate unique handles from labels by escaping them
'
,
()
=>
{
tree
=
{
'
a/0:b
'
:
{}
};
onDidChangeTreeNode
.
fire
();
return
testObject
.
$getElements
(
'
testNodeTreeProvider
'
)
.
then
(
elements
=>
{
assert
.
deepEqual
(
elements
.
map
(
e
=>
e
.
handle
),
[
'
0/0:a//0:b
'
]);
});
});
function
removeUnsetKeys
(
obj
:
any
):
any
{
const
result
=
{};
for
(
const
key
of
Object
.
keys
(
obj
))
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录