From 4d1b60a66e7c1b26e28baab14e5d7c4cb03048b8 Mon Sep 17 00:00:00 2001 From: Drew Noakes Date: Thu, 28 Jul 2022 22:02:29 +1000 Subject: [PATCH] Don't fire VSTHRD100 for async lambdas/delegates These are already covered by VSTHRD101. --- .../VSTHRD100AsyncVoidMethodAnalyzer.cs | 14 +------ .../VSTHRD100AsyncVoidMethodAnalyzerTests.cs | 38 ------------------- 2 files changed, 2 insertions(+), 50 deletions(-) diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs index ae2125858..0e7f5886b 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs @@ -58,7 +58,7 @@ public override void Initialize(AnalysisContext context) context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze); context.RegisterSymbolAction(Utils.DebuggableWrapper(AnalyzeNode), SymbolKind.Method); - context.RegisterOperationAction(Utils.DebuggableWrapper(AnalyzeOperation), OperationKind.LocalFunction, OperationKind.AnonymousFunction); + context.RegisterOperationAction(Utils.DebuggableWrapper(AnalyzeOperation), OperationKind.LocalFunction); } private static void AnalyzeNode(SymbolAnalysisContext context) @@ -74,17 +74,7 @@ private static void AnalyzeOperation(OperationAnalysisContext context) { if (context.Operation is ILocalFunctionOperation localFunctionOperation) { - AnalyzeSymbol(localFunctionOperation.Symbol); - } - else if (context.Operation is IAnonymousFunctionOperation anonymousFunctionOperation) - { - AnalyzeSymbol(anonymousFunctionOperation.Symbol); - } - - return; - - void AnalyzeSymbol(IMethodSymbol methodSymbol) - { + IMethodSymbol methodSymbol = localFunctionOperation.Symbol; if (methodSymbol.IsAsync && methodSymbol.ReturnsVoid) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, methodSymbol.Locations[0])); diff --git a/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD100AsyncVoidMethodAnalyzerTests.cs b/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD100AsyncVoidMethodAnalyzerTests.cs index 703c6eecd..3c642cdc0 100644 --- a/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD100AsyncVoidMethodAnalyzerTests.cs +++ b/test/Microsoft.VisualStudio.Threading.Analyzers.Tests/VSTHRD100AsyncVoidMethodAnalyzerTests.cs @@ -42,44 +42,6 @@ async void F() {} await Verify.VerifyAnalyzerAsync(test, expected); } - [Fact] - public async Task ReportWarningOnAsyncVoidLambda() - { - var test = @" -using System; -using System.Threading.Tasks; - -class Test { - void M() { - F(async () => await Task.Delay(0)); - - void F(Action a) {} - } -} -"; - CodeAnalysis.Testing.DiagnosticResult expected = Verify.Diagnostic().WithLocation(7, 11); - await Verify.VerifyAnalyzerAsync(test, expected); - } - - [Fact] - public async Task ReportWarningOnAsyncVoidDelegate() - { - var test = @" -using System; -using System.Threading.Tasks; - -class Test { - void M() { - F(async delegate() { await Task.Delay(0); }); - - void F(Action a) {} - } -} -"; - CodeAnalysis.Testing.DiagnosticResult expected = Verify.Diagnostic().WithLocation(7, 11); - await Verify.VerifyAnalyzerAsync(test, expected); - } - [Fact] public async Task ReportWarningOnAsyncVoidMethodSimilarToAsyncEventHandler() {