diff --git a/src/EditorFeatures/CSharpTest/InlineDeclaration/CSharpInlineDeclarationTests.cs b/src/EditorFeatures/CSharpTest/InlineDeclaration/CSharpInlineDeclarationTests.cs index 1ed0149d70a6ae73de0d0a5d472d1774a0edee68..62a339b514e877dcbe585ed8c34ec172c04b2565 100644 --- a/src/EditorFeatures/CSharpTest/InlineDeclaration/CSharpInlineDeclarationTests.cs +++ b/src/EditorFeatures/CSharpTest/InlineDeclaration/CSharpInlineDeclarationTests.cs @@ -1610,5 +1610,25 @@ void Foo() } }", ignoreTrivia: false); } + + [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInlineDeclaration)] + public async Task TestMissingOnUnderscore() + { + await TestMissingInRegularAndScriptAsync( +@" +using System; + +class C +{ + void M() + { + [|int|] _; + if (N(out _) + { + Console.WriteLine(_); + } + } +}"); + } } } \ No newline at end of file diff --git a/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationDiagnosticAnalyzer.cs b/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationDiagnosticAnalyzer.cs index a7467a84a29d2d135d7dc6e156c5d26f8c6b5202..0b336c4b18ced8089886a21fca3310164e55940f 100644 --- a/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationDiagnosticAnalyzer.cs +++ b/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationDiagnosticAnalyzer.cs @@ -113,6 +113,13 @@ private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context, INamedTypeSymb var identifierName = (IdentifierNameSyntax)argumentExpression; + // Don't offer to inline variables named "_". It can cause is to create a discard symbol + // which would cause a break. + if (identifierName.Identifier.ValueText == "_") + { + return; + } + var containingStatement = argumentExpression.FirstAncestorOrSelf(); if (containingStatement == null) {