Nalix.Analyzers
On this page
Nalix.Analyzers and Nalix.Analyzers.Generators provide 75 compile-time Roslyn diagnostics (NALIX001–NALIX107), 16 automated code fix providers, and 7 incremental source generators. Both analyzer assemblies are bundled automatically inside the Nalix.Abstractions NuGet package.
Source Mapping
analyzers/Nalix.Analyzers/Diagnostics/DiagnosticDescriptors.cs(67 analyzer descriptors)analyzers/Nalix.Analyzers.Generators/Internal/GeneratorDiagnosticDescriptors.cs(8 source-generator descriptors)analyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.csanalyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.SymbolSet.csanalyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.CompilationSummary.csanalyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.InvocationAnalysis.csanalyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.TypeDeclarationAnalysis.csanalyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.ResourceLifecycleAnalysis.csanalyzers/Nalix.Analyzers/Analyzers/NalixUsageAnalyzer.CodeQualityAnalysis.csanalyzers/Nalix.Analyzers/Analyzers/PacketContextEscapeAnalyzer.csanalyzers/Nalix.Analyzers/Analyzers/PacketScopeMustDisposeAnalyzer.csanalyzers/Nalix.Analyzers.CodeFixes/*.cs(16 code fix providers)analyzers/Nalix.Analyzers.Generators/*.cs(7 incremental source generators)
Analyzer Workflow
flowchart LR
A["Developer writes Nalix C# code"] --> B["NalixUsageAnalyzer + Specialized Analyzers"]
A --> SG["7 Incremental Source Generators"]
B --> C{"Contract or lifecycle violation?"}
C -->|No| D["Clean build + generated C#"]
C -->|Yes| E["Emit NALIX001..NALIX107"]
E --> F{"Automated CodeFix available?"}
F -->|Yes| G["Apply 1-click Roslyn CodeFix"]
F -->|No| H["Resolve architectural contract"]
G --> A
H --> ADiagnostic Surface (NALIX001–NALIX107)
The active descriptor set comprises 75 diagnostics (67 in Nalix.Analyzers and 8 in Nalix.Analyzers.Generators). Identifiers NALIX007, NALIX019, NALIX029, NALIX031, NALIX049, and NALIX053 were retired when INetworkBufferMiddleware and legacy reflection paths were removed.
| Area | Codes | Purpose |
|---|---|---|
| Controller dispatch & packet registration | NALIX001–NALIX005, NALIX008–NALIX012, NALIX017–NALIX018, NALIX035–NALIX036, NALIX047–NALIX048, NALIX050, NALIX052, NALIX054–NALIX056, NALIX058, NALIX067–NALIX068, NALIX106 | Validates [PacketHandler] controllers, IPacketContext<TPacket> handler signatures, [FromScope] parameters, opcode uniqueness (StaticOpCode & [PacketOpcode]), dispatch loop bounds (1..64), and Deserialize contracts. |
| Middleware & routing metadata | NALIX006, NALIX025–NALIX026, NALIX030, NALIX032–NALIX033, NALIX038 | Enforces [MiddlewareOrder], middleware packet-type compatibility, AlwaysExecute stage rules, metadata builder guards, and XML opcode consistency. |
| Serialization & schema layout | NALIX013–NALIX016, NALIX021–NALIX022, NALIX034, NALIX046, NALIX051, NALIX059–NALIX060 | Validates SerializeLayout.Explicit, [SerializeOrder], [SerializeHeader] conflicts, IFixedSizeSerializable, static Create() on [GenerateFormatter] reference types, and partial modifiers on PacketBase<TSelf> types. |
| DI, configuration, RPC, SDK & hosting | NALIX020, NALIX023–NALIX024, NALIX027–NALIX028, NALIX037, NALIX039–NALIX045, NALIX057, NALIX063–NALIX066, NALIX100–NALIX105, NALIX107 | Checks ResetForPool() completeness, .ini property bindability, RequestOptions bounds, IBufferLease disposal, NetworkApplicationBuilder setup, [Injectable] / SingletonBase<T> constructors, [Inject] field mutability, and [RpcService] contracts. |
| Security, pooling & AOT | NALIX071–NALIX076, NALIX078 | Prevents IPacketContext<T> escaping handler scope (NALIX076), enforces using on PacketScope<T> (NALIX075), and guards Nalix Core assemblies against unreviewed crypto, hot-path endpoint allocations, unguarded catches, and AOT-unsafe reflection. |
For the complete table of all 75 diagnostics, see Diagnostic Codes.
Automated Code Fix Coverage
Nalix.Analyzers.CodeFixes provides 16 targeted Roslyn code fix providers covering 20 active diagnostic IDs (plus retired NALIX031):
| Category | Code Fix Providers | Fixed Diagnostics |
|---|---|---|
| Packet & controller shape | PacketHandlerCodeFixProvider, PacketOpcodeCodeFixProvider, PacketDeserializeCodeFixProvider, PacketRegistryDeserializerCodeFixProvider, PacketSelfTypeCodeFixProvider, GenericPacketHandlerCodeFixProvider | NALIX002, NALIX008, NALIX009, NALIX010, NALIX011, NALIX012, NALIX052, NALIX058 |
| Serialization attributes | SerializeOrderMissingCodeFixProvider, DuplicateSerializeOrderCodeFixProvider, SerializationConflictCodeFixProvider | NALIX013, NALIX014, NALIX015 |
| Middleware & dispatch setup | MiddlewareCodeFixProvider, NullMiddlewareCodeFixProvider, DispatchLoopCountCodeFixProvider | NALIX030, NALIX032, NALIX047, NALIX056 |
| Configuration & SDK options | ConfigurationIgnoreCodeFixProvider, RequestOptionsConsistencyCodeFixProvider | NALIX023, NALIX024, NALIX057 |
| Pooling & lifecycle cleanup | ResetForPoolCodeFixProvider, RedundantPacketCastCodeFixProvider | NALIX020, NALIX055 |
See Code Fixes Reference for the exact transformations performed by each provider.
Incremental Source Generators
Nalix.Analyzers.Generators includes 7 compile-time generators:
- Packet Handler Generator (PacketHandlerGenerator) — Compiles
[PacketHandler]controllers into zero-reflectionIPacketHandlerCompilerdelegates and generatesInitializeDependencies()for[Inject]members. - Instance Generator (InstanceGenerator) — Emits AOT-safe multi-constructor activation delegates for
[Injectable]services andSingletonBase<T>subclasses. - Serialization Generator (SerializeFormatterGenerator) — Generates
IFormatter<T>andIFillableFormatter<T>implementations for[GenerateFormatter]types. - Packet Registry Generator (PacketRegistryGenerator) — Emits
PacketRegistryGenerated.Initialize()callingPacketRegistry.RegisterGenerated<TPacket>for concreteIPackettypes. - Packet Schema Generator (PacketSchemaGenerator) — Emits
Length,ResetForPool(), andSize(when implementingIFixedSizeSerializable) forpartialPacketBase<TSelf>types. - Configuration Generator (ConfigurationGenerator) — Emits
CopyPropertiesTo,BindProperties, andValidateDataAnnotationsforConfigurationLoadersubclasses. - RPC Client Generator (RpcClientGenerator) — Generates
<Service>_RpcClientimplementations registered viaRpcExtensions.RegisterFactoryfor[RpcService]interfaces.