From aee5271a2de696d2fa5e48eabec1f9d5ebc43ae2 Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Tue, 18 Apr 2023 21:57:13 +0800 Subject: [PATCH] more ref-like parameters --- .../Identity/IdentityGenerator.cs | 2 +- .../UniversalAnalyzer.cs | 58 +++++++++++++------ .../Control/Text/DescriptionTextBlock.cs | 8 +-- .../Core/Abstraction/DisposableObject.cs | 33 ----------- .../Snap.Hutao/Core/IO/TempFileStream.cs | 1 + .../Snap.Hutao/Core/Setting/LocalSetting.cs | 12 ++-- .../Snap.Hutao/Core/Windowing/Persistence.cs | 2 +- .../Core/Windowing/WindowSubclass.cs | 2 + .../Extension/DateTimeOffsetExtension.cs | 2 +- .../Snap.Hutao/Extension/NumberExtension.cs | 2 +- .../Snap.Hutao/Model/Entity/Achievement.cs | 4 +- .../Snap.Hutao/Model/Entity/CultivateEntry.cs | 2 +- .../Snap.Hutao/Model/Entity/CultivateItem.cs | 2 +- .../Snap.Hutao/Model/Entity/GachaItem.cs | 6 +- .../Snap.Hutao/Model/Entity/InventoryItem.cs | 2 +- .../Abstraction/ISummaryItemSource.cs | 2 +- .../Metadata/Avatar/Avatar.Implementation.cs | 2 +- .../Metadata/Weapon/Weapon.Implementation.cs | 2 +- .../Achievement/AchievementDbOperation.cs | 2 + .../Service/Cultivation/CultivationService.cs | 3 + .../Factory/GachaStatisticsExtension.cs | 2 +- .../Factory/TypedWishSummaryBuilder.cs | 2 +- .../Service/Game/Unlocker/GameFpsUnlocker.cs | 2 +- src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs | 2 +- .../Snap.Hutao/Web/ApiOsEndpoints.cs | 2 +- .../Snap.Hutao/Win32/StructMarshal.cs | 5 +- 26 files changed, 82 insertions(+), 82 deletions(-) delete mode 100644 src/Snap.Hutao/Snap.Hutao/Core/Abstraction/DisposableObject.cs diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Identity/IdentityGenerator.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Identity/IdentityGenerator.cs index 5abb5754..910741e4 100644 --- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Identity/IdentityGenerator.cs +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Identity/IdentityGenerator.cs @@ -172,4 +172,4 @@ internal sealed class IdentityGenerator : IIncrementalGenerator /// public string? Documentation { get; set; } } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/UniversalAnalyzer.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/UniversalAnalyzer.cs index 7a80dad5..64516026 100644 --- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/UniversalAnalyzer.cs +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/UniversalAnalyzer.cs @@ -49,7 +49,6 @@ internal sealed class UniversalAnalyzer : DiagnosticAnalyzer context.RegisterSyntaxNodeAction(HandleTypeDeclaration, types); - context.RegisterSyntaxNodeAction(CollectReadOnlyStruct, SyntaxKind.StructDeclaration); context.RegisterSyntaxNodeAction(HandleMethodDeclaration, SyntaxKind.MethodDeclaration); } @@ -87,21 +86,6 @@ internal sealed class UniversalAnalyzer : DiagnosticAnalyzer } } - private readonly HashSet readOnlyStructs = new(); - - private void CollectReadOnlyStruct(SyntaxNodeAnalysisContext context) - { - StructDeclarationSyntax structSyntax = (StructDeclarationSyntax)context.Node; - - if (structSyntax.Modifiers.Any(token => token.IsKind(SyntaxKind.ReadOnlyKeyword))) - { - if (context.SemanticModel.GetDeclaredSymbol(structSyntax) is INamedTypeSymbol symbol) - { - readOnlyStructs.Add(symbol.ToDisplayString()); - } - } - } - private void HandleMethodDeclaration(SyntaxNodeAnalysisContext context) { MethodDeclarationSyntax methodSyntax = (MethodDeclarationSyntax)context.Node; @@ -112,6 +96,12 @@ internal sealed class UniversalAnalyzer : DiagnosticAnalyzer return; } + // 跳过重载方法 + if (methodSyntax.Modifiers.Any(token => token.IsKind(SyntaxKind.OverrideKeyword))) + { + return; + } + // 跳过方法定义 如 接口 if (methodSyntax.Body == null) { @@ -122,7 +112,18 @@ internal sealed class UniversalAnalyzer : DiagnosticAnalyzer { if (context.SemanticModel.GetDeclaredSymbol(parameter) is IParameterSymbol symbol) { - if (readOnlyStructs.Contains(symbol.Type.ToDisplayString()) && symbol.RefKind == RefKind.None) + if (IsBuiltInType(symbol.Type)) + { + continue; + } + + // 跳过 CancellationToken + if (symbol.Type.ToDisplayString() == "System.Threading.CancellationToken") + { + continue; + } + + if (symbol.Type.IsReadOnly && symbol.RefKind == RefKind.None) { Location location = parameter.GetLocation(); Diagnostic diagnostic = Diagnostic.Create(readOnlyStructRefDescriptor, location, symbol.Type); @@ -131,4 +132,27 @@ internal sealed class UniversalAnalyzer : DiagnosticAnalyzer } } } + + private bool IsBuiltInType(ITypeSymbol symbol) + { + return symbol.SpecialType switch + { + SpecialType.System_Boolean => true, + SpecialType.System_Char => true, + SpecialType.System_SByte => true, + SpecialType.System_Byte => true, + SpecialType.System_Int16 => true, + SpecialType.System_UInt16 => true, + SpecialType.System_Int32 => true, + SpecialType.System_UInt32 => true, + SpecialType.System_Int64 => true, + SpecialType.System_UInt64 => true, + SpecialType.System_Decimal => true, + SpecialType.System_Single => true, + SpecialType.System_Double => true, + SpecialType.System_IntPtr => true, + SpecialType.System_UIntPtr => true, + _ => false, + }; + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs b/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs index 9e902e34..952638c5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs @@ -60,7 +60,7 @@ internal sealed class DescriptionTextBlock : ContentControl ApplyDescription(text, description); } - private static void ApplyDescription(TextBlock text, ReadOnlySpan description) + private static void ApplyDescription(TextBlock text, in ReadOnlySpan description) { text.Inlines.Clear(); @@ -111,12 +111,12 @@ internal sealed class DescriptionTextBlock : ContentControl } } - private static void AppendText(TextBlock text, ReadOnlySpan slice) + private static void AppendText(TextBlock text, in ReadOnlySpan slice) { text.Inlines.Add(new Run { Text = slice.ToString() }); } - private static void AppendColorText(TextBlock text, ReadOnlySpan slice, Rgba8 color) + private static void AppendColorText(TextBlock text, in ReadOnlySpan slice, Rgba8 color) { Color targetColor; if (ThemeHelper.IsDarkMode(text.ActualTheme)) @@ -137,7 +137,7 @@ internal sealed class DescriptionTextBlock : ContentControl }); } - private static void AppendItalicText(TextBlock text, ReadOnlySpan slice) + private static void AppendItalicText(TextBlock text, in ReadOnlySpan slice) { text.Inlines.Add(new Run { diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Abstraction/DisposableObject.cs b/src/Snap.Hutao/Snap.Hutao/Core/Abstraction/DisposableObject.cs deleted file mode 100644 index a2268b7a..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Core/Abstraction/DisposableObject.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -namespace Snap.Hutao.Core.Abstraction; - -[HighQuality] -[SuppressMessage("", "SA1600")] -internal abstract class DisposableObject : IDisposable -{ - public bool IsDisposed { get; private set; } - - public void Dispose() - { - if (!IsDisposed) - { - GC.SuppressFinalize(this); - Dispose(isDisposing: true); - } - } - - protected virtual void Dispose(bool isDisposing) - { - IsDisposed = true; - } - - protected void VerifyNotDisposed() - { - if (IsDisposed) - { - throw new ObjectDisposedException(GetType().FullName); - } - } -} diff --git a/src/Snap.Hutao/Snap.Hutao/Core/IO/TempFileStream.cs b/src/Snap.Hutao/Snap.Hutao/Core/IO/TempFileStream.cs index 535dfb00..6bd69425 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/IO/TempFileStream.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/IO/TempFileStream.cs @@ -73,6 +73,7 @@ internal sealed class TempFileStream : Stream protected override void Dispose(bool disposing) { base.Dispose(disposing); + stream.Dispose(); File.Delete(path); } diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs b/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs index 092b958f..0892aa5c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs @@ -85,19 +85,19 @@ internal static class LocalSetting } /// - public static DateTimeOffset Get(string key, DateTimeOffset defaultValue) + public static DateTimeOffset Get(string key, in DateTimeOffset defaultValue) { return Get(key, defaultValue); } /// - public static TimeSpan Get(string key, TimeSpan defaultValue) + public static TimeSpan Get(string key, in TimeSpan defaultValue) { return Get(key, defaultValue); } /// - public static Guid Get(string key, Guid defaultValue) + public static Guid Get(string key, in Guid defaultValue) { return Get(key, defaultValue); } @@ -187,19 +187,19 @@ internal static class LocalSetting } /// - public static void Set(string key, DateTimeOffset value) + public static void Set(string key, in DateTimeOffset value) { Set(key, value); } /// - public static void Set(string key, TimeSpan value) + public static void Set(string key, in TimeSpan value) { Set(key, value); } /// - public static void Set(string key, Guid value) + public static void Set(string key, in Guid value) { Set(key, value); } diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/Persistence.cs b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/Persistence.cs index 0dfa93a2..58e913f7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/Persistence.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/Persistence.cs @@ -68,7 +68,7 @@ internal static class Persistence /// /// 窗体句柄 /// 缩放比 - public static double GetScaleForWindowHandle(HWND hwnd) + public static double GetScaleForWindowHandle(in HWND hwnd) { uint dpi = GetDpiForWindow(hwnd); return Math.Round(dpi / 96D, 2, MidpointRounding.AwayFromZero); diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs index 05539ce1..bdc038f7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs @@ -75,6 +75,7 @@ internal sealed class WindowSubclass : IDisposable } } + [SuppressMessage("", "SH002")] private unsafe LRESULT OnSubclassProcedure(HWND hwnd, uint uMsg, WPARAM wParam, LPARAM lParam, nuint uIdSubclass, nuint dwRefData) { switch (uMsg) @@ -96,6 +97,7 @@ internal sealed class WindowSubclass : IDisposable return DefSubclassProc(hwnd, uMsg, wParam, lParam); } + [SuppressMessage("", "SH002")] private LRESULT OnDragBarProcedure(HWND hwnd, uint uMsg, WPARAM wParam, LPARAM lParam, nuint uIdSubclass, nuint dwRefData) { switch (uMsg) diff --git a/src/Snap.Hutao/Snap.Hutao/Extension/DateTimeOffsetExtension.cs b/src/Snap.Hutao/Snap.Hutao/Extension/DateTimeOffsetExtension.cs index a32a680c..2ecd384a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Extension/DateTimeOffsetExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Extension/DateTimeOffsetExtension.cs @@ -15,7 +15,7 @@ internal static class DateTimeOffsetExtension /// 时间戳 /// 默认值 /// 转换的时间 - public static DateTimeOffset FromUnixTime(long? timestamp, DateTimeOffset defaultValue) + public static DateTimeOffset FromUnixTime(long? timestamp, in DateTimeOffset defaultValue) { if (timestamp is long value) { diff --git a/src/Snap.Hutao/Snap.Hutao/Extension/NumberExtension.cs b/src/Snap.Hutao/Snap.Hutao/Extension/NumberExtension.cs index 7bf5e2b9..1d026191 100644 --- a/src/Snap.Hutao/Snap.Hutao/Extension/NumberExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Extension/NumberExtension.cs @@ -17,7 +17,7 @@ internal static class NumberExtension /// 给定的整数 /// 位数 [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int Place(this int x) + public static int Place(in this int x) { // Benchmarked and compared as a most optimized solution return (int)(MathF.Log10(x) + 1); diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Achievement.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Achievement.cs index 7d973223..d2c1f7a9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Achievement.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Achievement.cs @@ -59,7 +59,7 @@ internal sealed class Achievement : IEquatable /// 对应的用户id /// 成就Id /// 新创建的成就 - public static Achievement Create(Guid userId, int id) + public static Achievement Create(in Guid userId, int id) { return new() { @@ -76,7 +76,7 @@ internal sealed class Achievement : IEquatable /// 对应的用户id /// uiaf项 /// 新创建的成就 - public static Achievement Create(Guid userId, UIAFItem uiaf) + public static Achievement Create(in Guid userId, UIAFItem uiaf) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateEntry.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateEntry.cs index 8a849f03..48d303b2 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateEntry.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateEntry.cs @@ -49,7 +49,7 @@ internal sealed class CultivateEntry /// 类型 /// 主Id /// 养成入口点 - public static CultivateEntry Create(Guid projectId, CultivateType type, int id) + public static CultivateEntry Create(in Guid projectId, CultivateType type, int id) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateItem.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateItem.cs index 80bbcd77..aff1d82d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateItem.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/CultivateItem.cs @@ -53,7 +53,7 @@ internal sealed class CultivateItem /// 物品 Id /// 个数 /// 养成物品 - public static CultivateItem Create(Guid entryId, int itemId, int count) + public static CultivateItem Create(in Guid entryId, int itemId, int count) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/GachaItem.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/GachaItem.cs index 9e1295b8..4e1b6149 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/GachaItem.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/GachaItem.cs @@ -79,7 +79,7 @@ internal sealed class GachaItem /// 祈愿物品 /// 物品Id /// 新的祈愿物品 - public static GachaItem Create(Guid archiveId, GachaLogItem item, int itemId) + public static GachaItem Create(in Guid archiveId, GachaLogItem item, int itemId) { return new() { @@ -99,7 +99,7 @@ internal sealed class GachaItem /// 祈愿物品 /// 物品Id /// 新的祈愿物品 - public static GachaItem Create(Guid archiveId, UIGFItem item, int itemId) + public static GachaItem Create(in Guid archiveId, UIGFItem item, int itemId) { return new() { @@ -118,7 +118,7 @@ internal sealed class GachaItem /// 存档Id /// 祈愿物品 /// 新的祈愿物品 - public static GachaItem Create(Guid archiveId, Web.Hutao.GachaLog.GachaItem item) + public static GachaItem Create(in Guid archiveId, Web.Hutao.GachaLog.GachaItem item) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/InventoryItem.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/InventoryItem.cs index 1cbec49f..03c3a703 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/InventoryItem.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/InventoryItem.cs @@ -47,7 +47,7 @@ internal sealed class InventoryItem /// 项目Id /// 物品Id /// 新的个数为0的物品 - public static InventoryItem Create(Guid projectId, int itemId) + public static InventoryItem Create(in Guid projectId, int itemId) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Abstraction/ISummaryItemSource.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Abstraction/ISummaryItemSource.cs index 36005bb6..69b5f3de 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Abstraction/ISummaryItemSource.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Abstraction/ISummaryItemSource.cs @@ -24,5 +24,5 @@ internal interface ISummaryItemSource /// 时间 /// 是否为Up物品 /// 简述统计物品 - SummaryItem ToSummaryItem(int lastPull, DateTimeOffset time, bool isUp); + SummaryItem ToSummaryItem(int lastPull, in DateTimeOffset time, bool isUp); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs index bc14e22d..5ab66b62 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs @@ -75,7 +75,7 @@ internal partial class Avatar : IStatisticsItemSource, ISummaryItemSource, IName } /// - public SummaryItem ToSummaryItem(int lastPull, DateTimeOffset time, bool isUp) + public SummaryItem ToSummaryItem(int lastPull, in DateTimeOffset time, bool isUp) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs index 79d687db..83c0a1d8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs @@ -78,7 +78,7 @@ internal sealed partial class Weapon : IStatisticsItemSource, ISummaryItemSource /// 时间 /// 是否为Up物品 /// 简述统计物品 - public SummaryItem ToSummaryItem(int lastPull, DateTimeOffset time, bool isUp) + public SummaryItem ToSummaryItem(int lastPull, in DateTimeOffset time, bool isUp) { return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbOperation.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbOperation.cs index dfbc3c10..758ca4f3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbOperation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbOperation.cs @@ -33,6 +33,7 @@ internal sealed class AchievementDbOperation /// 待合并的项 /// 是否贪婪 /// 导入结果 + [SuppressMessage("", "SH002")] public ImportResult Merge(Guid archiveId, IEnumerable items, bool aggressive) { IOrderedQueryable oldData = appDbContext.Achievements @@ -115,6 +116,7 @@ internal sealed class AchievementDbOperation /// 成就id /// 待覆盖的项 /// 导入结果 + [SuppressMessage("", "SH002")] public ImportResult Overwrite(Guid archiveId, IEnumerable items) { IOrderedQueryable oldData = appDbContext.Achievements diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs index 31d8e817..281f03d5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs @@ -324,6 +324,7 @@ internal sealed class CultivationService : ICultivationService return true; } + [SuppressMessage("", "SH002")] private static Task> GetProjectInventoryAsync(AppDbContext appDbContext, Guid projectId) { return appDbContext.InventoryItems @@ -332,6 +333,7 @@ internal sealed class CultivationService : ICultivationService .ToListAsync(); } + [SuppressMessage("", "SH002")] private static Task> GetProjectEntriesAsync(AppDbContext appDbContext, Guid projectId) { return appDbContext.CultivateEntries @@ -340,6 +342,7 @@ internal sealed class CultivationService : ICultivationService .ToListAsync(); } + [SuppressMessage("", "SH002")] private static Task> GetEntryItemsAsync(AppDbContext appDbContext, Guid entryId) { return appDbContext.CultivateItems diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsExtension.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsExtension.cs index 7ce151d7..8ee30938 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsExtension.cs @@ -19,7 +19,7 @@ internal static class GachaStatisticsExtension /// /// 跨度 /// 平均值 - public static byte Average(this Span span) + public static byte Average(this in Span span) { int sum = 0; int count = 0; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/TypedWishSummaryBuilder.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/TypedWishSummaryBuilder.cs index 07501fa8..71cc466b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/TypedWishSummaryBuilder.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/TypedWishSummaryBuilder.cs @@ -170,7 +170,7 @@ internal sealed class TypedWishSummaryBuilder } } - private void TrackFromToTime(DateTimeOffset time) + private void TrackFromToTime(in DateTimeOffset time) { if (time < fromTimeTracker) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs index 32735566..f66a4469 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs @@ -101,7 +101,7 @@ internal sealed class GameFpsUnlocker : IGameFpsUnlocker } } - private static unsafe MODULEENTRY32 UnsafeFindModule(int processId, ReadOnlySpan moduleName) + private static unsafe MODULEENTRY32 UnsafeFindModule(int processId, in ReadOnlySpan moduleName) { HANDLE snapshot = CreateToolhelp32Snapshot(CREATE_TOOLHELP_SNAPSHOT_FLAGS.TH32CS_SNAPMODULE, (uint)processId); try diff --git a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs index d0c42636..6bb9da32 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs @@ -208,7 +208,7 @@ internal static class ApiEndpoints /// 角色Id /// uid /// 角色详情 - public static string CalculateSyncAvatarDetail(AvatarId avatarId, in PlayerUid uid) + public static string CalculateSyncAvatarDetail(in AvatarId avatarId, in PlayerUid uid) { return $"{ApiTakumiEventCalculate}/v1/sync/avatar/detail?avatar_id={avatarId.Value}&uid={uid.Value}®ion={uid.Region}"; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/ApiOsEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/ApiOsEndpoints.cs index 67c5cde0..329972e1 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/ApiOsEndpoints.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/ApiOsEndpoints.cs @@ -208,7 +208,7 @@ internal static class ApiOsEndpoints /// 角色Id /// uid /// 角色详情 - public static string CalculateSyncAvatarDetail(AvatarId avatarId, in PlayerUid uid) + public static string CalculateSyncAvatarDetail(in AvatarId avatarId, in PlayerUid uid) { return $"{SgPublicApi}/event/calculateos/sync/avatar/detail?avatar_id={avatarId.Value}&uid={uid.Value}®ion={uid.Region}"; } diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/StructMarshal.cs b/src/Snap.Hutao/Snap.Hutao/Win32/StructMarshal.cs index 3a76858d..7449544a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/StructMarshal.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/StructMarshal.cs @@ -85,6 +85,7 @@ internal static class StructMarshal /// /// 快照 /// 模块枚举 + [SuppressMessage("", "SH002")] public static IEnumerable EnumerateModuleEntry32(HANDLE snapshot) { MODULEENTRY32 entry = MODULEENTRY32(); @@ -111,7 +112,7 @@ internal static class StructMarshal return moduleEntry32.dwSize == 0; } - private static unsafe BOOL UnsafeModule32First(HANDLE snapshot, ref MODULEENTRY32 lpme) + private static unsafe BOOL UnsafeModule32First(in HANDLE snapshot, ref MODULEENTRY32 lpme) { fixed (MODULEENTRY32* lpmeLocal = &lpme) { @@ -119,7 +120,7 @@ internal static class StructMarshal } } - private static unsafe BOOL UnsafeModule32Next(HANDLE snapshot, ref MODULEENTRY32 lpme) + private static unsafe BOOL UnsafeModule32Next(in HANDLE snapshot, ref MODULEENTRY32 lpme) { fixed (MODULEENTRY32* lpmeLocal = &lpme) {