未验证 提交 6bf55ba6 编写于 作者: P Peng Lyu 提交者: GitHub

Merge pull request #45502 from JacksonKearl/feature-request/multicursor-select-to-bracket

Add multicursor support to "Select to Bracket"
......@@ -176,41 +176,47 @@ export class BracketMatchingController extends Disposable implements editorCommo
if (!model) {
return;
}
const selection = this._editor.getSelection();
if (!selection.isEmpty()) {
return;
}
const position = selection.getStartPosition();
let newSelections: Selection[] = [];
this._editor.getSelections().forEach(selection => {
const position = selection.getStartPosition();
let brackets = model.matchBracket(position);
let brackets = model.matchBracket(position);
let openBracket: Position = null;
let closeBracket: Position = null;
let openBracket: Position = null;
let closeBracket: Position = null;
if (!brackets) {
const nextBracket = model.findNextBracket(position);
if (nextBracket && nextBracket.range) {
brackets = model.matchBracket(nextBracket.range.getStartPosition());
if (!brackets) {
const nextBracket = model.findNextBracket(position);
if (nextBracket && nextBracket.range) {
brackets = model.matchBracket(nextBracket.range.getStartPosition());
}
}
}
if (brackets) {
if (brackets[0].startLineNumber === brackets[1].startLineNumber) {
openBracket = brackets[1].startColumn < brackets[0].startColumn ?
brackets[1].getStartPosition() : brackets[0].getStartPosition();
closeBracket = brackets[1].startColumn < brackets[0].startColumn ?
brackets[0].getEndPosition() : brackets[1].getEndPosition();
} else {
openBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ?
brackets[1].getStartPosition() : brackets[0].getStartPosition();
closeBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ?
brackets[0].getEndPosition() : brackets[1].getEndPosition();
if (brackets) {
if (brackets[0].startLineNumber === brackets[1].startLineNumber) {
openBracket = brackets[1].startColumn < brackets[0].startColumn ?
brackets[1].getStartPosition() : brackets[0].getStartPosition();
closeBracket = brackets[1].startColumn < brackets[0].startColumn ?
brackets[0].getEndPosition() : brackets[1].getEndPosition();
} else {
openBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ?
brackets[1].getStartPosition() : brackets[0].getStartPosition();
closeBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ?
brackets[0].getEndPosition() : brackets[1].getEndPosition();
}
}
}
if (openBracket && closeBracket) {
this._editor.setSelection(new Range(openBracket.lineNumber, openBracket.column, closeBracket.lineNumber, closeBracket.column));
if (openBracket && closeBracket) {
newSelections.push(new Selection(openBracket.lineNumber, openBracket.column, closeBracket.lineNumber, closeBracket.column));
}
});
if (newSelections.length > 0) {
this._editor.setSelections(newSelections);
this._editor.revealRange(newSelections[0]);
}
}
......
......@@ -144,4 +144,57 @@ suite('bracket matching', () => {
model.dispose();
mode.dispose();
});
test('issue #45369: Select to Bracket with multicursor', () => {
let mode = new BracketMode();
let model = TextModel.createFromString('{ } { } { }', undefined, mode.getLanguageIdentifier());
withTestCodeEditor(null, { model: model }, (editor, cursor) => {
let bracketMatchingController = editor.registerAndInstantiateContribution<BracketMatchingController>(BracketMatchingController);
// cursors inside brackets become selections of the entire bracket contents
editor.setSelections([
new Selection(1, 3, 1, 3),
new Selection(1, 10, 1, 10),
new Selection(1, 17, 1, 17)
]);
bracketMatchingController.selectToBracket();
assert.deepEqual(editor.getSelections(), [
new Selection(1, 1, 1, 5),
new Selection(1, 8, 1, 13),
new Selection(1, 16, 1, 19)
]);
// cursors to the left of bracket pairs become selections of the entire pair
editor.setSelections([
new Selection(1, 1, 1, 1),
new Selection(1, 6, 1, 6),
new Selection(1, 14, 1, 14)
]);
bracketMatchingController.selectToBracket();
assert.deepEqual(editor.getSelections(), [
new Selection(1, 1, 1, 5),
new Selection(1, 8, 1, 13),
new Selection(1, 16, 1, 19)
]);
// cursors just right of a bracket pair become selections of the entire pair
editor.setSelections([
new Selection(1, 5, 1, 5),
new Selection(1, 13, 1, 13),
new Selection(1, 19, 1, 19)
]);
bracketMatchingController.selectToBracket();
assert.deepEqual(editor.getSelections(), [
new Selection(1, 1, 1, 5),
new Selection(1, 8, 1, 13),
new Selection(1, 16, 1, 19)
]);
bracketMatchingController.dispose();
});
model.dispose();
mode.dispose();
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册