提交 36961289 编写于 作者: J Johannes Rieken

add leading/trailing line part to bracket selection #64004

上级 47661d4e
......@@ -105,12 +105,43 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
if (arr.length === 0) {
ranges.delete(key);
}
bucket.push(Range.fromPositions(bracket.range.getEndPosition(), closing!.getStartPosition()));
bucket.push(Range.fromPositions(bracket.range.getStartPosition(), closing!.getEndPosition()));
const innerBracket = Range.fromPositions(bracket.range.getEndPosition(), closing!.getStartPosition());
const outerBracket = Range.fromPositions(bracket.range.getStartPosition(), closing!.getEndPosition());
bucket.push(innerBracket);
bucket.push(outerBracket);
BracketSelectionRangeProvider._addBracketLeading(model, outerBracket, bucket);
}
}
}
pos = bracket.range.getStartPosition();
}
}
private static _addBracketLeading(model: ITextModel, bracket: Range, bucket: Range[]): void {
if (bracket.startLineNumber === bracket.endLineNumber) {
return;
}
// xxxxxxxx {
//
// }
const startLine = bracket.startLineNumber;
const column = model.getLineFirstNonWhitespaceColumn(startLine);
if (column !== 0 && column !== bracket.startColumn) {
bucket.push(Range.fromPositions(new Position(startLine, column), bracket.getEndPosition()));
bucket.push(Range.fromPositions(new Position(startLine, 1), bracket.getEndPosition()));
}
// xxxxxxxx
// {
//
// }
const aboveLine = startLine - 1;
if (aboveLine > 0) {
const column = model.getLineFirstNonWhitespaceColumn(aboveLine);
if (column === bracket.startColumn && column !== model.getLineLastNonWhitespaceColumn(aboveLine)) {
bucket.push(Range.fromPositions(new Position(aboveLine, column), bracket.getEndPosition()));
bucket.push(Range.fromPositions(new Position(aboveLine, 1), bracket.getEndPosition()));
}
}
}
}
......@@ -234,4 +234,18 @@ suite('SmartSelect', () => {
await assertRanges('(aaa(aaa)bbb(bIb)ccc(ccc))', new Range(1, 14, 1, 17), new Range(1, 13, 1, 18), new Range(1, 2, 1, 26), new Range(1, 1, 1, 27));
});
test('bracket with leading/trailing', async () => {
await assertRanges('for(a of b){\n foo(I);\n}',
new Range(2, 7, 2, 8), new Range(2, 6, 2, 9),
new Range(1, 13, 3, 1), new Range(1, 12, 3, 2),
new Range(1, 1, 3, 2), new Range(1, 1, 3, 2),
);
await assertRanges('for(a of b)\n{\n foo(I);\n}',
new Range(3, 7, 3, 8), new Range(3, 6, 3, 9),
new Range(2, 2, 4, 1), new Range(2, 1, 4, 2),
new Range(1, 1, 4, 2), new Range(1, 1, 4, 2),
);
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册