Skip to content

Commit

Permalink
apply suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
fowl2 committed Jan 9, 2023
1 parent a608769 commit 498161c
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

namespace Microsoft.NetCore.Analyzers.Runtime
{
using static MicrosoftNetCoreAnalyzersResources;

/// <summary>
/// CA2021: Do not call Enumerable.Cast or Enumerable.OfType with incompatible types.
/// </summary>
Expand All @@ -18,11 +20,11 @@ public sealed class DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesAnalyzer
{
internal const string RuleId = "CA2021";

private static readonly LocalizableString s_localizableTitle = new LocalizableResourceString(nameof(MicrosoftNetCoreAnalyzersResources.DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesTitle), MicrosoftNetCoreAnalyzersResources.ResourceManager, typeof(MicrosoftNetCoreAnalyzersResources));
private static readonly LocalizableString s_localizableDescription = new LocalizableResourceString(nameof(MicrosoftNetCoreAnalyzersResources.DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesDescription), MicrosoftNetCoreAnalyzersResources.ResourceManager, typeof(MicrosoftNetCoreAnalyzersResources));
private static readonly LocalizableString s_localizableTitle = CreateLocalizableResourceString(nameof(DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesTitle));
private static readonly LocalizableString s_localizableDescription = CreateLocalizableResourceString(nameof(DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesDescription));

private static readonly LocalizableString s_localizableCastMessage = new LocalizableResourceString(nameof(MicrosoftNetCoreAnalyzersResources.DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesMessageCast), MicrosoftNetCoreAnalyzersResources.ResourceManager, typeof(MicrosoftNetCoreAnalyzersResources));
private static readonly LocalizableString s_localizableOfTypeMessage = new LocalizableResourceString(nameof(MicrosoftNetCoreAnalyzersResources.DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesMessageOfType), MicrosoftNetCoreAnalyzersResources.ResourceManager, typeof(MicrosoftNetCoreAnalyzersResources));
private static readonly LocalizableString s_localizableCastMessage = CreateLocalizableResourceString(nameof(DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesMessageCast));
private static readonly LocalizableString s_localizableOfTypeMessage = CreateLocalizableResourceString(nameof(DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesMessageOfType));

internal static DiagnosticDescriptor CastRule = DiagnosticDescriptorHelper.Create(RuleId,
s_localizableTitle,
Expand All @@ -47,8 +49,8 @@ public sealed class DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesAnalyzer
(nameof(Enumerable.OfType), OfTypeRule)
);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics
=> ImmutableArray.Create(OfTypeRule, CastRule);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
= ImmutableArray.Create(OfTypeRule, CastRule);

public override void Initialize(AnalysisContext context)
{
Expand Down Expand Up @@ -195,6 +197,7 @@ static ITypeSymbol UnwrapNullableValueType(ITypeSymbol typeSymbol)
{
return nullableTypeArgument;
}

return typeSymbol;
}

Expand Down Expand Up @@ -231,6 +234,7 @@ static bool IsUnconstrainedTypeParameter(ITypeParameterSymbol typeParameterSymbo
{
return true;
}

return false;
case (_, TypeKind.TypeParameter):
var castToTypeParam = (ITypeParameterSymbol)castTo.OriginalDefinition;
Expand All @@ -249,6 +253,7 @@ static bool IsUnconstrainedTypeParameter(ITypeParameterSymbol typeParameterSymbo
{
return true;
}

return false;

case (TypeKind.Class, TypeKind.Class):
Expand All @@ -261,11 +266,11 @@ static bool IsUnconstrainedTypeParameter(ITypeParameterSymbol typeParameterSymbo
return castFrom.IsSealed && !castFrom.AllInterfaces.Contains(castTo);

case (TypeKind.Class, TypeKind.Enum):
return castFrom.OriginalDefinition.SpecialType != SpecialType.System_Enum
&& castFrom.OriginalDefinition.SpecialType != SpecialType.System_ValueType;
return castFrom.OriginalDefinition.SpecialType is not SpecialType.System_Enum
and not SpecialType.System_ValueType;
case (TypeKind.Enum, TypeKind.Class):
return castTo.OriginalDefinition.SpecialType != SpecialType.System_Enum
&& castTo.OriginalDefinition.SpecialType != SpecialType.System_ValueType;
return castTo.OriginalDefinition.SpecialType is not (SpecialType.System_Enum
and not SpecialType.System_ValueType);

case (TypeKind.Struct, TypeKind.Enum)
when castTo.OriginalDefinition is INamedTypeSymbol toEnum:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Testing;
using Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
Microsoft.NetCore.Analyzers.Runtime.DoNotCallEnumerableCastOrOfTypeWithIncompatibleTypesAnalyzer,
Expand Down
2 changes: 1 addition & 1 deletion src/Utilities/Compiler/DiagnosticCategoryAndIdRanges.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Usage: CA1801, CA1806, CA1816, CA2200-CA2209, CA2211-CA2260
Naming: CA1700-CA1727
Interoperability: CA1400-CA1422
Maintainability: CA1500-CA1513
Reliability: CA9998-CA9999, CA2000-CA2020
Reliability: CA9998-CA9999, CA2000-CA2021
Documentation: CA1200-CA1200

# Microsoft CodeAnalysis API rules
Expand Down

0 comments on commit 498161c

Please sign in to comment.