Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
f500f659
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,发现更多精彩内容 >>
提交
f500f659
编写于
7月 20, 2018
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create links for files section in tsconfig
上级
91d55c96
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
21 deletion
+36
-21
extensions/typescript-language-features/src/features/tsconfig.ts
...ons/typescript-language-features/src/features/tsconfig.ts
+36
-21
未找到文件。
extensions/typescript-language-features/src/features/tsconfig.ts
浏览文件 @
f500f659
...
...
@@ -7,6 +7,12 @@ import * as jsonc from 'jsonc-parser';
import
{
dirname
,
join
}
from
'
path
'
;
import
*
as
vscode
from
'
vscode
'
;
function
mapNode
<
R
>
(
node
:
jsonc
.
Node
|
undefined
,
f
:
(
x
:
jsonc
.
Node
)
=>
R
):
R
[]
{
return
node
&&
node
.
type
===
'
array
'
&&
node
.
children
?
node
.
children
.
map
(
f
)
:
[];
}
class
TsconfigLinkProvider
implements
vscode
.
DocumentLinkProvider
{
public
provideDocumentLinks
(
...
...
@@ -18,34 +24,43 @@ class TsconfigLinkProvider implements vscode.DocumentLinkProvider {
return
null
;
}
return
this
.
getNodes
(
root
).
map
(
node
=>
new
vscode
.
DocumentLink
(
this
.
getRange
(
document
,
node
),
this
.
getTarget
(
document
,
node
)));
return
[
this
.
getExendsLink
(
document
,
root
),
...
this
.
getFilesLinks
(
document
,
root
),
...
this
.
getReferencesLinks
(
document
,
root
)
].
filter
(
x
=>
!!
x
)
as
vscode
.
DocumentLink
[];
}
private
getNodes
(
root
:
jsonc
.
Node
):
ReadonlyArray
<
jsonc
.
Node
>
{
const
nodes
:
jsonc
.
Node
[]
=
[];
const
extendsNode
=
jsonc
.
findNodeAtLocation
(
root
,
[
'
extends
'
]);
if
(
this
.
isPathValue
(
extendsNode
))
{
nodes
.
push
(
extendsNode
);
}
private
getExendsLink
(
document
:
vscode
.
TextDocument
,
root
:
jsonc
.
Node
):
vscode
.
DocumentLink
|
undefined
{
return
this
.
pathNodeToLink
(
document
,
jsonc
.
findNodeAtLocation
(
root
,
[
'
extends
'
]));
}
const
referencesNode
=
jsonc
.
findNodeAtLocation
(
root
,
[
'
references
'
]);
if
(
referencesNode
&&
referencesNode
.
type
===
'
array
'
&&
referencesNode
.
children
)
{
for
(
const
child
of
referencesNode
.
children
)
{
const
path
=
jsonc
.
findNodeAtLocation
(
child
,
[
'
path
'
]);
if
(
this
.
isPathValue
(
path
))
{
nodes
.
push
(
path
);
}
}
}
private
getFilesLinks
(
document
:
vscode
.
TextDocument
,
root
:
jsonc
.
Node
)
{
return
mapNode
(
jsonc
.
findNodeAtLocation
(
root
,
[
'
files
'
]),
node
=>
this
.
pathNodeToLink
(
document
,
node
));
}
private
getReferencesLinks
(
document
:
vscode
.
TextDocument
,
root
:
jsonc
.
Node
)
{
return
mapNode
(
jsonc
.
findNodeAtLocation
(
root
,
[
'
references
'
]),
child
=>
this
.
pathNodeToLink
(
document
,
jsonc
.
findNodeAtLocation
(
child
,
[
'
path
'
])));
}
return
nodes
;
private
pathNodeToLink
(
document
:
vscode
.
TextDocument
,
node
:
jsonc
.
Node
|
undefined
):
vscode
.
DocumentLink
|
undefined
{
return
this
.
isPathValue
(
node
)
?
new
vscode
.
DocumentLink
(
this
.
getRange
(
document
,
node
),
this
.
getTarget
(
document
,
node
))
:
undefined
;
}
private
isPathValue
(
extendsNode
:
jsonc
.
Node
|
undefined
):
extendsNode
is
jsonc
.
Node
{
return
extendsNode
&&
extendsNode
.
type
===
'
string
'
&&
extendsNode
.
value
;
return
extendsNode
&&
extendsNode
.
type
===
'
string
'
&&
extendsNode
.
value
&&
!
(
extendsNode
.
value
as
string
).
includes
(
'
*
'
);
}
private
getTarget
(
document
:
vscode
.
TextDocument
,
node
:
jsonc
.
Node
):
vscode
.
Uri
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录