Skip to content

Commit

Permalink
add leading/trailing line part to bracket selection #64004
Browse files Browse the repository at this point in the history
  • Loading branch information
jrieken committed Dec 10, 2018
1 parent 47661d4 commit 3696128
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
35 changes: 33 additions & 2 deletions src/vs/editor/contrib/smartSelect/bracketSelections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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),
);
});
});

0 comments on commit 3696128

Please sign in to comment.