Fix MA0148/MA0149 false positives with implicit conversions#1170
Merged
Conversation
Skip constant-pattern diagnostics and fixes when ==/!= relies on implicit user-defined conversions, add regression tests, and document the behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This was referenced May 23, 2026
Open
This was referenced May 25, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
MA0148 and MA0149 could suggest replacing
==or!=withispatterns when the comparison only worked through an implicit user-defined conversion. In those cases, the suggestedis/is notrewrite is invalid C#.This change makes the analyzer and fixer skip those cases so diagnostics are only reported when the pattern-matching rewrite is valid.
What changed
HasImplicitUserDefinedConversioninUsePatternMatchingForEqualityComparisonsCommon.docs/Rules/MA0148.mdanddocs/Rules/MA0149.mdwith explicit examples of ignored implicit-conversion scenarios.Validation
dotnet test tests/Meziantou.Analyzer.Test --filter "FullyQualifiedName~UsePatternMatchingForEqualityComparisonsAnalyzerTests"dotnet test tests/Meziantou.Analyzer.Test /p:RoslynVersion=roslyn4.2 --filter "FullyQualifiedName~UsePatternMatchingForEqualityComparisonsAnalyzerTests"dotnet build Meziantou.Analyzer.slnxdotnet run --project src/DocumentationGenerator