mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-21 04:20:11 -04:00
Merge VS Code 1.23.1 (#1520)
This commit is contained in:
@@ -33,7 +33,7 @@ class JumpToBracketAction extends EditorAction {
|
||||
alias: 'Go to Bracket',
|
||||
precondition: null,
|
||||
kbOpts: {
|
||||
kbExpr: EditorContextKeys.textFocus,
|
||||
kbExpr: EditorContextKeys.editorTextFocus,
|
||||
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_BACKSLASH
|
||||
}
|
||||
});
|
||||
@@ -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[] = [];
|
||||
|
||||
let brackets = model.matchBracket(position);
|
||||
this._editor.getSelections().forEach(selection => {
|
||||
const position = selection.getStartPosition();
|
||||
|
||||
let openBracket: Position = null;
|
||||
let closeBracket: Position = null;
|
||||
let brackets = model.matchBracket(position);
|
||||
|
||||
if (!brackets) {
|
||||
const nextBracket = model.findNextBracket(position);
|
||||
if (nextBracket && nextBracket.range) {
|
||||
brackets = model.matchBracket(nextBracket.range.getStartPosition());
|
||||
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) {
|
||||
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();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user