From 28aaa560de7c56b6c7c1c2b9b9623914760548f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rald=20Barr=C3=A9?= Date: Mon, 18 May 2026 16:06:17 -0400 Subject: [PATCH] Fix MA0194 merge parenthesization Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Rules/MergeIsPatternChecksFixer.cs | 9 +++++++-- .../Rules/MergeIsPatternChecksAnalyzerTests.cs | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Meziantou.Analyzer.CodeFixers/Rules/MergeIsPatternChecksFixer.cs b/src/Meziantou.Analyzer.CodeFixers/Rules/MergeIsPatternChecksFixer.cs index 0b34641e9..f4c1343eb 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 b1b4253b8..759545579 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() {