diff --git a/src/Meziantou.Analyzer.CodeFixers/Rules/MergeIsPatternChecksFixer.cs b/src/Meziantou.Analyzer.CodeFixers/Rules/MergeIsPatternChecksFixer.cs index 0b34641e..f4c1343e 100644 --- a/src/Meziantou.Analyzer.CodeFixers/Rules/MergeIsPatternChecksFixer.cs +++ b/src/Meziantou.Analyzer.CodeFixers/Rules/MergeIsPatternChecksFixer.cs @@ -207,8 +207,7 @@ private static PatternSyntax ParenthesizePatternIfNeeded(PatternSyntax pattern, return pattern; if (pattern is BinaryPatternSyntax binaryPattern && - parentPatternKind is SyntaxKind.AndPattern && - binaryPattern.Kind() is SyntaxKind.OrPattern) + (parentPatternKind, binaryPattern.Kind()) is (SyntaxKind.AndPattern, SyntaxKind.OrPattern) or (SyntaxKind.OrPattern, SyntaxKind.AndPattern)) { return ParenthesizedPattern(pattern); } @@ -266,6 +265,12 @@ private static IOperation UnwrapOperation(IOperation operation) private static bool TryCreatePatternSyntax(IPatternOperation patternOperation, out PatternSyntax patternSyntax) { + if (patternOperation.Syntax is PatternSyntax patternFromSyntax) + { + patternSyntax = patternFromSyntax; + return true; + } + switch (patternOperation) { case IConstantPatternOperation constantPatternOperation: diff --git a/tests/Meziantou.Analyzer.Test/Rules/MergeIsPatternChecksAnalyzerTests.cs b/tests/Meziantou.Analyzer.Test/Rules/MergeIsPatternChecksAnalyzerTests.cs index b1b4253b..75954557 100644 --- a/tests/Meziantou.Analyzer.Test/Rules/MergeIsPatternChecksAnalyzerTests.cs +++ b/tests/Meziantou.Analyzer.Test/Rules/MergeIsPatternChecksAnalyzerTests.cs @@ -89,6 +89,21 @@ enum MyEnum { Value1, Value2 } .ValidateAsync(); } + [Fact] + public async Task LogicalOr_ParenthesizeAndPattern() + { + await CreateProjectBuilder() + .WithSourceCode(""" + byte marker = 0; + _ = [|marker is 0x01 || marker is >= 0xD0 and <= 0xD7|]; + """) + .ShouldFixCodeWith(""" + byte marker = 0; + _ = marker is 0x01 or (>= 0xD0 and <= 0xD7); + """) + .ValidateAsync(); + } + [Fact] public async Task DifferentExpressions_DoNotReport() {