diff --git a/extensions/markdown-language-features/src/features/foldingProvider.ts b/extensions/markdown-language-features/src/features/foldingProvider.ts index 2f1c639521cd358c96df1001ff3ea526561f67c9..4850b3759ded1e564e042008c1cc572a2cec932f 100644 --- a/extensions/markdown-language-features/src/features/foldingProvider.ts +++ b/extensions/markdown-language-features/src/features/foldingProvider.ts @@ -11,21 +11,32 @@ import { flatten } from '../util/arrays'; const rangeLimit = 5000; +const isStartRegion = (t: string) => /^\s*/.test(t); +const isEndRegion = (t: string) => /^\s*/.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 { - - const isStartRegion = (t: string) => /^\s*/.test(t); - const isEndRegion = (t: string) => /^\s*/.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 { + 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 { 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 { - 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 { - const isFoldableToken = (token: Token) => { + const isFoldableToken = (token: Token): boolean => { switch (token.type) { case 'fence': case 'list_item_open':