Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
91b94963
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,发现更多精彩内容 >>
未验证
提交
91b94963
编写于
3月 21, 2018
作者:
J
Johannes Rieken
提交者:
GitHub
3月 21, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #46177 from Microsoft/sandy081/treeViewAPI
API - Expose TreeView in API
上级
d805ac6b
a1bcd80e
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
62 addition
and
83 deletion
+62
-83
src/vs/vscode.d.ts
src/vs/vscode.d.ts
+38
-0
src/vs/vscode.proposed.d.ts
src/vs/vscode.proposed.d.ts
+0
-70
src/vs/workbench/api/node/extHost.api.impl.ts
src/vs/workbench/api/node/extHost.api.impl.ts
+5
-2
src/vs/workbench/api/node/extHostTreeViews.ts
src/vs/workbench/api/node/extHostTreeViews.ts
+13
-5
src/vs/workbench/test/electron-browser/api/extHostTreeViews.test.ts
...kbench/test/electron-browser/api/extHostTreeViews.test.ts
+6
-6
未找到文件。
src/vs/vscode.d.ts
浏览文件 @
91b94963
...
...
@@ -5189,12 +5189,39 @@ declare module 'vscode' {
/**
* Register a [TreeDataProvider](#TreeDataProvider) for the view contributed using the extension point `views`.
* This will allow you to contribute data to the [TreeView](#TreeView) and update if the data changes.
* To get access to the [TreeView](#TreeView) and perform operations on it, use [createTreeView](#window.createTreeView).
*
* @param viewId Id of the view contributed using the extension point `views`.
* @param treeDataProvider A [TreeDataProvider](#TreeDataProvider) that provides tree data for the view
*/
export
function
registerTreeDataProvider
<
T
>
(
viewId
:
string
,
treeDataProvider
:
TreeDataProvider
<
T
>
):
Disposable
;
/**
* Create a [TreeView](#TreeView) for the view contributed using the extension point `views`.
* @param viewId Id of the view contributed using the extension point `views`.
* @param options Options object to provide [TreeDataProvider](#TreeDataProvider) for the view.
* @returns a [TreeView](#TreeView).
*/
export
function
createTreeView
<
T
>
(
viewId
:
string
,
options
:
{
treeDataProvider
:
TreeDataProvider
<
T
>
}):
TreeView
<
T
>
;
}
/**
* Represents a Tree view
*/
export
interface
TreeView
<
T
>
extends
Disposable
{
/**
* Reveal an element. By default revealed element is selected.
*
* In order to not to select, set the option `select` to `false`.
*
* **NOTE:** [TreeDataProvider](#TreeDataProvider) is required to implement [getParent](#TreeDataProvider.getParent) method to access this API.
*/
reveal
(
element
:
T
,
options
?:
{
select
?:
boolean
}):
Thenable
<
void
>
;
}
/**
* A data provider that provides tree data
*/
...
...
@@ -5221,6 +5248,17 @@ declare module 'vscode' {
* @return Children of `element` or root if no element is passed.
*/
getChildren
(
element
?:
T
):
ProviderResult
<
T
[]
>
;
/**
* Optional method to return the parent of `element`.
* Return `null` or `undefined` if `element` is a child of root.
*
* **NOTE:** This method should be implemented in order to access [reveal](#TreeView.reveal) API.
*
* @param element The element for which the parent has to be returned.
* @return Parent of `element`.
*/
getParent
?(
element
:
T
):
ProviderResult
<
T
>
;
}
export
class
TreeItem
{
...
...
src/vs/vscode.proposed.d.ts
浏览文件 @
91b94963
...
...
@@ -663,76 +663,6 @@ declare module 'vscode' {
//#endregion
//#region Sandeep: TreeView
export
namespace
window
{
/**
* Register a [TreeDataProvider](#TreeDataProvider) for the view contributed using the extension point `views`.
* @param viewId Id of the view contributed using the extension point `views`.
* @param treeDataProvider A [TreeDataProvider](#TreeDataProvider) that provides tree data for the view
* @return handle to the [treeview](#TreeView) that can be disposable.
*/
export
function
registerTreeDataProvider
<
T
>
(
viewId
:
string
,
treeDataProvider
:
TreeDataProvider
<
T
>
):
TreeView
<
T
>
;
}
/**
* Represents a Tree view
*/
export
interface
TreeView
<
T
>
extends
Disposable
{
/**
* Reveal an element. By default revealed element is selected.
*
* In order to not to select, set the option `select` to `false`.
*
* **NOTE:** [TreeDataProvider](#TreeDataProvider) is required to implement [getParent](#TreeDataProvider.getParent) method to access this API.
*/
reveal
(
element
:
T
,
options
?:
{
select
?:
boolean
}):
Thenable
<
void
>
;
}
/**
* A data provider that provides tree data
*/
export
interface
TreeDataProvider
<
T
>
{
/**
* An optional event to signal that an element or root has changed.
* This will trigger the view to update the changed element/root and its children recursively (if shown).
* To signal that root has changed, do not pass any argument or pass `undefined` or `null`.
*/
onDidChangeTreeData
?:
Event
<
T
|
undefined
|
null
>
;
/**
* Get [TreeItem](#TreeItem) representation of the `element`
*
* @param element The element for which [TreeItem](#TreeItem) representation is asked for.
* @return [TreeItem](#TreeItem) representation of the element
*/
getTreeItem
(
element
:
T
):
TreeItem
|
Thenable
<
TreeItem
>
;
/**
* Get the children of `element` or root if no element is passed.
*
* @param element The element from which the provider gets children. Can be `undefined`.
* @return Children of `element` or root if no element is passed.
*/
getChildren
(
element
?:
T
):
ProviderResult
<
T
[]
>
;
/**
* Optional method to return the parent of `element`.
* Return `null` or `undefined` if `element` is a child of root.
*
* **NOTE:** This method should be implemented in order to access [reveal](#TreeView.reveal) API.
*
* @param element The element for which the parent has to be returned.
* @return Parent of `element`.
*/
getParent
?(
element
:
T
):
ProviderResult
<
T
>
;
}
//#endregion
//#region Alex: TextEditor.visibleRange and related event
export
interface
TextEditor
{
...
...
src/vs/workbench/api/node/extHost.api.impl.ts
浏览文件 @
91b94963
...
...
@@ -403,8 +403,11 @@ export function createApiFactory(
}
return
extHostTerminalService
.
createTerminal
(
<
string
>
nameOrOptions
,
shellPath
,
shellArgs
);
},
registerTreeDataProvider
(
viewId
:
string
,
treeDataProvider
:
vscode
.
TreeDataProvider
<
any
>
):
vscode
.
TreeView
<
any
>
{
return
extHostTreeViews
.
registerTreeDataProvider
(
viewId
,
treeDataProvider
,
(
fn
)
=>
proposedApiFunction
(
extension
,
fn
));
registerTreeDataProvider
(
viewId
:
string
,
treeDataProvider
:
vscode
.
TreeDataProvider
<
any
>
):
vscode
.
Disposable
{
return
extHostTreeViews
.
registerTreeDataProvider
(
viewId
,
treeDataProvider
);
},
createTreeView
(
viewId
:
string
,
options
:
{
treeDataProvider
:
vscode
.
TreeDataProvider
<
any
>
}):
vscode
.
TreeView
<
any
>
{
return
extHostTreeViews
.
createTreeView
(
viewId
,
options
);
},
// proposed API
sampleFunction
:
proposedApiFunction
(
extension
,
()
=>
{
...
...
src/vs/workbench/api/node/extHostTreeViews.ts
浏览文件 @
91b94963
...
...
@@ -38,14 +38,22 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
});
}
registerTreeDataProvider
<
T
>
(
id
:
string
,
dataProvider
:
vscode
.
TreeDataProvider
<
T
>
,
proposedApiFunction
:
<
U
>
(
fn
:
U
)
=>
U
):
vscode
.
TreeView
<
T
>
{
const
treeView
=
this
.
createExtHostTreeViewer
(
id
,
dataProvider
);
registerTreeDataProvider
<
T
>
(
id
:
string
,
treeDataProvider
:
vscode
.
TreeDataProvider
<
T
>
):
vscode
.
Disposable
{
const
treeView
=
this
.
createTreeView
(
id
,
{
treeDataProvider
});
return
{
dispose
:
()
=>
treeView
.
dispose
()
};
}
createTreeView
<
T
>
(
viewId
:
string
,
options
:
{
treeDataProvider
:
vscode
.
TreeDataProvider
<
T
>
}):
vscode
.
TreeView
<
T
>
{
if
(
!
options
||
!
options
.
treeDataProvider
)
{
throw
new
Error
(
'
Options with treeDataProvider is mandatory
'
);
}
const
treeView
=
this
.
createExtHostTreeViewer
(
viewId
,
options
.
treeDataProvider
);
return
{
reveal
:
proposedApiFunction
(
(
element
:
T
,
options
?:
{
select
?:
boolean
}):
Thenable
<
void
>
=>
{
reveal
:
(
element
:
T
,
options
?:
{
select
?:
boolean
}):
Thenable
<
void
>
=>
{
return
treeView
.
reveal
(
element
,
options
);
}
)
,
},
dispose
:
()
=>
{
this
.
treeViews
.
delete
(
i
d
);
this
.
treeViews
.
delete
(
viewI
d
);
treeView
.
dispose
();
}
};
...
...
src/vs/workbench/test/electron-browser/api/extHostTreeViews.test.ts
浏览文件 @
91b94963
...
...
@@ -75,8 +75,8 @@ suite('ExtHostTreeView', function () {
testObject
=
new
ExtHostTreeViews
(
target
,
new
ExtHostCommands
(
rpcProtocol
,
new
ExtHostHeapService
(),
new
NullLogService
()));
onDidChangeTreeNode
=
new
Emitter
<
{
key
:
string
}
>
();
onDidChangeTreeNodeWithId
=
new
Emitter
<
{
key
:
string
}
>
();
testObject
.
registerTreeDataProvider
(
'
testNodeTreeProvider
'
,
aNodeTreeDataProvider
(),
(
fn
)
=>
fn
);
testObject
.
registerTreeDataProvider
(
'
testNodeWithIdTreeProvider
'
,
aNodeWithIdTreeDataProvider
(),
(
fn
)
=>
fn
);
testObject
.
createTreeView
(
'
testNodeTreeProvider
'
,
{
treeDataProvider
:
aNodeTreeDataProvider
()
}
);
testObject
.
createTreeView
(
'
testNodeWithIdTreeProvider
'
,
{
treeDataProvider
:
aNodeWithIdTreeDataProvider
()
}
);
testObject
.
$getChildren
(
'
testNodeTreeProvider
'
).
then
(
elements
=>
{
for
(
const
element
of
elements
)
{
...
...
@@ -405,14 +405,14 @@ suite('ExtHostTreeView', function () {
});
test
(
'
reveal will throw an error if getParent is not implemented
'
,
()
=>
{
const
treeView
=
testObject
.
registerTreeDataProvider
(
'
treeDataProvider
'
,
aNodeTreeDataProvider
(),
(
fn
)
=>
fn
);
const
treeView
=
testObject
.
createTreeView
(
'
treeDataProvider
'
,
{
treeDataProvider
:
aNodeTreeDataProvider
()
}
);
return
treeView
.
reveal
({
key
:
'
a
'
})
.
then
(()
=>
assert
.
fail
(
'
Reveal should throw an error as getParent is not implemented
'
),
()
=>
null
);
});
test
(
'
reveal will return empty array for root element
'
,
()
=>
{
const
revealTarget
=
sinon
.
spy
(
target
,
'
$reveal
'
);
const
treeView
=
testObject
.
registerTreeDataProvider
(
'
treeDataProvider
'
,
aCompleteNodeTreeDataProvider
(),
(
fn
)
=>
fn
);
const
treeView
=
testObject
.
createTreeView
(
'
treeDataProvider
'
,
{
treeDataProvider
:
aCompleteNodeTreeDataProvider
()
}
);
return
treeView
.
reveal
({
key
:
'
a
'
})
.
then
(()
=>
{
assert
.
ok
(
revealTarget
.
calledOnce
);
...
...
@@ -425,7 +425,7 @@ suite('ExtHostTreeView', function () {
test
(
'
reveal will return parents array for an element
'
,
()
=>
{
const
revealTarget
=
sinon
.
spy
(
target
,
'
$reveal
'
);
const
treeView
=
testObject
.
registerTreeDataProvider
(
'
treeDataProvider
'
,
aCompleteNodeTreeDataProvider
(),
(
fn
)
=>
fn
);
const
treeView
=
testObject
.
createTreeView
(
'
treeDataProvider
'
,
{
treeDataProvider
:
aCompleteNodeTreeDataProvider
()
}
);
return
treeView
.
reveal
({
key
:
'
aa
'
})
.
then
(()
=>
{
assert
.
ok
(
revealTarget
.
calledOnce
);
...
...
@@ -445,7 +445,7 @@ suite('ExtHostTreeView', function () {
}
};
const
revealTarget
=
sinon
.
spy
(
target
,
'
$reveal
'
);
const
treeView
=
testObject
.
registerTreeDataProvider
(
'
treeDataProvider
'
,
aCompleteNodeTreeDataProvider
(),
(
fn
)
=>
fn
);
const
treeView
=
testObject
.
createTreeView
(
'
treeDataProvider
'
,
{
treeDataProvider
:
aCompleteNodeTreeDataProvider
()
}
);
return
treeView
.
reveal
({
key
:
'
bac
'
},
{
select
:
false
})
.
then
(()
=>
{
assert
.
ok
(
revealTarget
.
calledOnce
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录