diff --git a/extensions/emmet/src/balance.ts b/extensions/emmet/src/balance.ts index 4687b734524..21ac3027d5e 100644 --- a/extensions/emmet/src/balance.ts +++ b/extensions/emmet/src/balance.ts @@ -87,10 +87,14 @@ function getRangeToBalanceIn(document: vscode.TextDocument, selection: vscode.Se return selection; } - if (selection.start.isEqual(nodeToBalance.start) - && selection.end.isEqual(nodeToBalance.end) - && nodeToBalance.close) { - return new vscode.Selection(nodeToBalance.open.end, nodeToBalance.close.start); + if (nodeToBalance.close) { + const entireNodeSelected = selection.start.isEqual(nodeToBalance.start) && selection.end.isEqual(nodeToBalance.end); + const startInOpenTag = selection.start.isAfter(nodeToBalance.open.start) && selection.start.isBefore(nodeToBalance.open.end); + const startInCloseTag = selection.start.isAfter(nodeToBalance.close.start) && selection.start.isBefore(nodeToBalance.close.end); + + if (entireNodeSelected || startInOpenTag || startInCloseTag) { + return new vscode.Selection(nodeToBalance.open.end, nodeToBalance.close.start); + } } if (!nodeToBalance.firstChild) { diff --git a/extensions/emmet/src/test/editPointSelectItemBalance.test.ts b/extensions/emmet/src/test/editPointSelectItemBalance.test.ts index f05469ab440..0c47043e867 100644 --- a/extensions/emmet/src/test/editPointSelectItemBalance.test.ts +++ b/extensions/emmet/src/test/editPointSelectItemBalance.test.ts @@ -250,6 +250,7 @@ suite('Tests for Next/Previous Select/Edit point and Balance actions', () => { editor.selections = [new Selection(12, 7, 12, 7)]; let expectedBalanceInRanges: [number, number, number, number][] = [ + [12, 21, 17, 1], // inner contents of