diff --git a/src/services/smartSelection.ts b/src/services/smartSelection.ts index ddd3c75c2c7..d0423ce031e 100644 --- a/src/services/smartSelection.ts +++ b/src/services/smartSelection.ts @@ -72,9 +72,13 @@ namespace ts.SmartSelectionRange { function pushSelectionRange(start: number, end: number): void { // Skip empty ranges if (start !== end) { - // Skip ranges that are identical to the parent const textSpan = createTextSpanFromBounds(start, end); - if (!selectionRange || !textSpansEqual(textSpan, selectionRange.textSpan)) { + if (!selectionRange || ( + // Skip ranges that are identical to the parent + !textSpansEqual(textSpan, selectionRange.textSpan) && + // Skip ranges that don’t contain the original position + textSpanIntersectsWithPosition(textSpan, pos) + )) { selectionRange = { textSpan, ...selectionRange && { parent: selectionRange } }; } } diff --git a/tests/baselines/reference/smartSelection_stringLiteral.baseline b/tests/baselines/reference/smartSelection_stringLiteral.baseline new file mode 100644 index 00000000000..4e062d162ce --- /dev/null +++ b/tests/baselines/reference/smartSelection_stringLiteral.baseline @@ -0,0 +1,10 @@ +const a = 'a'; +const b = /**/'b'; + + + 'b' + +const b = 'b'; + +const a = 'a'; +const b = 'b'; \ No newline at end of file diff --git a/tests/cases/fourslash/smartSelection_stringLiteral.ts b/tests/cases/fourslash/smartSelection_stringLiteral.ts new file mode 100644 index 00000000000..3dcae459ebf --- /dev/null +++ b/tests/cases/fourslash/smartSelection_stringLiteral.ts @@ -0,0 +1,6 @@ +/// + +//// const a = 'a'; +//// const b = /**/'b'; + +verify.baselineSmartSelection();