From 8d71c8a505d2bda3bdd36f1d7ff7bcd4242eb9ac Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 22 Feb 2025 14:31:17 +1000 Subject: [PATCH] Add Analyzer for suggesting adding `checked` operators --- .global.editorconfig.ini | 3 + .../AnalyzersCommon/RoslynUtils.cs | 76 ++++++++++++++++ .../DefineCheckedOpAnalyzer.cs | 85 ++++++++++++++++++ .../FeatureNotImplementedAnalyzer.cs | 3 +- .../DefineCheckedOpAnalyzerTests.cs | 79 ++++++++++++++++ References/BizHawk.Analyzer.dll | Bin 51200 -> 66048 bytes src/BizHawk.Common/Win32/ShellLinkImports.cs | 1 + 7 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs create mode 100644 ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs diff --git a/.global.editorconfig.ini b/.global.editorconfig.ini index db8ef801fc..3a8906f759 100644 --- a/.global.editorconfig.ini +++ b/.global.editorconfig.ini @@ -43,6 +43,9 @@ dotnet_diagnostic.BHI1200.severity = error # Inferred type of branches of ternary expression in interpolation don't match dotnet_diagnostic.BHI1210.severity = error +# Declare checked operators +dotnet_diagnostic.BHI1300.severity = warning + # Call to FirstOrDefault when elements are of a value type; FirstOrNull may have been intended dotnet_diagnostic.BHI3100.severity = error # Use .Order()/.OrderDescending() shorthand diff --git a/ExternalProjects/AnalyzersCommon/RoslynUtils.cs b/ExternalProjects/AnalyzersCommon/RoslynUtils.cs index 8710e0be71..43e9c33831 100644 --- a/ExternalProjects/AnalyzersCommon/RoslynUtils.cs +++ b/ExternalProjects/AnalyzersCommon/RoslynUtils.cs @@ -1,5 +1,7 @@ namespace BizHawk.Analyzers; +using System.Collections.Generic; +using System.Linq; using System.Threading; public static class RoslynUtils @@ -11,6 +13,63 @@ public static class RoslynUtils return parent; } + public static string GetMethodName(this ConversionOperatorDeclarationSyntax cods) + => cods.ImplicitOrExplicitKeyword.ToString() is "implicit" + ? WellKnownMemberNames.ImplicitConversionName + : cods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.ExplicitConversionName + : WellKnownMemberNames.CheckedExplicitConversionName; + + public static string GetMethodName(this OperatorDeclarationSyntax ods) + => ods.OperatorToken.ToString() switch + { + "!" => WellKnownMemberNames.LogicalNotOperatorName, + "!=" => WellKnownMemberNames.InequalityOperatorName, + "%" => WellKnownMemberNames.ModulusOperatorName, + "&" => WellKnownMemberNames.BitwiseAndOperatorName, + "&&" => WellKnownMemberNames.LogicalAndOperatorName, + "*" => ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.MultiplyOperatorName + : WellKnownMemberNames.CheckedMultiplyOperatorName, + "+" => ods.ParameterList.Parameters.Count is 1 + ? WellKnownMemberNames.UnaryPlusOperatorName + : ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.AdditionOperatorName + : WellKnownMemberNames.CheckedAdditionOperatorName, + "++" => ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.IncrementOperatorName + : WellKnownMemberNames.CheckedIncrementOperatorName, + "-" => ods.ParameterList.Parameters.Count is 1 + ? ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.UnaryNegationOperatorName + : WellKnownMemberNames.CheckedUnaryNegationOperatorName + : ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.SubtractionOperatorName + : WellKnownMemberNames.CheckedSubtractionOperatorName, + "--" => ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.DecrementOperatorName + : WellKnownMemberNames.CheckedDecrementOperatorName, + "/" => ods.CheckedKeyword.IsEmpty() + ? WellKnownMemberNames.DivisionOperatorName + : WellKnownMemberNames.CheckedDivisionOperatorName, + "<" => WellKnownMemberNames.LessThanOperatorName, + "<<" => WellKnownMemberNames.LeftShiftOperatorName, + "<=" => WellKnownMemberNames.LessThanOrEqualOperatorName, + "==" => WellKnownMemberNames.EqualityOperatorName, + ">" => WellKnownMemberNames.GreaterThanOperatorName, + ">=" => WellKnownMemberNames.GreaterThanOrEqualOperatorName, + ">>" => WellKnownMemberNames.RightShiftOperatorName, + ">>>" => WellKnownMemberNames.UnsignedRightShiftOperatorName, + "^" => WellKnownMemberNames.ExclusiveOrOperatorName, + "false" => WellKnownMemberNames.FalseOperatorName, + "true" => WellKnownMemberNames.TrueOperatorName, + "|" => WellKnownMemberNames.BitwiseOrOperatorName, + "||" => WellKnownMemberNames.LogicalOrOperatorName, + "~" => WellKnownMemberNames.OnesComplementOperatorName, + // ...and some operators only exist in VB.NET (dw, you're not missing anything) + _ => throw new ArgumentException(paramName: nameof(ods), message: "pretend this is a BHI6660 unexpected token in AST (in this case, a new kind of operator was added to C#)") + }; + private static ITypeSymbol? GetThrownExceptionType(this SemanticModel model, ExpressionSyntax exprSyn) => exprSyn is ObjectCreationExpressionSyntax ? model.GetTypeInfo(exprSyn).Type @@ -28,6 +87,9 @@ public static class RoslynUtils return model.GetTypeInfo(syn is ArgumentSyntax argSyn ? argSyn.Expression : syn, cancellationToken); } + public static bool IsEmpty(this SyntaxToken token) + => token.ToString().Length is 0; + public static bool Matches(this ISymbol expected, ISymbol? actual) => SymbolEqualityComparer.Default.Equals(expected, actual); @@ -42,4 +104,18 @@ public static class RoslynUtils return expected.Matches(actual as ISymbol); } #endif + + public static IEnumerable Matching( + this SyntaxList list, + INamedTypeSymbol targetAttrSym, + SemanticModel semanticModel, + CancellationToken cancellationToken) + => list.SelectMany(static als => als.Attributes) + .Where(aSyn => targetAttrSym.Matches(semanticModel.GetTypeInfo(aSyn, cancellationToken).Type)); + + public static IEnumerable Matching( + this SyntaxList list, + INamedTypeSymbol targetAttrSym, + SyntaxNodeAnalysisContext snac) + => list.Matching(targetAttrSym, snac.SemanticModel, snac.CancellationToken); } diff --git a/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs new file mode 100644 index 0000000000..f16f614e2e --- /dev/null +++ b/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs @@ -0,0 +1,85 @@ +namespace BizHawk.Analyzers; + +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; + +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class DefineCheckedOpAnalyzer : DiagnosticAnalyzer +{ + private const string ERR_MSG_DEPRECATE = "consider marking this unchecked operator as [Obsolete]"; + + private const string ERR_MSG_MAKE_CHECKED = "define a checked version of this operator"; + + private static readonly DiagnosticDescriptor DiagDefineCheckedOp = new( + id: "BHI1300", + title: "Declare checked operators", + messageFormat: "{0}", + category: "Usage", + defaultSeverity: DiagnosticSeverity.Warning, + isEnabledByDefault: true); + + private static readonly Dictionary UncheckedOps = new() + { + [WellKnownMemberNames.AdditionOperatorName] = WellKnownMemberNames.CheckedAdditionOperatorName, + [WellKnownMemberNames.DecrementOperatorName] = WellKnownMemberNames.CheckedDecrementOperatorName, + [WellKnownMemberNames.DivisionOperatorName] = WellKnownMemberNames.CheckedDivisionOperatorName, + [WellKnownMemberNames.ExplicitConversionName] = WellKnownMemberNames.CheckedExplicitConversionName, + [WellKnownMemberNames.IncrementOperatorName] = WellKnownMemberNames.CheckedIncrementOperatorName, + [WellKnownMemberNames.MultiplyOperatorName] = WellKnownMemberNames.CheckedMultiplyOperatorName, + [WellKnownMemberNames.SubtractionOperatorName] = WellKnownMemberNames.CheckedSubtractionOperatorName, + [WellKnownMemberNames.UnaryNegationOperatorName] = WellKnownMemberNames.CheckedUnaryNegationOperatorName, + }; + + public override ImmutableArray SupportedDiagnostics { get; } + = ImmutableArray.Create(/*HawkSourceAnalyzer.DiagWTF,*/ DiagDefineCheckedOp); + + public override void Initialize(AnalysisContext context) + { + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + context.EnableConcurrentExecution(); + INamedTypeSymbol? obsoleteAttrSym = null; + context.RegisterSyntaxNodeAction( + snac => + { + obsoleteAttrSym ??= snac.Compilation.GetTypeByMetadataName("System.ObsoleteAttribute")!; + bool HasCheckedCounterpart(SyntaxNode node, string checkedName, Func getMethodName) + => ((TypeDeclarationSyntax) node.Parent!).Members.OfType() //TODO don't think this accounts for `partial` types + .Any(syn => checkedName.Equals(getMethodName(syn), StringComparison.Ordinal)); + void SuggestDeprecation(SyntaxNode node) + => DiagDefineCheckedOp.ReportAt(node, DiagnosticSeverity.Warning, snac, ERR_MSG_DEPRECATE); + switch (snac.Node) + { + case ConversionOperatorDeclarationSyntax cods: + if (UncheckedOps.TryGetValue(cods.GetMethodName(), out var checkedName)) + { + var hasCheckedCounterpart = HasCheckedCounterpart( + cods, + checkedName, + RoslynUtils.GetMethodName); + if (!hasCheckedCounterpart) DiagDefineCheckedOp.ReportAt(cods, snac, ERR_MSG_MAKE_CHECKED); + else if (!cods.AttributeLists.Matching(obsoleteAttrSym, snac).Any()) SuggestDeprecation(cods); + // else you did it good job + } + break; + case OperatorDeclarationSyntax ods: + if (UncheckedOps.TryGetValue(ods.GetMethodName(), out var checkedName1)) + { + var hasCheckedCounterpart = HasCheckedCounterpart( + ods, + checkedName1, + RoslynUtils.GetMethodName); + if (!hasCheckedCounterpart) DiagDefineCheckedOp.ReportAt(ods, snac, ERR_MSG_MAKE_CHECKED); + else if (!ods.AttributeLists.Matching(obsoleteAttrSym, snac).Any()) SuggestDeprecation(ods); + // else you did it good job + } + break; + default: + HawkSourceAnalyzer.ReportWTF(snac.Node, snac, message: $"[{nameof(DefineCheckedOpAnalyzer)}] unexpected node kind {snac.Node.GetType().FullName}"); + break; + } + }, + SyntaxKind.ConversionOperatorDeclaration, + SyntaxKind.OperatorDeclaration); + } +} diff --git a/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs index 2d64ff198c..f0c91605e1 100644 --- a/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs @@ -44,8 +44,7 @@ public sealed class FeatureNotImplementedAnalyzer : DiagnosticAnalyzer // else correct usage, do not flag } bool IncludesFNIAttribute(SyntaxList mds) - => mds.SelectMany(static als => als.Attributes) - .Any(aSyn => featureNotImplementedAttrSym.Matches(snac.SemanticModel.GetTypeInfo(aSyn, snac.CancellationToken).Type)); + => mds.Matching(featureNotImplementedAttrSym, snac).Any(); void CheckBlockBody(BlockSyntax bs, Location location) { if (bs.Statements is [ ThrowStatementSyntax tss ]) MaybeReportFor(snac.SemanticModel.GetThrownExceptionType(tss), tss); diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs new file mode 100644 index 0000000000..e5ba526a66 --- /dev/null +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs @@ -0,0 +1,79 @@ +namespace BizHawk.Tests.Analyzers; + +using Verify = Microsoft.CodeAnalysis.CSharp.Testing.CSharpAnalyzerVerifier< + BizHawk.Analyzers.DefineCheckedOpAnalyzer, + Microsoft.CodeAnalysis.Testing.DefaultVerifier>; + +[TestClass] +public sealed class DefineCheckedOpAnalyzerTests +{ + [TestMethod] + public Task CheckMisuseOfCheckedOperatorOverloading() + => Verify.VerifyAnalyzerAsync(""" + /* very much a sample; real numeric types should follow these rules according to [the docs](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/arithmetic-operators#user-defined-checked-operators): + * - A checked operator throws an OverflowException. + * - An operator without the checked modifier returns an instance representing a truncated result. + * I didn't do any of that, I just came up with something that threw and something that didn't and called it a day --yoshi + */ + using System; + public struct GF7 { + private static readonly int[] Inverses = [ -1, 1, 4, 5, 2, 3, 6 ]; + public static GF7 operator checked -(GF7 x) => new(-x._value); // the most useless but here for completeness + {|BHI1300:public static GF7 operator /*unchecked*/ -(GF7 x) => new(-x._value % 7);|} + public static GF7 operator checked ++(GF7 x) => new(x._value + 1); + {|BHI1300:public static GF7 operator /*unchecked*/ ++(GF7 x) => new((x._value + 1) % 7);|} + public static GF7 operator checked --(GF7 x) => new(x._value - 1); + {|BHI1300:public static GF7 operator /*unchecked*/ --(GF7 x) => new((x._value - 1) % 7);|} + public static GF7 operator checked +(GF7 x, GF7 y) => new(x._value + y._value); + {|BHI1300:public static GF7 operator /*unchecked*/ +(GF7 x, GF7 y) => new((x._value + y._value) % 7);|} + public static GF7 operator checked +(GF7 x, int y) => new(x._value + y); + {|BHI1300:public static GF7 operator /*unchecked*/ +(GF7 x, int y) => new((x._value + y) % 7);|} + public static GF7 operator checked -(GF7 minuend, int subtrahend) => new(minuend._value - subtrahend); + {|BHI1300:public static GF7 operator /*unchecked*/ -(GF7 minuend, int subtrahend) => new((minuend._value - subtrahend) % 7);|} + public static GF7 operator checked *(GF7 x, int y) => new(x._value * y); + {|BHI1300:public static GF7 operator /*unchecked*/ *(GF7 x, int y) => new((x._value * y) % 7);|} + public static GF7 operator checked /(GF7 dividend, GF7 divisor) => new((dividend._value * Inverses[divisor._value]) % 7); + {|BHI1300:public static GF7 operator /*unchecked*/ /(GF7 dividend, GF7 divisor) => divisor._value is 0 ? default : new((dividend._value * Inverses[divisor._value]) % 7);|} + public static explicit operator checked GF7(int n) => new(n); + {|BHI1300:public static explicit operator /*unchecked*/ GF7(int n) => new(n % 7);|} + private byte _value; + public byte Value { + get => _value; + set { + if (value < 0 || 6 < value) throw new ArgumentOutOfRangeException(paramName: nameof(value), value, message: "must be in 0..<7"); + _value = value; + } + } + public GF7(byte value) => Value = value; + private GF7(int value) => Value = unchecked((byte) value); + } + """); + + [TestMethod] + public Task CheckMisuseOfUncheckedOperatorOverloading() + => Verify.VerifyAnalyzerAsync(""" + using System; + public struct GF7 { + private static readonly int[] Inverses = [ -1, 1, 4, 5, 2, 3, 6 ]; + {|BHI1300:public static GF7 operator -(GF7 x) => new(-x._value % 7);|} + {|BHI1300:public static GF7 operator ++(GF7 x) => new((x._value + 1) % 7);|} + {|BHI1300:public static GF7 operator --(GF7 x) => new((x._value - 1) % 7);|} + {|BHI1300:public static GF7 operator +(GF7 x, GF7 y) => new((x._value + y._value) % 7);|} + {|BHI1300:public static GF7 operator +(GF7 x, int y) => new((x._value + y) % 7);|} + {|BHI1300:public static GF7 operator -(GF7 minuend, int subtrahend) => new((minuend._value - subtrahend) % 7);|} + {|BHI1300:public static GF7 operator *(GF7 x, int y) => new((x._value * y) % 7);|} + {|BHI1300:public static GF7 operator /(GF7 dividend, GF7 divisor) => divisor._value is 0 ? default : new((dividend._value * Inverses[divisor._value]) % 7);|} + {|BHI1300:public static explicit operator GF7(int n) => new(n % 7);|} + private byte _value; + public byte Value { + get => _value; + set { + if (value < 0 || 6 < value) throw new ArgumentOutOfRangeException(paramName: nameof(value), value, message: "must be in 0..<7"); + _value = value; + } + } + public GF7(byte value) => Value = value; + private GF7(int value) => Value = unchecked((byte) value); + } + """); +} diff --git a/References/BizHawk.Analyzer.dll b/References/BizHawk.Analyzer.dll index 55fc503de8708fea3e2bd6398bdcc8ad72a1537c..17c066a1871a1cf94680b9dde59dfd28c8c7daa9 100644 GIT binary patch literal 66048 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 a4)XI6{a~j7C);oLKO%Vl59T99f&T?He%V?8 literal 51200 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 u2=TLA=8x~(@`{(2mHGnr+3Ed@ diff --git a/src/BizHawk.Common/Win32/ShellLinkImports.cs b/src/BizHawk.Common/Win32/ShellLinkImports.cs index dc8036523d..797f899b88 100644 --- a/src/BizHawk.Common/Win32/ShellLinkImports.cs +++ b/src/BizHawk.Common/Win32/ShellLinkImports.cs @@ -1,4 +1,5 @@ #nullable disable +#pragma warning disable BHI1300 // explicit conversion operators w/ no checked variant using System.Runtime.CompilerServices; using System.Runtime.InteropServices;