λ1203: Prefer the assertion on Assert over FunctionalAssert

Since Funcky.Xunit 2.3.0 and Funcky.Xunit.v3 1.1.0 the assertions of FunctionalAssert are also static extension members of xunit's Assert: FunctionalAssert.Some(option) is Assert.Some(option), found where the other assertions live.

Cause

A method of FunctionalAssert is called, the file is compiled as C# 14 or later, and AssertExtensions from a Funcky.Xunit package that has the Assert members is referenced.

Reason for rule

One Assert class for every assertion in a test is easier to discover and to read than two, and the rule is the upgrade path should a later major version retire FunctionalAssert.

How to fix violations

Replace the FunctionalAssert receiver with Assert. The code fix does this, keeps the arguments and type arguments, and adds using Funcky.Extensions; when the extension members are not in scope yet. It supports fix-all.

Examples

Disallowed

FunctionalAssert.Some(42, option);
var value = FunctionalAssert.Ok(result);

Allowed

Assert.Some(42, option);
var value = Assert.Ok(result);