Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
86fe4b3b
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,发现更多精彩内容 >>
提交
86fe4b3b
编写于
4月 02, 2019
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
💄
上级
caafa5b6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
21 deletion
+20
-21
extensions/markdown-language-features/src/features/foldingProvider.ts
...arkdown-language-features/src/features/foldingProvider.ts
+20
-21
未找到文件。
extensions/markdown-language-features/src/features/foldingProvider.ts
浏览文件 @
86fe4b3b
...
...
@@ -11,21 +11,32 @@ import { flatten } from '../util/arrays';
const
rangeLimit
=
5000
;
const
isStartRegion
=
(
t
:
string
)
=>
/^
\s
*<!--
\s
*#
?
region
\b
.*-->/
.
test
(
t
);
const
isEndRegion
=
(
t
:
string
)
=>
/^
\s
*<!--
\s
*#
?
endregion
\b
.*-->/
.
test
(
t
);
const
isRegionMarker
=
(
token
:
Token
)
=>
token
.
type
===
'
html_block
'
&&
(
isStartRegion
(
token
.
content
)
||
isEndRegion
(
token
.
content
));
export
default
class
MarkdownFoldingProvider
implements
vscode
.
FoldingRangeProvider
{
constructor
(
private
readonly
engine
:
MarkdownEngine
)
{
}
private
async
getRegions
(
document
:
vscode
.
TextDocument
):
Promise
<
vscode
.
FoldingRange
[]
>
{
const
isStartRegion
=
(
t
:
string
)
=>
/^
\s
*<!--
\s
*#
?
region
\b
.*-->/
.
test
(
t
);
const
isEndRegion
=
(
t
:
string
)
=>
/^
\s
*<!--
\s
*#
?
endregion
\b
.*-->/
.
test
(
t
);
const
isRegionMarker
=
(
token
:
Token
)
=>
token
.
type
===
'
html_block
'
&&
(
isStartRegion
(
token
.
content
)
||
isEndRegion
(
token
.
content
));
public
async
provideFoldingRanges
(
document
:
vscode
.
TextDocument
,
_
:
vscode
.
FoldingContext
,
_token
:
vscode
.
CancellationToken
):
Promise
<
vscode
.
FoldingRange
[]
>
{
const
foldables
=
await
Promise
.
all
([
this
.
getRegions
(
document
),
this
.
getHeaderFoldingRanges
(
document
),
this
.
getBlockFoldingRanges
(
document
)
]);
return
flatten
(
foldables
).
slice
(
0
,
rangeLimit
);
}
private
async
getRegions
(
document
:
vscode
.
TextDocument
):
Promise
<
vscode
.
FoldingRange
[]
>
{
const
tokens
=
await
this
.
engine
.
parse
(
document
);
const
regionMarkers
=
tokens
.
filter
(
isRegionMarker
)
.
map
(
token
=>
({
line
:
token
.
map
[
0
],
isStart
:
isStartRegion
(
token
.
content
)
}));
...
...
@@ -45,18 +56,6 @@ export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvi
.
filter
((
region
:
vscode
.
FoldingRange
|
null
):
region
is
vscode
.
FoldingRange
=>
!!
region
);
}
public
async
provideFoldingRanges
(
document
:
vscode
.
TextDocument
,
_
:
vscode
.
FoldingContext
,
_token
:
vscode
.
CancellationToken
):
Promise
<
vscode
.
FoldingRange
[]
>
{
const
foldables
=
await
Promise
.
all
([
this
.
getRegions
(
document
),
this
.
getHeaderFoldingRanges
(
document
),
this
.
getBlockFoldingRanges
(
document
)]);
return
flatten
(
foldables
).
slice
(
0
,
rangeLimit
);
}
private
async
getHeaderFoldingRanges
(
document
:
vscode
.
TextDocument
)
{
const
tocProvider
=
new
TableOfContentsProvider
(
this
.
engine
,
document
);
const
toc
=
await
tocProvider
.
getToc
();
...
...
@@ -71,7 +70,7 @@ export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvi
private
async
getBlockFoldingRanges
(
document
:
vscode
.
TextDocument
):
Promise
<
vscode
.
FoldingRange
[]
>
{
const
isFoldableToken
=
(
token
:
Token
)
=>
{
const
isFoldableToken
=
(
token
:
Token
)
:
boolean
=>
{
switch
(
token
.
type
)
{
case
'
fence
'
:
case
'
list_item_open
'
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录