Skip to content

Commit c5832ef

Browse files
authored
1 parent 33e94dc commit c5832ef

File tree

2 files changed

+90
-4
lines changed

2 files changed

+90
-4
lines changed

src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class BracketPairsTree extends Disposable {
131131
const endOffset = toLength(range.endLineNumber - 1, range.endColumn - 1);
132132
return new CallbackIterable(cb => {
133133
const node = this.initialAstWithoutTokens || this.astWithTokens!;
134-
collectBrackets(node, lengthZero, node.length, startOffset, endOffset, cb, 0, new Map());
134+
collectBrackets(node, lengthZero, node.length, startOffset, endOffset, cb, 0, 0, new Map());
135135
});
136136
}
137137

@@ -220,6 +220,7 @@ function collectBrackets(
220220
endOffset: Length,
221221
push: (item: BracketInfo) => boolean,
222222
level: number,
223+
nestingLevelOfEqualBracketType: number,
223224
levelPerBracketType: Map<string, number>
224225
): boolean {
225226
if (level > 200) {
@@ -248,7 +249,7 @@ function collectBrackets(
248249
continue whileLoop;
249250
}
250251

251-
const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level, levelPerBracketType);
252+
const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level, 0, levelPerBracketType);
252253
if (!shouldContinue) {
253254
return false;
254255
}
@@ -288,7 +289,7 @@ function collectBrackets(
288289
continue whileLoop;
289290
}
290291

291-
const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracketType);
292+
const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracket + 1, levelPerBracketType);
292293
if (!shouldContinue) {
293294
return false;
294295
}
@@ -306,7 +307,7 @@ function collectBrackets(
306307
}
307308
case AstNodeKind.Bracket: {
308309
const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);
309-
return push(new BracketInfo(range, level - 1, 0, false));
310+
return push(new BracketInfo(range, level - 1, nestingLevelOfEqualBracketType - 1, false));
310311
}
311312
case AstNodeKind.Text:
312313
return true;

src/vs/editor/test/common/model/bracketPairColorizer/getBracketPairsInRange.test.ts

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,91 @@ suite('Bracket Pair Colorizer - getBracketPairsInRange', () => {
159159
);
160160
});
161161
});
162+
163+
test('getBracketsInRange', () => {
164+
disposeOnReturn(store => {
165+
const doc = new AnnotatedDocument(`¹ { [ ( [ [ ( ) ] ] ) ] } { } ²`);
166+
const model = createTextModelWithColorizedBracketPairs(store, doc.text);
167+
assert.deepStrictEqual(
168+
model.bracketPairs
169+
.getBracketsInRange(doc.range(1, 2))
170+
.map(b => ({ level: b.nestingLevel, levelEqualBracketType: b.nestingLevelOfEqualBracketType, range: b.range.toString() }))
171+
.toArray(),
172+
[
173+
{
174+
level: 0,
175+
levelEqualBracketType: 0,
176+
range: "[1,2 -> 1,3]"
177+
},
178+
{
179+
level: 1,
180+
levelEqualBracketType: 0,
181+
range: "[1,4 -> 1,5]"
182+
},
183+
{
184+
level: 2,
185+
levelEqualBracketType: 0,
186+
range: "[1,6 -> 1,7]"
187+
},
188+
{
189+
level: 3,
190+
levelEqualBracketType: 1,
191+
range: "[1,8 -> 1,9]"
192+
},
193+
{
194+
level: 4,
195+
levelEqualBracketType: 2,
196+
range: "[1,10 -> 1,11]"
197+
},
198+
{
199+
level: 5,
200+
levelEqualBracketType: 1,
201+
range: "[1,12 -> 1,13]"
202+
},
203+
{
204+
level: 5,
205+
levelEqualBracketType: 1,
206+
range: "[1,15 -> 1,16]"
207+
},
208+
{
209+
level: 4,
210+
levelEqualBracketType: 2,
211+
range: "[1,17 -> 1,18]"
212+
},
213+
{
214+
level: 3,
215+
levelEqualBracketType: 1,
216+
range: "[1,19 -> 1,20]"
217+
},
218+
{
219+
level: 2,
220+
levelEqualBracketType: 0,
221+
range: "[1,21 -> 1,22]"
222+
},
223+
{
224+
level: 1,
225+
levelEqualBracketType: 0,
226+
range: "[1,23 -> 1,24]"
227+
},
228+
{
229+
level: 0,
230+
levelEqualBracketType: 0,
231+
range: "[1,25 -> 1,26]"
232+
},
233+
{
234+
level: 0,
235+
levelEqualBracketType: 0,
236+
range: "[1,27 -> 1,28]"
237+
},
238+
{
239+
level: 0,
240+
levelEqualBracketType: 0,
241+
range: "[1,29 -> 1,30]"
242+
},
243+
]
244+
);
245+
});
246+
});
162247
});
163248

164249
function bracketPairToJSON(pair: BracketPairInfo): unknown {

0 commit comments

Comments
 (0)