mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-22 21:00:30 -04:00
Merge from vscode 9bc92b48d945144abb405b9e8df05e18accb9148
This commit is contained in:
@@ -180,9 +180,11 @@ suite('SmartSelect', () => {
|
||||
// -- bracket selections
|
||||
|
||||
async function assertRanges(provider: SelectionRangeProvider, value: string, ...expected: IRange[]): Promise<void> {
|
||||
let index = value.indexOf('|');
|
||||
value = value.replace('|', '');
|
||||
|
||||
let model = modelService.createModel(value, new StaticLanguageSelector(mode.getLanguageIdentifier()), URI.parse('fake:lang'));
|
||||
let pos = model.getPositionAt(value.indexOf('|'));
|
||||
let pos = model.getPositionAt(index);
|
||||
let all = await provider.provideSelectionRanges(model, [pos], CancellationToken.None);
|
||||
let ranges = all![0];
|
||||
|
||||
@@ -197,18 +199,18 @@ suite('SmartSelect', () => {
|
||||
|
||||
test('bracket selection', async () => {
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '(|)',
|
||||
new Range(1, 2, 1, 3), new Range(1, 1, 1, 4)
|
||||
new Range(1, 2, 1, 2), new Range(1, 1, 1, 3)
|
||||
);
|
||||
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '[[[](|)]]',
|
||||
new Range(1, 6, 1, 7), new Range(1, 5, 1, 8), // ()
|
||||
new Range(1, 3, 1, 8), new Range(1, 2, 1, 9), // [[]()]
|
||||
new Range(1, 2, 1, 9), new Range(1, 1, 1, 10), // [[[]()]]
|
||||
new Range(1, 6, 1, 6), new Range(1, 5, 1, 7), // ()
|
||||
new Range(1, 3, 1, 7), new Range(1, 2, 1, 8), // [[]()]
|
||||
new Range(1, 2, 1, 8), new Range(1, 1, 1, 9), // [[[]()]]
|
||||
);
|
||||
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '[a[](|)a]',
|
||||
new Range(1, 6, 1, 7), new Range(1, 5, 1, 8),
|
||||
new Range(1, 2, 1, 9), new Range(1, 1, 1, 10),
|
||||
new Range(1, 6, 1, 6), new Range(1, 5, 1, 7),
|
||||
new Range(1, 2, 1, 8), new Range(1, 1, 1, 9),
|
||||
);
|
||||
|
||||
// no bracket
|
||||
@@ -219,23 +221,23 @@ suite('SmartSelect', () => {
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '|[[[]()]]');
|
||||
|
||||
// edge
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '[|[[]()]]', new Range(1, 2, 1, 9), new Range(1, 1, 1, 10));
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '[[[]()]|]', new Range(1, 2, 1, 9), new Range(1, 1, 1, 10));
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '[|[[]()]]', new Range(1, 2, 1, 8), new Range(1, 1, 1, 9));
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '[[[]()]|]', new Range(1, 2, 1, 8), new Range(1, 1, 1, 9));
|
||||
|
||||
await assertRanges(new BracketSelectionRangeProvider(), 'aaa(aaa)bbb(b|b)ccc(ccc)', new Range(1, 13, 1, 16), new Range(1, 12, 1, 17));
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '(aaa(aaa)bbb(b|b)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));
|
||||
await assertRanges(new BracketSelectionRangeProvider(), 'aaa(aaa)bbb(b|b)ccc(ccc)', new Range(1, 13, 1, 15), new Range(1, 12, 1, 16));
|
||||
await assertRanges(new BracketSelectionRangeProvider(), '(aaa(aaa)bbb(b|b)ccc(ccc))', new Range(1, 14, 1, 16), new Range(1, 13, 1, 17), new Range(1, 2, 1, 25), new Range(1, 1, 1, 26));
|
||||
});
|
||||
|
||||
test('bracket with leading/trailing', async () => {
|
||||
|
||||
await assertRanges(new BracketSelectionRangeProvider(), 'for(a of b){\n foo(|);\n}',
|
||||
new Range(2, 7, 2, 8), new Range(2, 6, 2, 9),
|
||||
new Range(2, 7, 2, 7), new Range(2, 6, 2, 8),
|
||||
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(new BracketSelectionRangeProvider(), 'for(a of b)\n{\n foo(|);\n}',
|
||||
new Range(3, 7, 3, 8), new Range(3, 6, 3, 9),
|
||||
new Range(3, 7, 3, 7), new Range(3, 6, 3, 8),
|
||||
new Range(2, 2, 4, 1), new Range(2, 1, 4, 2),
|
||||
new Range(1, 1, 4, 2), new Range(1, 1, 4, 2),
|
||||
);
|
||||
@@ -244,60 +246,60 @@ suite('SmartSelect', () => {
|
||||
test('in-word ranges', async () => {
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'f|ooBar',
|
||||
new Range(1, 1, 1, 5), // foo
|
||||
new Range(1, 1, 1, 8), // fooBar
|
||||
new Range(1, 1, 1, 8), // doc
|
||||
new Range(1, 1, 1, 4), // foo
|
||||
new Range(1, 1, 1, 7), // fooBar
|
||||
new Range(1, 1, 1, 7), // doc
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'f|oo_Ba',
|
||||
new Range(1, 1, 1, 5),
|
||||
new Range(1, 1, 1, 8),
|
||||
new Range(1, 1, 1, 8),
|
||||
new Range(1, 1, 1, 4),
|
||||
new Range(1, 1, 1, 7),
|
||||
new Range(1, 1, 1, 7),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'f|oo-Ba',
|
||||
new Range(1, 1, 1, 5),
|
||||
new Range(1, 1, 1, 8),
|
||||
new Range(1, 1, 1, 8),
|
||||
new Range(1, 1, 1, 4),
|
||||
new Range(1, 1, 1, 7),
|
||||
new Range(1, 1, 1, 7),
|
||||
);
|
||||
});
|
||||
|
||||
test('Default selection should select current word/hump first in camelCase #67493', async function () {
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Abs|tractSmartSelect',
|
||||
new Range(1, 1, 1, 10),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 9),
|
||||
new Range(1, 1, 1, 20),
|
||||
new Range(1, 1, 1, 20),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'AbstractSma|rtSelect',
|
||||
new Range(1, 9, 1, 15),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 9, 1, 14),
|
||||
new Range(1, 1, 1, 20),
|
||||
new Range(1, 1, 1, 20),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Abstrac-Sma|rt-elect',
|
||||
new Range(1, 9, 1, 15),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 9, 1, 14),
|
||||
new Range(1, 1, 1, 20),
|
||||
new Range(1, 1, 1, 20),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Abstrac_Sma|rt_elect',
|
||||
new Range(1, 9, 1, 15),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 9, 1, 14),
|
||||
new Range(1, 1, 1, 20),
|
||||
new Range(1, 1, 1, 20),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Abstrac_Sma|rt-elect',
|
||||
new Range(1, 9, 1, 15),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 9, 1, 14),
|
||||
new Range(1, 1, 1, 20),
|
||||
new Range(1, 1, 1, 20),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Abstrac_Sma|rtSelect',
|
||||
new Range(1, 9, 1, 15),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 1, 1, 21),
|
||||
new Range(1, 9, 1, 14),
|
||||
new Range(1, 1, 1, 20),
|
||||
new Range(1, 1, 1, 20),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -321,4 +323,49 @@ suite('SmartSelect', () => {
|
||||
|
||||
reg.dispose();
|
||||
});
|
||||
|
||||
test('Expand selection in words with underscores is inconsistent #90589', async function () {
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hel|lo_World',
|
||||
new Range(1, 1, 1, 6),
|
||||
new Range(1, 1, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hello_Wo|rld',
|
||||
new Range(1, 7, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hello|_World',
|
||||
new Range(1, 1, 1, 6),
|
||||
new Range(1, 1, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hello_|World',
|
||||
new Range(1, 7, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hello|-World',
|
||||
new Range(1, 1, 1, 6),
|
||||
new Range(1, 1, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hello-|World',
|
||||
new Range(1, 7, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
new Range(1, 1, 1, 12),
|
||||
);
|
||||
|
||||
await assertRanges(new WordSelectionRangeProvider(), 'Hello|World',
|
||||
new Range(1, 6, 1, 11),
|
||||
new Range(1, 1, 1, 11),
|
||||
new Range(1, 1, 1, 11),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -40,7 +40,7 @@ export class WordSelectionRangeProvider implements SelectionRangeProvider {
|
||||
// LEFT anchor (start)
|
||||
for (; start >= 0; start--) {
|
||||
let ch = word.charCodeAt(start);
|
||||
if (ch === CharCode.Underline || ch === CharCode.Dash) {
|
||||
if ((start !== offset) && (ch === CharCode.Underline || ch === CharCode.Dash)) {
|
||||
// foo-bar OR foo_bar
|
||||
break;
|
||||
} else if (isLowerAsciiLetter(ch) && isUpperAsciiLetter(lastCh)) {
|
||||
|
||||
Reference in New Issue
Block a user