提交 5b9d8b2d 编写于 作者: A Alex Dima

Fixes #27937: Do not over-type equal auto closing pairs when the character count is even

上级 97d76c0f
......@@ -410,6 +410,8 @@ export class TypeOperations {
return false;
}
const isEqualPair = (ch === config.autoClosingPairsClose[ch]);
for (let i = 0, len = selections.length; i < len; i++) {
const selection = selections[i];
......@@ -424,11 +426,28 @@ export class TypeOperations {
if (afterCharacter !== ch) {
return false;
}
if (isEqualPair) {
const lineTextBeforeCursor = lineText.substr(0, position.column - 1);
const chCntBefore = this._countNeedlesInHaystack(lineTextBeforeCursor, ch);
if (chCntBefore % 2 === 0) {
return false;
}
}
}
return true;
}
private static _countNeedlesInHaystack(haystack: string, needle: string): number {
let cnt = 0;
let lastIndex = -1;
while ((lastIndex = haystack.indexOf(needle, lastIndex + 1)) !== -1) {
cnt++;
}
return cnt;
}
private static _runAutoClosingCloseCharType(config: CursorConfiguration, model: ITokenizedModel, selections: Selection[], ch: string): EditOperationResult {
let commands: ICommand[] = [];
for (let i = 0, len = selections.length; i < len; i++) {
......
......@@ -3493,12 +3493,12 @@ suite('autoClosingPairs', () => {
let autoClosePositions = [
'var a =| [|];|',
'var b =| |`asd`;|',
'var c =| !\'asd!\';|',
'var c =| |\'asd!\';|',
'var d =| |"asd";|',
'var e =| /*3*/| 3;|',
'var f =| /**| 3 */3;|',
'var g =| (3+5);|',
'var h =| {| a:| !\'value!\'| |};|',
'var h =| {| a:| |\'value!\'| |};|',
];
for (let i = 0, len = autoClosePositions.length; i < len; i++) {
const lineNumber = i + 1;
......@@ -3518,6 +3518,19 @@ suite('autoClosingPairs', () => {
mode.dispose();
});
test('issue #27937: Trying to add an item to the front of a list is cumbersome', () => {
let mode = new AutoClosingMode();
usingCursor({
text: [
'var arr = ["b", "c"];'
],
languageIdentifier: mode.getLanguageIdentifier()
}, (model, cursor) => {
assertType(model, cursor, 1, 12, '"', '""', `does not over type and will auto close`);
});
mode.dispose();
});
test('issue #25658 - Do not auto-close single/double quotes after word characters', () => {
let mode = new AutoClosingMode();
usingCursor({
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册