funfair-tech/funfair-server-code-analysis
GitHub: funfair-tech/funfair-server-code-analysis
为 FunFair C# 服务器项目提供定制化静态代码分析规则,确保编码一致性与安全。
Stars: 1 | Forks: 1
# funfair-server-code-analysis
静态代码分析 适用于 FunFair 服务器 dotnet 项目。
## 构建状态
| 分支 | 状态 |
|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| main | [](https://github.com/funfair-tech/funfair-server-code-analysis/actions/workflows/build-and-publish-pre-release.yml) |
| release | [](https://github.com/funfair-tech/funfair-server-code-analysis/actions/workflows/build-and-publish-release.yml) |
## 检查项
| 代码 | 含义 |
|---------|------------------------------------------------------------------------------------------------------------------------------------------------|
| FFS0001 | 避免使用 ``DateTime.Now`` - 请使用 ``IDateTimeSource.UtcNow()`` |
| FFS0002 | 避免使用 ``DateTime.UtcNow`` - 请使用 ``IDateTimeSource.UtcNow()`` |
| FFS0003 | 避免使用 ``DateTime.Today`` - 请使用 ``IDateTimeSource.UtcNow().Date`` |
| FFS0004 | 避免使用 ``DateTimeOffset.Now`` - 请使用 ``IDateTimeSource.UtcNow()`` |
| FFS0005 | 避免使用 ``DateTimeOffset.UtcNow`` - 请使用 ``IDateTimeSource.UtcNow()`` |
| FFS0006 | 避免使用任意 SQL 进行更新 |
| FFS0007 | 避免使用任意 SQL 进行查询 |
| FFS0008 | 不要禁用警告 |
| FFS0009 | 不要在不指定消息的情况下使用 ``Assert.True`` |
| FFS0010 | 不要在不指定消息的情况下使用 ``Assert.False`` |
| FFS0011 | 将结构体设为 ``readonly`` |
| FFS0012 | 类应为 ``static``、``sealed`` 或 ``abstract`` |
| FFS0013 | 测试类应为 ``sealed`` 或 ``abstract`` 并派生自 ``TestBase`` |
| FFS0014 | 不要在不指定 ``JsonOptions`` 的情况下使用 ``JsonSerialiser`` |
| FFS0015 | 不要在不指定 ``JsonOptions`` 的情况下使用 ``JsonDeserialiser`` |
| FFS0016 | 向 ``ArgumentExceptions`` 传递参数名称 |
| FFS0017 | 在 catch 块中抛出的异常时传递内部异常 |
| FFS0018 | 不要在不指定调用次数的情况下使用 NSubstitute 的 ``Received()`` |
| FFS0019 | ``ILogger`` 参数应命名为 ``logger`` |
| FFS0020 | 参数应按指定顺序排列 |
| FFS0021 | 不要使用 NSubstitute 的 ``Received(0)`` - 请改用 ``DidNotReceive()`` instead |
| FFS0022 | 不要在代码中配置可空性 - 应为项目级别。 |
| FFS0023 | 基类中的 ``ILogger`` 参数应为 ``ILogger`` 而非 ``ILogger`` |
| FFS0024 | 叶子类中的 ``ILogger`` 参数应为 ``ILogger`` 而非 ``ILogger`` |
| FFS0025 | 泛型类型不匹配 |
| FFS0026 | 不要从 Connection 读取 IPAddress - 请使用抽象 |
| FFS0027 | ``SuppressMessage`` 必须指定理由 |
| FFS0028 | 记录应为 ``sealed`` |
| FFS0029 | 从 ``MockBase`` 派生的类应为 ``internal`` |
| FFS0030 | 从 ``MockBase`` 派生的类应为 ``sealed`` |
| FFS0031 | 避免使用 ``System.Collections.Concurrent.ConcurrentDictionary<,>`` - 请使用 ``NonBlocking.ConcurrentDictionary<,>`` |
| FFS0032 | 避免使用 ``NonBlocing.ConcurrentDictionary<,>.AddOrUpdate`` - 请使用 ``FunFair.Common.Extensions.ConcurrentDictionaryExtensions.AddOrUpdate`` |
| FFS0033 | 避免使用 ``NonBlocing.ConcurrentDictionary<,>.GetOrAdd`` - 请使用 ``FunFair.Common.Extensions.ConcurrentDictionaryExtensions.GetOrAdd`` |
| FFS0034 | 不要使用 ``Microsoft.Extensions.Configuration.ConfigurationBuilder.AddJsonFile`` 并将 reload 设置为 true |
| FFS0035 | 检查测试类是否定义了可变字段 |
| FFS0036 | 检查测试类是否定义了可变属性 |
| FFS0037 | 检查是否使用了 ``Guid.Parse``,应使用 ``new Guid`` 或 ``Guid.TryParse`` 替代 |
| FFS0038 | 记录应具有 ``DebuggerDisplay`` 属性。 |
| FFS0039 | 每个文件只应定义一个类型名称。注意 ``class T`` 和 ``class T`` 被视为一个类型,因为它们共享相同的名称。 |
| FFS0040 | 类型应位于与类型同名的文件中。 |
| FFS0041 | 不要在测试程序集中使用 System.Console。 |
| FFS0042 | 不要在 ``SuppressMessage`` 的理由中包含 TODO。 |
| FFS0043 | 不要使用 ``StringComparer.InvariantCulture``,请改用 ``StringComparer.Ordinal``。 |
| FFS0044 | 不要使用 ``StringComparer.InvariantCultureIgnoreCase``,请改用 ``StringComparer.OrdinalIgnoreCase``。 |
| FFS0045 | 不要使用 ``StringCompaison.InvariantCulture``,请改用 ``StringCompaison.Ordinal``。 |
| FFS0046 | 不要使用 ``StringCompaision.InvariantCultureIgnoreCase``,请改用 ``StringCompaision.OrdinalIgnoreCase``。 |
| FFS0047 | 不要使用 ``StringCompaision.CurrentCulture``,请改用 ``StringCompaision.Ordinal``。 |
| FFS0048 | 不要使用 ``StringCompaision.CurrentCultureIgnoreCase``,请改用 ``StringCompaision.OrdinalIgnoreCase``。 |
## 更新日志
查看 [更新日志](CHANGELOG.md)
标签:CI, DateTime.Now, DateTime.Today, DateTime.UtcNow, dotnet, FunFair, IDateTimeSource, 代码分析规则, 代码审查, 代码治理, 代码规范, 多人体追踪, 安全专业人员, 开源框架, 技术债务, 持续集成, 服务器端开发, 服务端, 规则检查, 重构, 错误基检测, 静态代码分析