提交 1d867101 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #14984 from CyrusNajmabadi/outVarCrash

Fix crash in 'use out-var'
Fixes #14982
......@@ -47,6 +47,31 @@ void M()
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInlineDeclaration)]
public async Task InlineInNestedCall()
{
await TestAsync(
@"class C
{
void M()
{
[|int|] i;
if (Foo(int.TryParse(v, out i)))
{
}
}
}",
@"class C
{
void M()
{
if (Foo(int.TryParse(v, out int i)))
{
}
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInlineDeclaration)]
public async Task InlineVariableWithConstructor1()
{
......
......@@ -85,9 +85,12 @@ private Task<Document> FixAsync(Document document, Diagnostic diagnostic, Cancel
var invocationOrCreationLocation = diagnostic.AdditionalLocations[2];
var outArgumentContainingStatementLocation = diagnostic.AdditionalLocations[3];
var root = declaratorLocation.SourceTree.GetRoot(cancellationToken);
var declarator = (VariableDeclaratorSyntax)declaratorLocation.FindNode(cancellationToken);
var identifier = (IdentifierNameSyntax)identifierLocation.FindNode(cancellationToken);
var invocationOrCreation = (ExpressionSyntax)invocationOrCreationLocation.FindNode(cancellationToken);
var invocationOrCreation = (ExpressionSyntax)invocationOrCreationLocation.FindNode(
getInnermostNodeForTie: true, cancellationToken: cancellationToken);
var outArgumentContainingStatement = (StatementSyntax)outArgumentContainingStatementLocation.FindNode(cancellationToken);
var declaration = (VariableDeclarationSyntax)declarator.Parent;
......
......@@ -12,6 +12,9 @@ public static SyntaxToken FindToken(this Location location, CancellationToken ca
public static SyntaxNode FindNode(this Location location, CancellationToken cancellationToken)
=> location.SourceTree.GetRoot(cancellationToken).FindNode(location.SourceSpan);
public static SyntaxNode FindNode(this Location location, bool getInnermostNodeForTie, CancellationToken cancellationToken)
=> location.SourceTree.GetRoot(cancellationToken).FindNode(location.SourceSpan, getInnermostNodeForTie: getInnermostNodeForTie);
public static bool IsVisibleSourceLocation(this Location loc)
{
if (!loc.IsInSource)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册