diff --git a/ChangeLog.md b/ChangeLog.md index 6cf3374325..94f76cdb80 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix analyzer [RCS0058](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS0058) ([PR](https://github.com/dotnet/roslynator/pull/1281)) - Fix analyzer [RCS1163](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1163) ([PR](https://github.com/dotnet/roslynator/pull/1280)) - Fix analyzer [RCS1203](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1203) ([PR](https://github.com/dotnet/roslynator/pull/1282)) +- Fix analyzer [RCS1046](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1046) ([PR](https://github.com/dotnet/roslynator/pull/1283)) ## [4.6.4] - 2023-11-24 diff --git a/src/Analyzers/CSharp/Analysis/NonAsynchronousMethodNameShouldNotEndWithAsyncAnalyzer.cs b/src/Analyzers/CSharp/Analysis/NonAsynchronousMethodNameShouldNotEndWithAsyncAnalyzer.cs index f13f3d8aeb..5d28c61e1f 100644 --- a/src/Analyzers/CSharp/Analysis/NonAsynchronousMethodNameShouldNotEndWithAsyncAnalyzer.cs +++ b/src/Analyzers/CSharp/Analysis/NonAsynchronousMethodNameShouldNotEndWithAsyncAnalyzer.cs @@ -102,6 +102,9 @@ private static void AnalyzeMethodDeclaration(SyntaxNodeAnalysisContext context, if (SymbolUtility.CanBeEntryPoint(methodSymbol)) return; + if (methodSymbol.ImplementsInterfaceMember(allInterfaces: true)) + return; + if (!SymbolUtility.IsAwaitable(methodSymbol.ReturnType, shouldCheckWindowsRuntimeTypes) && !methodSymbol.ReturnType.OriginalDefinition.HasMetadataName(in MetadataNames.System_Collections_Generic_IAsyncEnumerable_T)) { diff --git a/src/Tests/Analyzers.Tests/RCS1046AsynchronousMethodNameShouldEndWithAsyncTests.cs b/src/Tests/Analyzers.Tests/RCS1046AsynchronousMethodNameShouldEndWithAsyncTests.cs index 4e62982bf2..e7e83b35d0 100644 --- a/src/Tests/Analyzers.Tests/RCS1046AsynchronousMethodNameShouldEndWithAsyncTests.cs +++ b/src/Tests/Analyzers.Tests/RCS1046AsynchronousMethodNameShouldEndWithAsyncTests.cs @@ -113,6 +113,26 @@ static async Task Main() await Task.CompletedTask; } } +"); + } + + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.AsynchronousMethodNameShouldEndWithAsync)] + public async Task TestNoDiagnostic_Interface() + { + await VerifyNoDiagnosticAsync(@" +using System.Threading.Tasks; + +interface IFoo +{ +#pragma warning disable RCS1046 + Task Foo(); +#pragma warning restore RCS1046 +} + +class C : IFoo +{ + public Task Foo() => Task.CompletedTask; +} "); } }