From 255fa088fab7850cb918f2fe98c6f30bd01f620c Mon Sep 17 00:00:00 2001 From: Josef Pihrt Date: Sun, 31 Aug 2025 15:18:36 +0200 Subject: [PATCH 1/7] impl --- .../UseConditionalAccessCodeFixProvider.cs | 10 +-- src/Analyzers.xml | 3 + .../Analysis/UseConditionalAccessAnalyzer.cs | 36 +++++++++ .../CSharp/Extensions/CodeStyleExtensions.cs | 6 ++ src/Common/ConfigOptionKeys.Generated.cs | 79 ++++++++++--------- src/Common/ConfigOptions.Generated.cs | 6 ++ src/ConfigOptions.xml | 5 ++ .../RCS1146UseConditionalAccessTests.cs | 35 ++++++++ .../CodeGeneration/CodeGeneration.csproj | 2 +- src/Tools/CodeGenerator/CodeGenerator.csproj | 2 +- .../ConfigurationFileGenerator.csproj | 2 +- src/Tools/Metadata/Metadata.csproj | 2 +- .../MetadataGenerator.csproj | 2 +- .../src/configurationFiles.generated.ts | 5 ++ 14 files changed, 146 insertions(+), 49 deletions(-) diff --git a/src/Analyzers.CodeFixes/CSharp/CodeFixes/UseConditionalAccessCodeFixProvider.cs b/src/Analyzers.CodeFixes/CSharp/CodeFixes/UseConditionalAccessCodeFixProvider.cs index d43e2a8765..0648ab923d 100644 --- a/src/Analyzers.CodeFixes/CSharp/CodeFixes/UseConditionalAccessCodeFixProvider.cs +++ b/src/Analyzers.CodeFixes/CSharp/CodeFixes/UseConditionalAccessCodeFixProvider.cs @@ -79,11 +79,11 @@ private static async Task UseConditionalAccessAsync( { SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); - SyntaxKind kind = binaryExpression.Kind(); + SyntaxKind binaryExpressionKind = binaryExpression.Kind(); - (ExpressionSyntax left, ExpressionSyntax right) = UseConditionalAccessAnalyzer.GetFixableExpressions(binaryExpression, kind, semanticModel, cancellationToken); + (ExpressionSyntax left, ExpressionSyntax right) = UseConditionalAccessAnalyzer.GetFixableExpressions(binaryExpression, binaryExpressionKind, semanticModel, cancellationToken); - NullCheckStyles allowedStyles = (kind == SyntaxKind.LogicalAndExpression) + NullCheckStyles allowedStyles = (binaryExpressionKind == SyntaxKind.LogicalAndExpression) ? (NullCheckStyles.NotEqualsToNull | NullCheckStyles.IsNotNull) : (NullCheckStyles.EqualsToNull | NullCheckStyles.IsNull); @@ -134,12 +134,12 @@ private static async Task UseConditionalAccessAsync( } case SyntaxKind.LogicalNotExpression: { - builder.Append((kind == SyntaxKind.LogicalAndExpression) ? " == false" : " != true"); + builder.Append((binaryExpressionKind == SyntaxKind.LogicalAndExpression) ? " == false" : " != true"); break; } default: { - builder.Append((kind == SyntaxKind.LogicalAndExpression) ? " == true" : " != false"); + builder.Append((binaryExpressionKind == SyntaxKind.LogicalAndExpression) ? " == true" : " != false"); break; } } diff --git a/src/Analyzers.xml b/src/Analyzers.xml index 9f23544cd0..8dbaf34c8d 100644 --- a/src/Analyzers.xml +++ b/src/Analyzers.xml @@ -4484,6 +4484,9 @@ string s2 = s as string;]]> Info true 6.0 + + when_type_is_obvious +