Skip to content

Commit 86fe4b3

Browse files
committed
💄
1 parent caafa5b commit 86fe4b3

1 file changed

Lines changed: 20 additions & 21 deletions

File tree

extensions/markdown-language-features/src/features/foldingProvider.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,32 @@ import { flatten } from '../util/arrays';
1111

1212
const rangeLimit = 5000;
1313

14+
const isStartRegion = (t: string) => /^\s*<!--\s*#?region\b.*-->/.test(t);
15+
const isEndRegion = (t: string) => /^\s*<!--\s*#?endregion\b.*-->/.test(t);
16+
17+
const isRegionMarker = (token: Token) =>
18+
token.type === 'html_block' && (isStartRegion(token.content) || isEndRegion(token.content));
19+
1420
export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvider {
1521

1622
constructor(
1723
private readonly engine: MarkdownEngine
1824
) { }
1925

20-
private async getRegions(document: vscode.TextDocument): Promise<vscode.FoldingRange[]> {
21-
22-
const isStartRegion = (t: string) => /^\s*<!--\s*#?region\b.*-->/.test(t);
23-
const isEndRegion = (t: string) => /^\s*<!--\s*#?endregion\b.*-->/.test(t);
24-
25-
const isRegionMarker = (token: Token) => token.type === 'html_block' &&
26-
(isStartRegion(token.content) || isEndRegion(token.content));
27-
26+
public async provideFoldingRanges(
27+
document: vscode.TextDocument,
28+
_: vscode.FoldingContext,
29+
_token: vscode.CancellationToken
30+
): Promise<vscode.FoldingRange[]> {
31+
const foldables = await Promise.all([
32+
this.getRegions(document),
33+
this.getHeaderFoldingRanges(document),
34+
this.getBlockFoldingRanges(document)
35+
]);
36+
return flatten(foldables).slice(0, rangeLimit);
37+
}
2838

39+
private async getRegions(document: vscode.TextDocument): Promise<vscode.FoldingRange[]> {
2940
const tokens = await this.engine.parse(document);
3041
const regionMarkers = tokens.filter(isRegionMarker)
3142
.map(token => ({ line: token.map[0], isStart: isStartRegion(token.content) }));
@@ -45,18 +56,6 @@ export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvi
4556
.filter((region: vscode.FoldingRange | null): region is vscode.FoldingRange => !!region);
4657
}
4758

48-
public async provideFoldingRanges(
49-
document: vscode.TextDocument,
50-
_: vscode.FoldingContext,
51-
_token: vscode.CancellationToken
52-
): Promise<vscode.FoldingRange[]> {
53-
const foldables = await Promise.all([
54-
this.getRegions(document),
55-
this.getHeaderFoldingRanges(document),
56-
this.getBlockFoldingRanges(document)]);
57-
return flatten(foldables).slice(0, rangeLimit);
58-
}
59-
6059
private async getHeaderFoldingRanges(document: vscode.TextDocument) {
6160
const tocProvider = new TableOfContentsProvider(this.engine, document);
6261
const toc = await tocProvider.getToc();
@@ -71,7 +70,7 @@ export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvi
7170

7271
private async getBlockFoldingRanges(document: vscode.TextDocument): Promise<vscode.FoldingRange[]> {
7372

74-
const isFoldableToken = (token: Token) => {
73+
const isFoldableToken = (token: Token): boolean => {
7574
switch (token.type) {
7675
case 'fence':
7776
case 'list_item_open':

0 commit comments

Comments
 (0)