diff --git a/extensions/html-language-features/server/src/modes/htmlFolding.ts b/extensions/html-language-features/server/src/modes/htmlFolding.ts
index 429dc3ac1a2..c36b27ad3bf 100644
--- a/extensions/html-language-features/server/src/modes/htmlFolding.ts
+++ b/extensions/html-language-features/server/src/modes/htmlFolding.ts
@@ -87,5 +87,14 @@ function limitRanges(ranges: FoldingRange[], maxRanges: number) {
entries += n;
}
}
- return ranges.filter((r, index) => (typeof nestingLevels[index] === 'number') && nestingLevels[index] < maxLevel);
+ let result = [];
+ for (let i = 0; i < ranges.length; i++) {
+ let level = nestingLevels[i];
+ if (typeof level === 'number') {
+ if (level < maxLevel || (level === maxLevel && entries++ < maxRanges)) {
+ result.push(ranges[i]);
+ }
+ }
+ }
+ return result;
}
diff --git a/extensions/html-language-features/server/src/test/folding.test.ts b/extensions/html-language-features/server/src/test/folding.test.ts
index 9fe39de7cdc..bf34a7dab05 100644
--- a/extensions/html-language-features/server/src/test/folding.test.ts
+++ b/extensions/html-language-features/server/src/test/folding.test.ts
@@ -204,11 +204,11 @@ suite('HTML Folding', () => {
];
assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(6, 7), r(9, 10), r(13, 14), r(16, 17)], 'no limit', void 0);
assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(6, 7), r(9, 10), r(13, 14), r(16, 17)], 'limit 8', 8);
- assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(13, 14), r(16, 17)], 'limit 7', 7);
+ assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(6, 7), r(13, 14), r(16, 17)], 'limit 7', 7);
assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(13, 14), r(16, 17)], 'limit 6', 6);
- assertRanges(input, [r(0, 19), r(1, 18)], 'limit 5', 5);
- assertRanges(input, [r(0, 19), r(1, 18)], 'limit 4', 4);
- assertRanges(input, [r(0, 19), r(1, 18)], 'limit 3', 3);
+ assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(13, 14)], 'limit 5', 5);
+ assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11)], 'limit 4', 4);
+ assertRanges(input, [r(0, 19), r(1, 18), r(2, 3)], 'limit 3', 3);
assertRanges(input, [r(0, 19), r(1, 18)], 'limit 2', 2);
assertRanges(input, [r(0, 19)], 'limit 1', 1);
});