diff --git a/ChangeLog.md b/ChangeLog.md index 28312b640d..5514f91dad 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix analyzer [RCS1229](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1229) ([PR](https://github.com/dotnet/roslynator/pull/1667)) - Fix analyzer [RCS1250](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1250) ([PR](https://github.com/dotnet/roslynator/pull/1652) by @aihnatiuk) - Fix analyzer [RCS1260](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1260) ([PR](https://github.com/dotnet/roslynator/pull/1668)) +- Fix analyzer [RCS1105](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1105) ([PR](https://github.com/dotnet/roslynator/pull/1669)) ## [4.13.1] - 2025-02-23 diff --git a/src/Analyzers/CSharp/Analysis/UnnecessaryInterpolationAnalyzer.cs b/src/Analyzers/CSharp/Analysis/UnnecessaryInterpolationAnalyzer.cs index 5a95077382..49bde468f3 100644 --- a/src/Analyzers/CSharp/Analysis/UnnecessaryInterpolationAnalyzer.cs +++ b/src/Analyzers/CSharp/Analysis/UnnecessaryInterpolationAnalyzer.cs @@ -53,6 +53,14 @@ private static void AnalyzeInterpolation(SyntaxNodeAnalysisContext context) if (interpolatedString.StringStartToken.ValueText.Contains("@") != stringLiteralInfo.IsVerbatim) return; +#if ROSLYN_4_2 + if (interpolatedString.StringStartToken.IsKind(SyntaxKind.InterpolatedSingleLineRawStringStartToken, SyntaxKind.InterpolatedMultiLineRawStringStartToken) + && stringLiteralInfo.ContainsEscapeSequence) + { + return; + } +#endif + DiagnosticHelpers.ReportDiagnostic(context, DiagnosticRules.UnnecessaryInterpolation, interpolation); } } diff --git a/src/Tests/Analyzers.Tests/RCS1105UnnecessaryInterpolationTests.cs b/src/Tests/Analyzers.Tests/RCS1105UnnecessaryInterpolationTests.cs new file mode 100644 index 0000000000..b12ecb4bd6 --- /dev/null +++ b/src/Tests/Analyzers.Tests/RCS1105UnnecessaryInterpolationTests.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Roslynator.CSharp.CodeFixes; +using Roslynator.Testing.CSharp; +using Xunit; + +namespace Roslynator.CSharp.Analysis.Tests; + +public class RCS1105UnnecessaryInterpolationTests : AbstractCSharpDiagnosticVerifier +{ + public override DiagnosticDescriptor Descriptor { get; } = DiagnosticRules.UnnecessaryInterpolation; + + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.UseVarOrExplicitType)] + public async Task TestNoDiagnostic_RawStringLiteral() + { + await VerifyNoDiagnosticAsync("""" +class C +{ + void M() + { + var s = $"""a {"\n"} b"""; + } +} +""""); + } +}