Tài liệu

Code Fixes của Nalix.Analyzers

Thời gian đọc 3 phút Gói: Nalix.Analyzers
Trên trang này

Nalix.Analyzers.CodeFixes cung cấp 16 lớp CodeFixProvider của Roslyn để tự động hóa các sửa lỗi cơ học thường gặp cho 20 mã chẩn đoán đang hoạt động (cộng với NALIX031 đã bị loại bỏ) do Nalix.Analyzers phát ra.

Ánh xạ mã nguồn

Mọi provider nằm trong analyzers/Nalix.Analyzers.CodeFixes/:

Lớp providerChẩn đoán được sửaTiêu đề hành động sửaBiến đổi
PacketOpcodeCodeFixProviderNALIX002Add [PacketOpcode]Thêm [PacketOpcode(0x0000)] vào một method handler bên trong controller [PacketHandler].
PacketHandlerCodeFixProviderNALIX008Add [PacketHandler]Thêm [PacketHandler] vào lớp controller chứa nó.
PacketRegistryDeserializerCodeFixProviderNALIX009Implement IPacketDeserializer<T>Thêm IPacketDeserializer<ClassName> vào danh sách lớp cơ sở và sinh ra public static new ClassName Deserialize(ReadOnlySpan<byte> buffer) => PacketBase<ClassName>.Deserialize(buffer);.
PacketSelfTypeCodeFixProviderNALIX010, NALIX011Use '{ClassName}' as type argumentThay đối số kiểu generic sai trong PacketBase<TSelf> hoặc IPacketDeserializer<T> bằng tên lớp chứa.
PacketDeserializeCodeFixProviderNALIX012, NALIX052Generate valid static Deserialize methodThêm hoặc cập nhật Deserialize thành public static new ClassName Deserialize(ReadOnlySpan<byte> buffer) => PacketBase<ClassName>.Deserialize(buffer);.
SerializeOrderMissingCodeFixProviderNALIX013Add [SerializeOrder] / Add [SerializeIgnore]Cung cấp hai hành động: thêm [SerializeOrder(nextOrder)] (dùng maxOrder + 1 trên kiểu) hoặc thêm [SerializeIgnore].
DuplicateSerializeOrderCodeFixProviderNALIX014Use next available SerializeOrderĐổi đối số [SerializeOrder] bị trùng thành maxOrder + 1.
SerializationConflictCodeFixProviderNALIX015Remove [SerializeOrder] / Remove [SerializeIgnore]Cung cấp hai hành động để xóa [SerializeOrder] hoặc [SerializeIgnore] khi cả hai cùng có trên một thành viên.
ResetForPoolCodeFixProviderNALIX020Call base.ResetForPool()Chèn base.ResetForPool(); làm câu lệnh đầu tiên của override ResetForPool() (chuyển method dạng expression-bodied sang dạng block nếu cần).
ConfigurationIgnoreCodeFixProviderNALIX023, NALIX024Add [ConfiguredIgnore]Thêm [ConfiguredIgnore] vào property không được hỗ trợ (NALIX023) hoặc không bind được (NALIX024) trong các lớp con ConfigurationLoader.
MiddlewareCodeFixProviderNALIX030, NALIX032Add [MiddlewareOrder(0)] (NALIX030) / Remove AlwaysExecute (NALIX032)Thêm [MiddlewareOrder(0)] vào lớp middleware (NALIX030) hoặc xóa AlwaysExecute = true trên MiddlewareStage.Inbound (NALIX032, cùng với NALIX031 đã bị loại bỏ).
DispatchLoopCountCodeFixProviderNALIX047Clamp dispatch loop count to 1..64Kẹp các literal số nguyên nằm ngoài khoảng truyền vào WithDispatchLoopCount(...) về khoảng hợp lệ 1..64 (< 1 thành 1, > 64 thành 64).
RedundantPacketCastCodeFixProviderNALIX055Remove redundant Packet castThay (MyPacket)context.Packet hoặc context.Packet as MyPacket bằng context.Packet.
NullMiddlewareCodeFixProviderNALIX056Remove null middleware registrationXóa lệnh gọi .WithMiddleware(null) / .WithErrorHandlingMiddleware(null) khỏi chuỗi builder fluent.
RequestOptionsConsistencyCodeFixProviderNALIX057Set TimeoutMs to 5000 / Disable retriesGiải quyết xung đột timeout vô hạn + retry (NALIX057) bằng cách đặt TimeoutMs = 5000 hoặc RetryCount = 0.
GenericPacketHandlerCodeFixProviderNALIX058Remove [PacketOpcode]Xóa [PacketOpcode] khỏi các method generic không thể gắn làm packet handler.

Khi chẩn đoán không có code fix

Các chẩn đoán đòi hỏi một quyết định kiến trúc hoặc bảo mật rõ ràng cố ý không có code fix tự động:

  • Opcode trùng (NALIX001, NALIX036, NALIX068, NALIX106) và opcode dành riêng (NALIX035): Số opcode là hợp đồng wire protocol được client và server dùng chung; tự chọn một opcode ngẫu nhiên sẽ làm hỏng khả năng tương thích wire.
  • Vi phạm chữ ký và phạm vi handler (NALIX003, NALIX067, NALIX076): Cần quyết định nên lấy service qua [FromScope] hay sao chép dữ liệu trước khi chuyển việc sang xử lý khác.
  • Quy tắc hợp đồng RPC và tài nguyên (NALIX039, NALIX075, NALIX100–NALIX104, NALIX107): Cần chọn đúng hợp đồng kiểu trả về/tham số RPC, bỏ readonly khỏi field [Inject], hoặc đặt lại các field có thể thay đổi trong ResetForPool().

API liên quan