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
@@ -22,6 +22,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies reading an Int16 array returns a typed array.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Read_Int16_Array_Returns_Typed_Array()
{
@@ -36,6 +37,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies reading a Float32 array with word swap returns a typed array.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Read_Float32_Array_Returns_Typed_Array_With_WordSwap()
{
@@ -63,6 +65,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies reading a coil array returns a bool array.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Read_Coil_Array_Returns_Bool_Array()
{
@@ -78,6 +81,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies writing an Int16 array lands contiguously in the register bank.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Write_Int16_Array_Lands_Contiguous_In_Bank()
{
@@ -96,6 +100,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies writing a coil array packs bits in LSB-first order.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Write_Coil_Array_Packs_LSB_First()
{
@@ -114,6 +119,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies writing an array with mismatched length surfaces an error.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Write_Array_Mismatch_Length_Surfaces_Error()
{
@@ -129,6 +135,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies discovery surfaces IsArray and ArrayDim correctly.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Discovery_Surfaces_IsArray_And_ArrayDim()
{
@@ -145,6 +152,7 @@ public sealed class ModbusArrayTests
}
/// <summary>Verifies scalar tag discovery keeps IsArray false.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Scalar_Tag_Discovery_Stays_NonArray()
{
@@ -164,39 +172,27 @@ public sealed class ModbusArrayTests
/// <param name="captured">List to capture discovered attributes into.</param>
private sealed class RecordingBuilder(List<DriverAttributeInfo> captured) : IAddressSpaceBuilder
{
/// <summary>Creates a folder in the address space.</summary>
/// <param name="browseName">The browse name of the folder.</param>
/// <param name="displayName">The display name of the folder.</param>
/// <returns>This builder instance.</returns>
/// <inheritdoc />
public IAddressSpaceBuilder Folder(string browseName, string displayName) => this;
/// <summary>Creates a variable in the address space.</summary>
/// <param name="browseName">The browse name of the variable.</param>
/// <param name="displayName">The display name of the variable.</param>
/// <param name="attributeInfo">The attribute information.</param>
/// <returns>A variable handle.</returns>
/// <inheritdoc />
public IVariableHandle Variable(string browseName, string displayName, DriverAttributeInfo attributeInfo)
{
captured.Add(attributeInfo);
return new StubHandle(browseName);
}
/// <summary>Adds a property to the current node.</summary>
/// <param name="browseName">The browse name of the property.</param>
/// <param name="dataType">The data type of the property.</param>
/// <param name="value">The property value.</param>
/// <inheritdoc />
public void AddProperty(string browseName, DriverDataType dataType, object? value) { }
/// <summary>Stub variable handle for testing.</summary>
/// <param name="fullRef">The full reference of the handle.</param>
private sealed class StubHandle(string fullRef) : IVariableHandle
{
/// <summary>Gets the full reference.</summary>
/// <inheritdoc />
public string FullReference => fullRef;
/// <summary>Marks this variable as an alarm condition.</summary>
/// <param name="info">The alarm condition information.</param>
/// <returns>An alarm condition sink.</returns>
/// <inheritdoc />
public IAlarmConditionSink MarkAsAlarmCondition(AlarmConditionInfo info)
=> throw new NotSupportedException("RecordingBuilder doesn't model alarms");
}