Skip to content

Commit 51aef1c

Browse files
committed
Fix potential issue with same-sized nodes.
1 parent a7d0691 commit 51aef1c

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/Features/Core/Portable/CodeRefactoringHelpers.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,19 @@ public static async Task<TSyntaxNode> TryGetSelectedNodeAsync<TSyntaxNode>(
3434
var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
3535
var selectionStripped = await GetStrippedTextSpan(document, selection, cancellationToken).ConfigureAwait(false);
3636

37-
if (root.FindNode(selectionStripped) is TSyntaxNode node)
37+
var node = root.FindNode(selectionStripped, getInnermostNodeForTie: true);
38+
SyntaxNode prevNode;
39+
do
3840
{
39-
return node;
40-
}
41+
if (node is TSyntaxNode)
42+
{
43+
return (TSyntaxNode)node;
44+
}
45+
46+
prevNode = node;
47+
node = node.Parent;
48+
49+
} while (node != null && prevNode.FullWidth() == node.FullWidth());
4150

4251
// only consider what is direct selection touching when selection is empty
4352
// prevents `[|C|] methodName(){}` from registering as relevant for method Node

0 commit comments

Comments
 (0)