Merge pull request #128931 from ssigwart/matchBrace

Update select to matching bracket direction
This commit is contained in:
Alexandru Dima 2021-08-17 15:35:11 +02:00 committed by GitHub
commit 58b670c6ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 8 deletions

View file

@ -67,8 +67,17 @@ function getRangeToBalanceOut(document: vscode.TextDocument, rootNode: HtmlFlatN
return offsetRangeToSelection(document, nodeToBalance.start, nodeToBalance.end);
}
const innerSelection = offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);
const outerSelection = offsetRangeToSelection(document, nodeToBalance.open.start, nodeToBalance.close.end);
// Set reverse direction if we were in the end tag
let innerSelection: vscode.Selection;
let outerSelection: vscode.Selection;
if (nodeToBalance.close.start <= offset && nodeToBalance.close.end > offset) {
innerSelection = offsetRangeToSelection(document, nodeToBalance.close.start, nodeToBalance.open.end);
outerSelection = offsetRangeToSelection(document, nodeToBalance.close.end, nodeToBalance.open.start);
}
else {
innerSelection = offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);
outerSelection = offsetRangeToSelection(document, nodeToBalance.open.start, nodeToBalance.close.end);
}
if (innerSelection.contains(selection) && !innerSelection.isEqual(selection)) {
return innerSelection;

View file

@ -235,6 +235,13 @@ export class BracketMatchingController extends Disposable implements IEditorCont
const [open, close] = brackets;
selectFrom = selectBrackets ? open.getStartPosition() : open.getEndPosition();
selectTo = selectBrackets ? close.getEndPosition() : close.getStartPosition();
if (close.containsPosition(position)) {
// select backwards if the cursor was on the closing bracket
const tmp = selectFrom;
selectFrom = selectTo;
selectTo = tmp;
}
}
if (selectFrom && selectTo) {

View file

@ -112,11 +112,11 @@ suite('bracket matching', () => {
assert.deepStrictEqual(editor.getPosition(), new Position(1, 20));
assert.deepStrictEqual(editor.getSelection(), new Selection(1, 9, 1, 20));
// start position in close brackets
// start position in close brackets (should select backwards)
editor.setPosition(new Position(1, 20));
bracketMatchingController.selectToBracket(true);
assert.deepStrictEqual(editor.getPosition(), new Position(1, 20));
assert.deepStrictEqual(editor.getSelection(), new Selection(1, 9, 1, 20));
assert.deepStrictEqual(editor.getPosition(), new Position(1, 9));
assert.deepStrictEqual(editor.getSelection(), new Selection(1, 20, 1, 9));
// start position between brackets
editor.setPosition(new Position(1, 16));
@ -234,9 +234,9 @@ suite('bracket matching', () => {
]);
bracketMatchingController.selectToBracket(true);
assert.deepStrictEqual(editor.getSelections(), [
new Selection(1, 1, 1, 5),
new Selection(1, 8, 1, 13),
new Selection(1, 16, 1, 19)
new Selection(1, 5, 1, 1),
new Selection(1, 13, 1, 8),
new Selection(1, 19, 1, 16)
]);
bracketMatchingController.dispose();