From ca0ddeffef2d16ee3fc1c7d7680476c707f5bafd Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Thu, 20 Mar 2025 07:05:22 +1000 Subject: [PATCH] Improve highlight locations of some BizHawk.Analyzer diagnostics --- .../DiagnosticDescriptorExtensions.cs | 86 ++++++++++++++++++ .../AnalyzersCommon/RoslynUtils.cs | 19 ++++ .../DefineCheckedOpAnalyzer.cs | 7 +- .../FeatureNotImplementedAnalyzer.cs | 4 +- .../FirstOrDefaultOnStructAnalyzer.cs | 2 +- .../BizHawk.Analyzer/HawkSourceAnalyzer.cs | 15 ++- .../BizHawk.Analyzer/LINQOnStringsAnalyzer.cs | 6 +- .../TryGetValueImplicitDiscardAnalyzer.cs | 5 +- .../DefineCheckedOpAnalyzerTests.cs | 36 ++++---- .../FeatureNotImplementedAnalyzerTests.cs | 10 +- .../FirstOrDefaultOnStructAnalyzerTests.cs | 8 +- .../HawkSourceAnalyzerTests.cs | 10 +- .../LINQOnStringsAnalyzerTests.cs | 44 ++++----- ...TryGetValueImplicitDiscardAnalyzerTests.cs | 8 +- References/BizHawk.Analyzer.dll | Bin 66048 -> 68096 bytes 15 files changed, 192 insertions(+), 68 deletions(-) diff --git a/ExternalProjects/AnalyzersCommon/DiagnosticDescriptorExtensions.cs b/ExternalProjects/AnalyzersCommon/DiagnosticDescriptorExtensions.cs index 409f4de966..034b1df854 100644 --- a/ExternalProjects/AnalyzersCommon/DiagnosticDescriptorExtensions.cs +++ b/ExternalProjects/AnalyzersCommon/DiagnosticDescriptorExtensions.cs @@ -39,6 +39,50 @@ public static class DDExtensions properties: null, messageArgs: messageArgs)); + [MI(AggressiveInlining)] + public static void ReportAt( + this DD diag, + Location location, + DiagnosticSeverity effectiveSeverity, + OAC ctx, + string message) + => diag.ReportAt(location, effectiveSeverity, ctx, [ message ]); + + [MI(AggressiveInlining)] + public static void ReportAt( + this DD diag, + Location location, + DiagnosticSeverity effectiveSeverity, + SNAC ctx, + string message) + => diag.ReportAt(location, effectiveSeverity, ctx, [ message ]); + + [MI(AggressiveInlining)] + public static void ReportAt( + this DD diag, + Location location, + bool isErrorSeverity, + OAC ctx, + object?[]? messageArgs = null) + => diag.ReportAt( + location, + isErrorSeverity ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning, + ctx, + messageArgs: messageArgs); + + [MI(AggressiveInlining)] + public static void ReportAt( + this DD diag, + Location location, + bool isErrorSeverity, + SNAC ctx, + object?[]? messageArgs = null) + => diag.ReportAt( + location, + isErrorSeverity ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning, + ctx, + messageArgs: messageArgs); + [MI(AggressiveInlining)] public static void ReportAt(this DD diag, Location location, OAC ctx, object?[]? messageArgs = null) => ctx.ReportDiagnostic(Diagnostic.Create(diag, location, messageArgs: messageArgs)); @@ -47,6 +91,14 @@ public static class DDExtensions public static void ReportAt(this DD diag, Location location, SNAC ctx, object?[]? messageArgs = null) => ctx.ReportDiagnostic(Diagnostic.Create(diag, location, messageArgs: messageArgs)); + [MI(AggressiveInlining)] + public static void ReportAt(this DD diag, Location location, OAC ctx, string message) + => diag.ReportAt(location, ctx, [ message ]); + + [MI(AggressiveInlining)] + public static void ReportAt(this DD diag, Location location, SNAC ctx, string message) + => diag.ReportAt(location, ctx, [ message ]); + [MI(AggressiveInlining)] public static void ReportAt( this DD diag, @@ -123,6 +175,40 @@ public static class DDExtensions public static void ReportAt(this DD diag, SyntaxNode location, SNAC ctx, string message) => diag.ReportAt(location, ctx, [ message ]); + [MI(AggressiveInlining)] + public static void ReportAt( + this DD diag, + SyntaxToken location, + DiagnosticSeverity effectiveSeverity, + OAC ctx, + string message) + => diag.ReportAt(location.GetLocation(), effectiveSeverity, ctx, message); + + [MI(AggressiveInlining)] + public static void ReportAt( + this DD diag, + SyntaxToken location, + DiagnosticSeverity effectiveSeverity, + SNAC ctx, + string message) + => diag.ReportAt(location.GetLocation(), effectiveSeverity, ctx, message); + + [MI(AggressiveInlining)] + public static void ReportAt(this DD diag, SyntaxToken location, OAC ctx, object?[]? messageArgs = null) + => diag.ReportAt(location.GetLocation(), ctx, messageArgs); + + [MI(AggressiveInlining)] + public static void ReportAt(this DD diag, SyntaxToken location, SNAC ctx, object?[]? messageArgs = null) + => diag.ReportAt(location.GetLocation(), ctx, messageArgs); + + [MI(AggressiveInlining)] + public static void ReportAt(this DD diag, SyntaxToken location, OAC ctx, string message) + => diag.ReportAt(location, ctx, [ message ]); + + [MI(AggressiveInlining)] + public static void ReportAt(this DD diag, SyntaxToken location, SNAC ctx, string message) + => diag.ReportAt(location, ctx, [ message ]); + [MI(AggressiveInlining)] public static void ReportAt( this DD diag, diff --git a/ExternalProjects/AnalyzersCommon/RoslynUtils.cs b/ExternalProjects/AnalyzersCommon/RoslynUtils.cs index 43e9c33831..55827261dc 100644 --- a/ExternalProjects/AnalyzersCommon/RoslynUtils.cs +++ b/ExternalProjects/AnalyzersCommon/RoslynUtils.cs @@ -90,6 +90,19 @@ public static class RoslynUtils public static bool IsEmpty(this SyntaxToken token) => token.ToString().Length is 0; + public static Location LocWithoutReceiver(this InvocationExpressionSyntax ies) + { + var location = ies.GetLocation(); + if (ies.Expression is MemberAccessExpressionSyntax maes) + { + location = Location.Create(location.SourceTree!, location.SourceSpan.Slice(maes.Expression.Span.Length)); + } + return location; + } + + public static Location LocWithoutReceiver(this IInvocationOperation operation) + => ((InvocationExpressionSyntax) operation.Syntax).LocWithoutReceiver(); + public static bool Matches(this ISymbol expected, ISymbol? actual) => SymbolEqualityComparer.Default.Equals(expected, actual); @@ -118,4 +131,10 @@ public static class RoslynUtils INamedTypeSymbol targetAttrSym, SyntaxNodeAnalysisContext snac) => list.Matching(targetAttrSym, snac.SemanticModel, snac.CancellationToken); + + public static TextSpan Slice(this TextSpan span, int start) + => TextSpan.FromBounds(start: span.Start + start, end: span.End); + + public static TextSpan Slice(this TextSpan span, int start, int length) + => new(start: span.Start + start, length: length); } diff --git a/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs index 1092d1cd13..37271f0879 100644 --- a/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/DefineCheckedOpAnalyzer.cs @@ -45,6 +45,7 @@ public sealed class DefineCheckedOpAnalyzer : DiagnosticAnalyzer obsoleteAttrSym ??= snac.Compilation.GetTypeByMetadataName("System.ObsoleteAttribute")!; void FindCounterpartAndMaybeReport( T declSyn, + SyntaxToken operatorTkn, SyntaxList attrLists, string checkedName, Func getMethodName) @@ -54,11 +55,11 @@ public sealed class DefineCheckedOpAnalyzer : DiagnosticAnalyzer .Any(syn => checkedName.Equals(getMethodName(syn), StringComparison.Ordinal)); if (!hasCheckedCounterpart) { - DiagDefineCheckedOp.ReportAt(declSyn, snac, ERR_MSG_MAKE_CHECKED); + DiagDefineCheckedOp.ReportAt(operatorTkn, snac, ERR_MSG_MAKE_CHECKED); } else if (!attrLists.Matching(obsoleteAttrSym, snac).Any()) { - DiagDefineCheckedOp.ReportAt(declSyn, DiagnosticSeverity.Warning, snac, ERR_MSG_DEPRECATE); + DiagDefineCheckedOp.ReportAt(operatorTkn, DiagnosticSeverity.Warning, snac, ERR_MSG_DEPRECATE); } // else usage is correct } @@ -69,6 +70,7 @@ public sealed class DefineCheckedOpAnalyzer : DiagnosticAnalyzer { FindCounterpartAndMaybeReport( cods, + cods.OperatorKeyword, cods.AttributeLists, checkedName, RoslynUtils.GetMethodName); @@ -79,6 +81,7 @@ public sealed class DefineCheckedOpAnalyzer : DiagnosticAnalyzer { FindCounterpartAndMaybeReport( ods, + ods.OperatorKeyword, ods.AttributeLists, checkedName1, RoslynUtils.GetMethodName); diff --git a/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs index 6723ea0520..a3318bc084 100644 --- a/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs @@ -48,12 +48,12 @@ public sealed class FeatureNotImplementedAnalyzer : DiagnosticAnalyzer void CheckBlockBody(BlockSyntax bs) { if (bs.Statements is [ ThrowStatementSyntax tss ]) MaybeReportFor(snac.SemanticModel.GetThrownExceptionType(tss), tss); - else DiagShouldThrowNIE.ReportAt(bs.Parent!, snac, ERR_MSG_DOES_NOT_THROW); + else DiagShouldThrowNIE.ReportAt(bs, snac, ERR_MSG_DOES_NOT_THROW); } void CheckExprBody(ArrowExpressionClauseSyntax aecs) { if (aecs.Expression is ThrowExpressionSyntax tes) MaybeReportFor(snac.SemanticModel.GetThrownExceptionType(tes), tes); - else DiagShouldThrowNIE.ReportAt(aecs.Parent!, snac, ERR_MSG_DOES_NOT_THROW); + else DiagShouldThrowNIE.ReportAt(aecs, snac, ERR_MSG_DOES_NOT_THROW); } void CheckAccessor(AccessorDeclarationSyntax ads) { diff --git a/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs index 400ae45ea5..f27ae85ce3 100644 --- a/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs @@ -48,7 +48,7 @@ public sealed class FirstOrDefaultOnStructAnalyzer : DiagnosticAnalyzer IArrayTypeSymbol ats => ats.ElementType, _ => throw HawkSourceAnalyzer.ReportWTF(receiverExpr, oac, message: $"[{nameof(FirstOrDefaultOnStructAnalyzer)}] receiver parameter's effective type was of an unexpected kind (neither class/struct nor array): {receiverExprType.GetType().FullName}") }; - if (collectionElemType.IsValueType) DiagUseFirstOrNull.ReportAt(operation, oac); + if (collectionElemType.IsValueType) DiagUseFirstOrNull.ReportAt(operation.LocWithoutReceiver(), oac); }, OperationKind.Invocation); }); diff --git a/ExternalProjects/BizHawk.Analyzer/HawkSourceAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/HawkSourceAnalyzer.cs index 923bedccd5..9d3d5dbb59 100644 --- a/ExternalProjects/BizHawk.Analyzer/HawkSourceAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/HawkSourceAnalyzer.cs @@ -158,7 +158,15 @@ public class HawkSourceAnalyzer : DiagnosticAnalyzer void MaybeReportListExprSpacing(SyntaxNode listSyn, string? message) { if (message is null) return; - DiagListExprSpacing.ReportAt(listSyn, snac, message); + var location = listSyn.GetLocation(); + TextSpan? slice = message switch + { + ERR_MSG_LIST_EXPR_END => location.SourceSpan.Slice(start: location.SourceSpan.Length - 1), + ERR_MSG_LIST_EXPR_START => location.SourceSpan.Slice(start: 0, length: 1), + _ => null + }; + if (slice is not null) location = Location.Create(location.SourceTree!, slice.Value); + DiagListExprSpacing.ReportAt(location, snac, message); } switch (snac.Node) { @@ -179,7 +187,8 @@ public class HawkSourceAnalyzer : DiagnosticAnalyzer CheckSpacingInList(ces.Elements, ces.OpenBracketToken, ces.ToString)); break; case InterpolatedStringExpressionSyntax ises: - if (ises.StringStartToken.Text[0] is '@') DiagInterpStringIsDollarAt.ReportAt(ises, snac); + var interpTkn = ises.StringStartToken; + if (interpTkn.Text[0] is '@') DiagInterpStringIsDollarAt.ReportAt(interpTkn, snac); break; case ListPatternSyntax lps: MaybeReportListExprSpacing( @@ -190,7 +199,7 @@ public class HawkSourceAnalyzer : DiagnosticAnalyzer DiagNoQueryExpression.ReportAt(snac.Node, snac); break; case RecordDeclarationSyntax rds when rds.ClassOrStructKeyword.ToString() is not "class": // `record struct`s don't use this kind - DiagRecordImplicitlyRefType.ReportAt(rds, snac); + DiagRecordImplicitlyRefType.ReportAt(rds.Keyword, snac); break; case SwitchExpressionArmSyntax { WhenClause: null, Pattern: DiscardPatternSyntax, Expression: ThrowExpressionSyntax tes }: var thrownExceptionType = snac.SemanticModel.GetThrownExceptionType(tes); diff --git a/ExternalProjects/BizHawk.Analyzer/LINQOnStringsAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/LINQOnStringsAnalyzer.cs index 96d95aec9d..013f51970e 100644 --- a/ExternalProjects/BizHawk.Analyzer/LINQOnStringsAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/LINQOnStringsAnalyzer.cs @@ -119,7 +119,11 @@ public sealed class LINQOnStringsAnalyzer : DiagnosticAnalyzer : "Use `str.Contains(c.ToString())`"; break; } - DiagLINQOnStrings.ReportAt(operation, level, oac, string.Format(msgFmtStr, receiverExpr.Syntax)); + DiagLINQOnStrings.ReportAt( + operation.LocWithoutReceiver(), + level, + oac, + string.Format(msgFmtStr, receiverExpr.Syntax)); }, OperationKind.Invocation); }); diff --git a/ExternalProjects/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzer.cs index d3c3a91689..90026f0c73 100644 --- a/ExternalProjects/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzer.cs @@ -39,7 +39,10 @@ public sealed class TryGetValueImplicitDiscardAnalyzer : DiagnosticAnalyzer var calledSym = operation.TargetMethod.ConstructedFrom; if (calledSym.Name is STR_TGV) { - DiagUncheckedTryGetValue.ReportAt(operation, isErrorSeverity: IsBCLTryGetValue(calledSym), oac); + DiagUncheckedTryGetValue.ReportAt( + operation.LocWithoutReceiver(), + isErrorSeverity: IsBCLTryGetValue(calledSym), + oac); } }, OperationKind.Invocation); diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs index e5ba526a66..b12b88aaad 100644 --- a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/DefineCheckedOpAnalyzerTests.cs @@ -19,23 +19,23 @@ public sealed class DefineCheckedOpAnalyzerTests 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 {|BHI1300: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 {|BHI1300: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 {|BHI1300: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 {|BHI1300: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 {|BHI1300: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 {|BHI1300: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 {|BHI1300: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 GF7 {|BHI1300: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);|} + public static explicit {|BHI1300:operator|} /*unchecked*/ GF7(int n) => new(n % 7); private byte _value; public byte Value { get => _value; @@ -55,15 +55,15 @@ public sealed class DefineCheckedOpAnalyzerTests 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);|} + public static GF7 {|BHI1300:operator|} -(GF7 x) => new(-x._value % 7); + public static GF7 {|BHI1300:operator|} ++(GF7 x) => new((x._value + 1) % 7); + public static GF7 {|BHI1300:operator|} --(GF7 x) => new((x._value - 1) % 7); + public static GF7 {|BHI1300:operator|} +(GF7 x, GF7 y) => new((x._value + y._value) % 7); + public static GF7 {|BHI1300:operator|} +(GF7 x, int y) => new((x._value + y) % 7); + public static GF7 {|BHI1300:operator|} -(GF7 minuend, int subtrahend) => new((minuend._value - subtrahend) % 7); + public static GF7 {|BHI1300:operator|} *(GF7 x, int y) => new((x._value * y) % 7); + public static GF7 {|BHI1300:operator|} /(GF7 dividend, GF7 divisor) => divisor._value is 0 ? default : new((dividend._value * Inverses[divisor._value]) % 7); + public static explicit {|BHI1300:operator|} GF7(int n) => new(n % 7); private byte _value; public byte Value { get => _value; diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FeatureNotImplementedAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FeatureNotImplementedAnalyzerTests.cs index 8686c9c056..c8c3fc45e2 100644 --- a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FeatureNotImplementedAnalyzerTests.cs +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FeatureNotImplementedAnalyzerTests.cs @@ -20,13 +20,13 @@ public sealed class FeatureNotImplementedAnalyzerTests } [FeatureNotImplemented] private static int Z() => throw new NotImplementedException(); - {|BHI3300:[FeatureNotImplemented] private static int A => default;|} + [FeatureNotImplemented] private static int A {|BHI3300:=> default|}; private static int B { - {|BHI3300:[FeatureNotImplemented] get => default;|} - {|BHI3300:[FeatureNotImplemented] set => _ = value;|} + [FeatureNotImplemented] get {|BHI3300:=> default|}; + [FeatureNotImplemented] set {|BHI3300:=> _ = value|}; } - {|BHI3300:[FeatureNotImplemented] private static int C() - => default;|} + [FeatureNotImplemented] private static int C() + {|BHI3300:=> default|}; // wrong exception type, same code but different message: [FeatureNotImplemented] private static int D => {|BHI3300:throw new InvalidOperationException()|}; private static int E { diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzerTests.cs index b1d7c59bed..deb90eb48e 100644 --- a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzerTests.cs +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzerTests.cs @@ -18,13 +18,13 @@ public sealed class FirstOrDefaultOnStructAnalyzerTests private static string? Z() => new List { 0x80, 0x20, 0x40 }.Select(static n => n.ToString()).FirstOrDefault(); private static int A() - => {|BHI3100:new[] { 0x80, 0x20, 0x40 }.FirstOrDefault()|}; + => new[] { 0x80, 0x20, 0x40 }{|BHI3100:.FirstOrDefault()|}; private static int B() - => {|BHI3100:new List { 0x80, 0x20, 0x40 }.FirstOrDefault()|}; + => new List { 0x80, 0x20, 0x40 }{|BHI3100:.FirstOrDefault()|}; private static int C() - => {|BHI3100:new[] { 0x80, 0x20, 0x40 }.FirstOrDefault(static n => n.ToString().Length > 2)|}; + => new[] { 0x80, 0x20, 0x40 }{|BHI3100:.FirstOrDefault(static n => n.ToString().Length > 2)|}; private static int D() - => {|BHI3100:new List { 0x80, 0x20, 0x40 }.FirstOrDefault(static n => n.ToString().Length > 2)|}; + => new List { 0x80, 0x20, 0x40 }{|BHI3100:.FirstOrDefault(static n => n.ToString().Length > 2)|}; } namespace BizHawk.Common.CollectionExtensions { public static class CollectionExtensions {} // Analyzer short-circuits if this doesn't exist, since that's where the extension lives diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/HawkSourceAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/HawkSourceAnalyzerTests.cs index 42ca6ffdb5..6fe7b9424e 100644 --- a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/HawkSourceAnalyzerTests.cs +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/HawkSourceAnalyzerTests.cs @@ -106,7 +106,7 @@ public sealed class HawkSourceAnalyzerTests => Verify.VerifyAnalyzerAsync(""" public static class Cases { private static readonly int Z = $@"{0x100}".Length; - private static readonly int A = {|BHI1004:@$"{0x100}"|}.Length; + private static readonly int A = {|BHI1004:@$"|}{0x100}".Length; } """); @@ -119,9 +119,9 @@ public sealed class HawkSourceAnalyzerTests private static readonly int[] X = W ? [ ] : V; private static readonly int[] Y = [ 0x80, 0x20, 0x40 ]; private static readonly bool Z = Y is [ _, > 20, .. ]; - private static readonly int[] A = {|BHI1110:[0x80, 0x20, 0x40 ]|}; - private static readonly bool B = A is {|BHI1110:[ _, > 20, ..]|}; - private static readonly bool C = A is {|BHI1110:[_, > 20, ..]|}; + private static readonly int[] A = {|BHI1110:[|}0x80, 0x20, 0x40 ]; + private static readonly bool B = A is [ _, > 20, ..{|BHI1110:]|}; + private static readonly bool C = A is [_, > 20, ..{|BHI1110:]|}; // the way this is written, it will flag end and then start private static readonly int[] D = {|BHI1110:[]|}; private static readonly bool E = D is {|BHI1110:[]|}; private static readonly int[] F = E ? {|BHI1110:[]|} : D; @@ -133,7 +133,7 @@ public sealed class HawkSourceAnalyzerTests => Verify.VerifyAnalyzerAsync(""" internal record struct Y {} internal record class Z {} - {|BHI1130:internal record A {}|} + internal {|BHI1130:record|} A {} """); [TestMethod] diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/LINQOnStringsAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/LINQOnStringsAnalyzerTests.cs index ee53647cd3..1264078416 100644 --- a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/LINQOnStringsAnalyzerTests.cs +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/LINQOnStringsAnalyzerTests.cs @@ -36,49 +36,49 @@ public sealed class LINQOnStringsAnalyzerTests private static bool ZZ(string str) => str.All(DummyPredicate); private static bool AA(string str) - => {|BHI3102:str.Any()|}; + => str{|BHI3102:.Any()|}; private static IEnumerable AB(string str) - => {|BHI3102:str.Append('.')|}; + => str{|BHI3102:.Append('.')|}; private static IEnumerable AC(string str) - => {|BHI3102:str.Concat("-_-")|}; + => str{|BHI3102:.Concat("-_-")|}; private static IEnumerable AD(string str) - => {|BHI3102:str.Concat(new[] { '-', '_', '-' })|}; + => str{|BHI3102:.Concat(new[] { '-', '_', '-' })|}; private static bool AE(string str) - => {|BHI3102:Enumerable.Contains(str, '.')|}; + => Enumerable{|BHI3102:.Contains(str, '.')|}; private static int AF(string str) - => {|BHI3102:str.Count()|}; + => str{|BHI3102:.Count()|}; private static IEnumerable AG(string str) - => {|BHI3102:str.DefaultIfEmpty()|}; + => str{|BHI3102:.DefaultIfEmpty()|}; private static IEnumerable AH(string str) - => {|BHI3102:str.DefaultIfEmpty('.')|}; + => str{|BHI3102:.DefaultIfEmpty('.')|}; private static char AI(string str) - => {|BHI3102:str.ElementAt(2)|}; + => str{|BHI3102:.ElementAt(2)|}; private static char AJ(string str) - => {|BHI3102:str.ElementAtOrDefault(2)|}; + => str{|BHI3102:.ElementAtOrDefault(2)|}; private static char AK(string str) - => {|BHI3102:str.First()|}; + => str{|BHI3102:.First()|}; private static char AL(string str) - => {|BHI3102:str.FirstOrDefault()|}; + => str{|BHI3102:.FirstOrDefault()|}; private static char AM(string str) - => {|BHI3102:str.Last()|}; + => str{|BHI3102:.Last()|}; private static char AN(string str) - => {|BHI3102:str.LastOrDefault()|}; + => str{|BHI3102:.LastOrDefault()|}; private static long AO(string str) - => {|BHI3102:str.LongCount()|}; + => str{|BHI3102:.LongCount()|}; private static IEnumerable AP(string str) - => {|BHI3102:str.Prepend('.')|}; + => str{|BHI3102:.Prepend('.')|}; private static IEnumerable AQ(string str) - => {|BHI3102:str.Reverse()|}; + => str{|BHI3102:.Reverse()|}; private static char AR(string str) - => {|BHI3102:str.Single()|}; + => str{|BHI3102:.Single()|}; private static char AS(string str) - => {|BHI3102:str.SingleOrDefault()|}; + => str{|BHI3102:.SingleOrDefault()|}; private static IEnumerable AT(string str) - => {|BHI3102:str.Skip(2)|}; + => str{|BHI3102:.Skip(2)|}; private static IEnumerable AU(string str) - => {|BHI3102:str.Take(2)|}; + => str{|BHI3102:.Take(2)|}; private static char[] AV(string str) - => {|BHI3102:str.ToArray()|}; + => str{|BHI3102:.ToArray()|}; } namespace BizHawk.Common.StringExtensions { public static class StringExtensions {} // Analyzer does more checks if this exists diff --git a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzerTests.cs b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzerTests.cs index ea37c720c5..4f9326d7cb 100644 --- a/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzerTests.cs +++ b/ExternalProjects/BizHawk.AnalyzersTests/BizHawk.Analyzer/TryGetValueImplicitDiscardAnalyzerTests.cs @@ -23,13 +23,13 @@ public sealed class TryGetValueImplicitDiscardAnalyzerTests private static void Z() => _ = MakeDict().TryGetValue("z", out _); private static void A() - => {|BHI1200:MakeDict().TryGetValue("a", out _)|}; + => MakeDict(){|BHI1200:.TryGetValue("a", out _)|}; private static void B() - => {|BHI1200:((IDictionary) MakeDict()).TryGetValue("b", out _)|}; + => ((IDictionary) MakeDict()){|BHI1200:.TryGetValue("b", out _)|}; private static void C() - => {|BHI1200:((IReadOnlyDictionary) MakeDict()).TryGetValue("c", out _)|}; + => ((IReadOnlyDictionary) MakeDict()){|BHI1200:.TryGetValue("c", out _)|}; private static void D() - => {|BHI1200:new CustomDict().TryGetValue("d", out _)|}; + => new CustomDict(){|BHI1200:.TryGetValue("d", out _)|}; } """); } diff --git a/References/BizHawk.Analyzer.dll b/References/BizHawk.Analyzer.dll index 17c066a1871a1cf94680b9dde59dfd28c8c7daa9..a8ea0fadd16a7d7d0d2d90b70679f06b91aa031c 100644 GIT binary patch literal 68096 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 b?CNlkpP$mFg6SV!P2#y&|Nr^FM}hwa)tCW| literal 66048 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 a4)XI6{a~j7C);oLKO%Vl59T99f&T?He%V?8