mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 13:46:13 +00:00
Update select to matching bracket direction
This commit is contained in:
parent
27858a0faf
commit
e2dbe9747f
|
@ -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;
|
||||
|
|
|
@ -216,8 +216,10 @@ export class BracketMatchingController extends Disposable implements IEditorCont
|
|||
this._editor.getSelections().forEach(selection => {
|
||||
const position = selection.getStartPosition();
|
||||
let brackets = model.matchBracket(position);
|
||||
let forceOpenBracketFirst = false;
|
||||
|
||||
if (!brackets) {
|
||||
forceOpenBracketFirst = true;
|
||||
brackets = model.findEnclosingBrackets(position);
|
||||
if (!brackets) {
|
||||
const nextBracket = model.findNextBracket(position);
|
||||
|
@ -231,10 +233,22 @@ export class BracketMatchingController extends Disposable implements IEditorCont
|
|||
let selectTo: Position | null = null;
|
||||
|
||||
if (brackets) {
|
||||
brackets.sort(Range.compareRangesUsingStarts);
|
||||
const [open, close] = brackets;
|
||||
selectFrom = selectBrackets ? open.getStartPosition() : open.getEndPosition();
|
||||
selectTo = selectBrackets ? close.getEndPosition() : close.getStartPosition();
|
||||
let [firstBracket, secondBracket] = brackets;
|
||||
let startsFromClosingBracket = Range.compareRangesUsingStarts(firstBracket, secondBracket) > 0;
|
||||
if (startsFromClosingBracket && forceOpenBracketFirst) {
|
||||
let tmp = firstBracket;
|
||||
firstBracket = secondBracket;
|
||||
secondBracket = tmp;
|
||||
startsFromClosingBracket = false;
|
||||
}
|
||||
if (startsFromClosingBracket) {
|
||||
selectFrom = selectBrackets ? firstBracket.getEndPosition() : firstBracket.getStartPosition();
|
||||
selectTo = selectBrackets ? secondBracket.getStartPosition() : secondBracket.getEndPosition();
|
||||
}
|
||||
else {
|
||||
selectFrom = selectBrackets ? firstBracket.getStartPosition() : firstBracket.getEndPosition();
|
||||
selectTo = selectBrackets ? secondBracket.getEndPosition() : secondBracket.getStartPosition();
|
||||
}
|
||||
}
|
||||
|
||||
if (selectFrom && selectTo) {
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue