docs: complete XML doc comments via fixdocs (2757 to 131 findings)

Add missing <returns>/<param>/<summary>/<typeparam> tags and clean up
misused inheritdoc across 481 files so the documented API surface is
complete. Documentation-only (zero code lines changed). The 131 remaining
findings are inheritdoc-style warnings deliberately left to preserve
hand-written implementation rationale (plan-decision notes, race-condition
explanations).
This commit is contained in:
Joseph Doherty
2026-06-03 12:34:34 -04:00
parent c6d9b20d9f
commit bd6c0b4d3d
481 changed files with 2550 additions and 1668 deletions
@@ -15,13 +15,9 @@ public sealed class ModbusCoalescingTests
private sealed class CountingTransport : IModbusTransport
{
public readonly List<(byte Unit, byte Fc, ushort Address, ushort Quantity)> Reads = new();
/// <summary>Establishes a connection asynchronously.</summary>
/// <param name="ct">Cancellation token for the operation.</param>
/// <inheritdoc />
public Task ConnectAsync(CancellationToken ct) => Task.CompletedTask;
/// <summary>Sends a Modbus PDU and receives the response.</summary>
/// <param name="unitId">The Modbus unit identifier.</param>
/// <param name="pdu">The Protocol Data Unit to send.</param>
/// <param name="ct">Cancellation token for the operation.</param>
/// <inheritdoc />
public Task<byte[]> SendAsync(byte unitId, byte[] pdu, CancellationToken ct)
{
var addr = (ushort)((pdu[1] << 8) | pdu[2]);
@@ -38,11 +34,13 @@ public sealed class ModbusCoalescingTests
default: return Task.FromResult(new byte[] { pdu[0], 0, 0 });
}
}
/// <summary>Disposes the transport asynchronously.</summary>
/// <summary>Disposes the transport; no-op for this in-memory fake.</summary>
/// <returns>A completed value task.</returns>
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
}
/// <summary>Verifies that MaxReadGap=0 defaults to per-tag reads without coalescing.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task MaxReadGap_Zero_Defaults_To_Per_Tag_Reads()
{
@@ -62,6 +60,7 @@ public sealed class ModbusCoalescingTests
}
/// <summary>Verifies that MaxReadGap bridges adjacent tags into a single read.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task MaxReadGap_Bridges_Two_Adjacent_Tags_Into_One_Read()
{
@@ -84,6 +83,7 @@ public sealed class ModbusCoalescingTests
}
/// <summary>Verifies that MaxReadGap splits blocks when gaps exceed threshold.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task MaxReadGap_Splits_When_Gap_Exceeds_Threshold()
{
@@ -104,6 +104,7 @@ public sealed class ModbusCoalescingTests
}
/// <summary>Verifies that tags with CoalesceProhibited are read separately.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task CoalesceProhibited_Tag_Reads_Alone()
{
@@ -125,6 +126,7 @@ public sealed class ModbusCoalescingTests
}
/// <summary>Verifies that coalescing does not cross unit ID boundaries.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Coalescing_Does_Not_Cross_UnitId_Boundaries()
{
@@ -145,6 +147,7 @@ public sealed class ModbusCoalescingTests
}
/// <summary>Verifies that coalescing splits blocks exceeding MaxRegistersPerRead.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Coalescing_Splits_Block_That_Exceeds_MaxRegistersPerRead()
{
@@ -166,6 +169,7 @@ public sealed class ModbusCoalescingTests
}
/// <summary>Verifies that coalesced reads surface each tag value independently.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Coalesced_Read_Surfaces_Each_Tag_Value_Independently()
{