From e7b429fae2e70e3735efadef6bb18825dd66e529 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 30 Mar 2020 13:36:48 +0200 Subject: [PATCH] Fixes #93239: Align stops around `_` with other editors --- .../common/controller/cursorWordOperations.ts | 4 +- .../test/wordPartOperations.test.ts | 44 ++++++++++++++++--- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/common/controller/cursorWordOperations.ts b/src/vs/editor/common/controller/cursorWordOperations.ts index ba9e5f557a2..13acacc4cbe 100644 --- a/src/vs/editor/common/controller/cursorWordOperations.ts +++ b/src/vs/editor/common/controller/cursorWordOperations.ts @@ -238,7 +238,7 @@ export class WordOperations { const left = lineContent.charCodeAt(column - 2); const right = lineContent.charCodeAt(column - 1); - if (left !== CharCode.Underline && right === CharCode.Underline) { + if (left === CharCode.Underline && right !== CharCode.Underline) { // snake_case_variables return new Position(lineNumber, column); } @@ -340,7 +340,7 @@ export class WordOperations { const left = lineContent.charCodeAt(column - 2); const right = lineContent.charCodeAt(column - 1); - if (left === CharCode.Underline && right !== CharCode.Underline) { + if (left !== CharCode.Underline && right === CharCode.Underline) { // snake_case_variables return new Position(lineNumber, column); } diff --git a/src/vs/editor/contrib/wordPartOperations/test/wordPartOperations.test.ts b/src/vs/editor/contrib/wordPartOperations/test/wordPartOperations.test.ts index 3981c3bf1f1..70e9c87c680 100644 --- a/src/vs/editor/contrib/wordPartOperations/test/wordPartOperations.test.ts +++ b/src/vs/editor/contrib/wordPartOperations/test/wordPartOperations.test.ts @@ -37,7 +37,7 @@ suite('WordPartOperations', () => { test('cursorWordPartLeft - basic', () => { const EXPECTED = [ '|start| |line|', - '|this|Is|A|Camel|Case|Var| |this|_is|_a|_snake|_case|_var| |THIS|_IS|_CAPS|_SNAKE| |this|_IS|Mixed|Use|', + '|this|Is|A|Camel|Case|Var| |this_|is_|a_|snake_|case_|var| |THIS_|IS_|CAPS_|SNAKE| |this_|IS|Mixed|Use|', '|end| |line' ].join('\n'); const [text,] = deserializePipePositions(EXPECTED); @@ -67,7 +67,7 @@ suite('WordPartOperations', () => { }); test('cursorWordPartLeft - issue #53899: underscores', () => { - const EXPECTED = '|myvar| |=| |\'|demonstration|_____of| |selection| |with| |space|\''; + const EXPECTED = '|myvar| |=| |\'|demonstration_____|of| |selection| |with| |space|\''; const [text,] = deserializePipePositions(EXPECTED); const actualStops = testRepeatedActionAndExtractPositions( text, @@ -83,7 +83,7 @@ suite('WordPartOperations', () => { test('cursorWordPartRight - basic', () => { const EXPECTED = [ 'start| |line|', - '|this|Is|A|Camel|Case|Var| |this_|is_|a_|snake_|case_|var| |THIS_|IS_|CAPS_|SNAKE| |this_|IS|Mixed|Use|', + '|this|Is|A|Camel|Case|Var| |this|_is|_a|_snake|_case|_var| |THIS|_IS|_CAPS|_SNAKE| |this|_IS|Mixed|Use|', '|end| |line|' ].join('\n'); const [text,] = deserializePipePositions(EXPECTED); @@ -113,7 +113,7 @@ suite('WordPartOperations', () => { }); test('cursorWordPartRight - issue #53899: underscores', () => { - const EXPECTED = 'myvar| |=| |\'|demonstration_____|of| |selection| |with| |space|\'|'; + const EXPECTED = 'myvar| |=| |\'|demonstration|_____of| |selection| |with| |space|\'|'; const [text,] = deserializePipePositions(EXPECTED); const actualStops = testRepeatedActionAndExtractPositions( text, @@ -145,8 +145,40 @@ suite('WordPartOperations', () => { assert.deepEqual(actual, EXPECTED); }); + test('issue #93239 - cursorWordPartRight', () => { + const EXPECTED = [ + 'foo|_bar|', + ].join('\n'); + const [text,] = deserializePipePositions(EXPECTED); + const actualStops = testRepeatedActionAndExtractPositions( + text, + new Position(1, 1), + ed => cursorWordPartRight(ed), + ed => ed.getPosition()!, + ed => ed.getPosition()!.equals(new Position(1, 8)) + ); + const actual = serializePipePositions(text, actualStops); + assert.deepEqual(actual, EXPECTED); + }); + + test('issue #93239 - cursorWordPartLeft', () => { + const EXPECTED = [ + '|foo_|bar', + ].join('\n'); + const [text,] = deserializePipePositions(EXPECTED); + const actualStops = testRepeatedActionAndExtractPositions( + text, + new Position(1, 8), + ed => cursorWordPartLeft(ed), + ed => ed.getPosition()!, + ed => ed.getPosition()!.equals(new Position(1, 1)) + ); + const actual = serializePipePositions(text, actualStops); + assert.deepEqual(actual, EXPECTED); + }); + test('deleteWordPartLeft - basic', () => { - const EXPECTED = '| |/*| |Just| |some| |text| |a|+=| |3| |+|5|-|3| |*/| |this|Is|A|Camel|Case|Var| |this|_is|_a|_snake|_case|_var| |THIS|_IS|_CAPS|_SNAKE| |this|_IS|Mixed|Use'; + const EXPECTED = '| |/*| |Just| |some| |text| |a|+=| |3| |+|5|-|3| |*/| |this|Is|A|Camel|Case|Var| |this_|is_|a_|snake_|case_|var| |THIS_|IS_|CAPS_|SNAKE| |this_|IS|Mixed|Use'; const [text,] = deserializePipePositions(EXPECTED); const actualStops = testRepeatedActionAndExtractPositions( text, @@ -160,7 +192,7 @@ suite('WordPartOperations', () => { }); test('deleteWordPartRight - basic', () => { - const EXPECTED = ' |/*| |Just| |some| |text| |a|+=| |3| |+|5|-|3| |*/| |this|Is|A|Camel|Case|Var| |this_|is_|a_|snake_|case_|var| |THIS_|IS_|CAPS_|SNAKE| |this_|IS|Mixed|Use|'; + const EXPECTED = ' |/*| |Just| |some| |text| |a|+=| |3| |+|5|-|3| |*/| |this|Is|A|Camel|Case|Var| |this|_is|_a|_snake|_case|_var| |THIS|_IS|_CAPS|_SNAKE| |this|_IS|Mixed|Use|'; const [text,] = deserializePipePositions(EXPECTED); const actualStops = testRepeatedActionAndExtractPositions( text, -- GitLab