From 938d1f6ae8d81097c1b62280bcaa42f3c59d05c0 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Sat, 1 Aug 2020 08:35:11 +1000 Subject: [PATCH] Don't offer Use Explicit Type for target typed new (#46469) --- .../UseImplicitTypeTests.cs | 16 ++++++++++++++++ .../TypeStyle/CSharpUseImplicitTypeHelper.cs | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/Analyzers/CSharp/Tests/UseImplicitOrExplicitType/UseImplicitTypeTests.cs b/src/Analyzers/CSharp/Tests/UseImplicitOrExplicitType/UseImplicitTypeTests.cs index 3fb01362b06..fc66247d3b8 100644 --- a/src/Analyzers/CSharp/Tests/UseImplicitOrExplicitType/UseImplicitTypeTests.cs +++ b/src/Analyzers/CSharp/Tests/UseImplicitOrExplicitType/UseImplicitTypeTests.cs @@ -2793,5 +2793,21 @@ private void M(object sender, EventArgs e) private readonly Action f2; }", parameters: new TestParameters(options: ImplicitTypeEverywhere())); } + + [WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsUseImplicitType)] + public async Task DoNotSuggestVarForTargetTypedNew() + { + await TestMissingInRegularAndScriptAsync( +@"using System; + +class Program +{ + void Method() + { + [|string|] p = new('c', 1); + } + +}", new TestParameters(options: ImplicitTypeEverywhere())); + } } } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Utilities/TypeStyle/CSharpUseImplicitTypeHelper.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Utilities/TypeStyle/CSharpUseImplicitTypeHelper.cs index 0642c63d59c..e67bf339841 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Utilities/TypeStyle/CSharpUseImplicitTypeHelper.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Utilities/TypeStyle/CSharpUseImplicitTypeHelper.cs @@ -286,6 +286,16 @@ private static bool IsSafeToSwitchToVarWithoutNeedingSpeculation(DeclarationExpr return false; } + // var cannot be used with target typed new +#if CODE_STYLE + if (expression.IsKind(Formatting.SyntaxKindEx.ImplicitObjectCreationExpression)) +#else + if (expression.IsKind(SyntaxKind.ImplicitObjectCreationExpression)) +#endif + { + return false; + } + // cannot use implicit typing on method group or on dynamic var declaredType = semanticModel.GetTypeInfo(typeName.StripRefIfNeeded(), cancellationToken).Type; if (declaredType != null && declaredType.TypeKind == TypeKind.Dynamic) -- GitLab