deanthecoder/ReviewG33k

GitHub: deanthecoder/ReviewG33k

一款面向 C#/.NET 项目的轻量级桌面代码审查工具,通过数十项针对性检查规则帮助开发者快速发现代码质量问题。

Stars: 1 | Forks: 0

ReviewG33k Logo

# ReviewG33k ReviewG33k 是一款轻量级桌面应用程序,用于快速、实用的代码审查。它主要针对 C#/.NET 项目,并对诸如 C/C++ 探索及轻量级检查等提供少量的通用源文件支持。为其提供一个 Bitbucket pull request 或本地代码库,让它扫描代码,然后直接跳转到对应的文件。 ![主窗口截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b5de9114f1171251.png) ## 其他窗口 ### 审查结果 主要的审查工作区:分类发现、源码预览、快速修复、导出以及一键打开操作。 ![审查结果截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/931aa67f95171304.png) ### 问题分类 带有实时分类切换功能的紧凑饼图视图,方便您在审查时隐藏整个问题类型。 ![问题分类截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3fb4577e2b171314.png) ### 审查设置 用于未来扫描的持久化问题类型偏好设置。使用主窗口右上角的齿轮按钮来选择 ReviewG33k 应该运行的检查,例如当缺失测试建议或公共参数守卫提示不适合您的审查风格时,可以将其禁用。 ## 功能特性 - 通过粘贴或拖入 PR URL 来审查 **Bitbucket pull request**。 - 审查**本地已提交的更改**、**本地未提交的更改**、**整个本地代码库**,或没有 Git 的**整个本地文件夹**。 - 根据所需的扫描彻底程度,在**更改的行**和**完整修改的文件**之间进行切换。 - 准备隔离的审查 worktree,使您正常的工作树保持原样。 - 查看分组到清晰类别中的发现,例如 `Correctness`、`Threading`、`UI` 和 `Repo Hygiene`。 - 在 **VS Code**、**Visual Studio**、**Rider**、您的**文件浏览器**中打开发现,或将位置复制到**剪贴板**。 - 应用支持的快速修复,导出发现,生成 Codex 提示,以及有选择地发布 Bitbucket PR 评论。 - 使用分类细分窗口按类别实时过滤结果。 ## 工作原理(宏观层面) 1. 选择一种审查模式。 2. ReviewG33k 收集相关文件或 diff。 3. 它对这些代码运行针对性的检查。 4. 您对结果进行审查、过滤、修复、导出、打开或评论。 ## 快速开始 - **Pull request 审查**:选择一个代码库根目录,粘贴或拖入 PR URL,然后点击 **Review PR**。 - **本地已提交审查**:选择 **Local Committed Changes**,选取一个代码库和基础分支,然后点击 **Review Local**。 - **本地未提交审查**:选择 **Local Uncommitted Changes**,选取一个代码库,然后点击 **Review Local**。 - **整个代码库审查**:选择 **Entire Local Repository**,选取一个代码库,然后点击 **Review Local**。 - **整个文件夹审查**:选择 **Entire Local Folder**,选取任何源代码文件夹,然后点击 **Review Local**。 - **问题类型偏好设置**:点击主窗口右上角的齿轮按钮,启用或禁用检查,然后保存。更改将应用于下次扫描。 ## 命令行用法 ReviewG33k 也可以在没有 UI 的情况下运行,用于本地审查自动化,包括从 Codex 或脚本执行编码后的检查。 ``` ReviewG33k --cli --repo --mode uncommitted ReviewG33k --cli --repo --mode committed --base main ReviewG33k --cli --repo --mode tree ``` 也支持 Windows 风格的开关: ``` ReviewG33k /cli /repo /mode uncommitted ``` 模式: - `uncommitted` 审查工作树相对于 `HEAD` 的更改。 - `committed` 审查已提交的本地更改相对于 `origin/` 的差异。 - `tree` 审查本地代码库中所有可分析的文件。 退出代码: - `0`:没有发现。 - `1`:报告了发现。 - `2`:审查失败。 运行 `ReviewG33k --help` 或 `ReviewG33k /?` 查看用法。 ## 构建和运行 前置条件:.NET 8 SDK。 可选:`git`,用于 Bitbucket pull request 和基于 Git 的本地审查模式。 可选工具: - VS Code `code` CLI,用于在 VS Code 中打开发现 - Visual Studio、Rider 或桌面文件浏览器,作为替代的打开目标 ``` dotnet build ReviewG33k.sln dotnet run --project ReviewG33k.csproj ``` ## 支持的检查 所有检查默认启用。审查设置对话框允许您禁用个别问题类型,而无需更改在已打开的结果窗口中使用的实时类别过滤器。 ### 发现分类(结果视图) ReviewG33k 使用以下类别之一标记每个发现: - `Correctness` - `Threading` - `Performance` - `Resources` - `API/Design` - `Readability` - `Maintainability` - `Testing` - `Documentation` - `UI` - `Repo Hygiene` ### 异步和线程 | 检查 | 标记内容 | | --- | --- | | Async void (非事件处理程序) | 可能会掩盖错误的 `async void` 方法。 | | Async 方法命名 | 不以 `Async` 结尾的 `async` 方法。 | | Task.Run(async ...) | 包装在 `Task.Run(...)` 中的异步工作,可能是不必要或有风险的。 | | 未观察到的 task 结果 | 结果被忽略的即发即弃 task 调用。 | | Thread.Sleep 使用 | 在新增代码路径中的阻塞式 sleep。 | | Lock 目标 | `lock(this)` 或对可能为公共对象的锁定。 | ### 异常和可靠性 | 检查 | 标记内容 | | --- | --- | | 空 catch 块 | 没有实际处理逻辑的 `catch` 块。 | | 空方法 | 没有实现语句的新增普通方法。 | | 吞噬异常的 catch 块 | 静默消费异常的 `catch` 块。 | | catch 块中的 `throw ex;` | 丢失原始堆栈跟踪上下文的重新抛出模式。 | | `IDisposable` 未 dispose | 创建了但没有明确 dispose 的 Disposable 对象。 | | 没有 `IDisposable` 的 Dispose 方法 | 定义了 `Dispose()` 但未实现 `IDisposable` 的类型。 | | 空 Dispose 方法 | 没有清理语句的 `Dispose()` 方法。 | | 构造函数事件订阅生命周期 | 订阅了事件但没有明确取消订阅/disposal 生命周期的构造函数。 | | 多次枚举 | 意外地重新枚举延迟的 `IEnumerable` 值。 | | 急切具体化的 IEnumerable 返回 | 返回 `ToList()`/`ToArray()` 结果而不是延迟序列的 `IEnumerable` 方法。 | | LINQ Count 与零比较 | 在 `Any()` 更清晰且成本更低的情况下,对序列使用 `Count()`/`LongCount()` 进行零检查。 | | 属性 setter 忽略值 | 不读取隐式 `value` 参数的 setter。 | | 公共方法参数守卫 | 新增公共方法中缺少 null 守卫。 | | 文件输出的数字格式 | 转换为文本用于文件写入的 `double`/`float`/`decimal` 没有 `InvariantCulture`。 | ### 设计和可维护性 | 检查 | 标记内容 | | --- | --- | | 属性可以是自动属性 | 可以简化为自动属性的冗余属性模式。 | | 私有只读获取属性应为字段 | 更适合表示为字段的私有只读自动属性。 | | 私有属性应为字段 | 实际上是字段包装器的简单私有属性。 | | 私有字段可为 readonly | 仅在构造期间写入的私有字段。 | | 仅在构造函数中使用的私有 readonly 字段 | 引用仅限于构造函数设置,可能成为局部变量的私有 readonly 字段。 | | 方法可为 static | 不使用实例状态的实例方法。 | | 局部变量可为 const | 从不改变且可安全设为 `const` 的局部值。 | | 重复的代码块 | 在忽略注释和 `using` 行之后,与现有代码库代码完全匹配的新增代码块。 | | 具有常量返回值的 Bool 方法 | 控制流始终返回相同字面值的非私有 `bool` 方法。 | | 具有常量返回值的私有 Bool 方法 | 调用方可能被简化的私有 `bool` 方法,因为它们始终返回相同的字面值。 | | 未使用的局部变量 | 已声明/赋值但从未读取的局部变量。 | | 未使用的方法参数 | 从未被新增普通方法读取的方法参数。 | | 每个文件多个类 | 定义了多个类的文件(推荐每个文件一个类)。 | | 源文件名不匹配 | 文件名与所包含类型不匹配的单类型 `.cs` 文件。 | | 冗余的自查找 | 不必要地从对象自身解析对象(或等效的冗余查找)。 | | 公共可变静态状态 | 暴露的可变静态字段/属性。 | | 未使用的私有成员 | 从未使用过的新增私有代码。 | | 未使用的 `using` 指令 | 从未被引用的新增导入。 | ### 可读性和风格 | 检查 | 标记内容 | | --- | --- | | 方法之间缺少空行 | 挤在一起降低可读性的方法块。 | | 大括号对之间的空行 | 连续仅含大括号的行之间的空行,如 `}` ... `}` 或 `{` ... `{`。 | | 高参数数量 | 参数过多的方法/构造函数。 | | 连续的位置 bool 参数 | 带有连续未命名 `true`/`false` 字面值的调用(为清晰起见,建议使用命名参数)。 | | 连续的位置 null 参数 | 带有连续未命名 `null` 字面值的调用(为清晰起见,建议使用命名参数)。 | | Lambda 可为方法组 | 可以被简化的传递 lambda,如 `() => Guid.NewGuid()` 或 `x => Normalize(x)`。 | | 泛型类型名称后缀 | 不遵循预期后缀约定的泛型类型名称。 | | If/else 大括号一致性 | `if` 和 `else` 块之间大括号风格不匹配。 | | 不必要的 if/else 大括号 | 在简单的单行分支周围添加的额外大括号。 | | 过大的构造函数 | 执行过多内联设置工作的构造函数。 | | 布尔字面值比较 | 诸如 `== true` / `== false` 可以被简化的比较。 | | 局部变量使用字段样式前缀 | 使用诸如 `m_foo` 或 `_foo` 等字段样式前缀命名的局部变量。 | | 不必要的强制转换 | 不改变类型或行为的强制转换。 | | 不必要的枚举成员值 | 仅匹配默认顺序编号的显式枚举值。 | | 不必要的逐字字符串前缀 | 没有使用转义好处的 `@` 字符串前缀。 | | 对同一目标的重复字符串连接 | 在一个块中对同一字符串目标进行 4 次以上的连接(考虑使用 `StringBuilder`)。 | ### 测试和文档覆盖 | 检查 | 标记内容 | | --- | --- | | 缺少 XML 文档 | 没有 XML 文档的新增公共类型。 | | 空 XML 文档内容 | 存在但未包含有意义内容的 XML 文档标签。 | | 缺少单元测试更新 | 没有相应测试更改的新增生产更改。 | | 缺少新增公共方法的测试 | 没有测试覆盖更改的新增公共方法。 | | 新项目缺少 README | 没有附带 README 的新增项目。 | | 新源文件缺少免责声明/文件头 | 可能需要标准文件头/免责声明的新增源文件。 | ### 本地化 (RESX) | 检查 | 标记内容 | | --- | --- | | 缺少区域设置键 | 缺少基础资源中存在的键的本地化 `.resx` 文件。 | | 意外的额外区域设置键 | 包含基础资源中不存在的键的本地化 `.resx` 文件。 | | 空的翻译值 | 翻译文本为空/空白的本地化 `.resx` 条目。 | | 值中的边界空白 | 更改条目中带有意外前导/尾随空格的资源值。 | | 美式/英式英语混用 | 中性 `.resx` 文件中混合了美式和英式拼写,程度足以显得不一致。 | | `en-GB` 中的美式英语 | 包含明显美式拼写(如 `color`/`analyze`)的英式区域文件。 | | `en-US` 中的英式英语 | 包含明显英式拼写(如 `colour`/`analyse`)的美式区域文件。 | ### 框架和抑制 | 检查 | 标记内容 | | --- | --- | | 缺少类型化绑定上下文 (Avalonia) | 在预期有类型化上下文的地方没有类型化上下文的 XAML 绑定。 | | 布局容器上的固定尺寸 | 将宽度/高度应用于期望灵活性的多子布局容器。 | | 单子包装容器 | 仅包装一个子项且未添加有意义行为的父容器。 | | 嵌套的同面板包装器 | 相同面板类型的冗余嵌套容器。 | | 空的多子容器 | 声时没有子元素的多子容器元素。 | | 警告抑制 | 新增的 `#pragma warning disable` 或 `[SuppressMessage]` 抑制。 | | 文件编码更改 | 检测到的编码发生更改的文本文件。 | | 文件换行符样式更改 | 换行符样式在 LF、CRLF、CR 或混合样式之间发生更改的文本文件。 | | 仅格式化更改 | 仅空格格式发生更改的生产性 C# 文件。 | | 仅尾随空格更改 | 其 diff 似乎仅由尾随空格更改组成的文件。 | ## 许可证 基于 MIT 许可证授权。详情请见 [LICENSE](LICENSE)。
标签:Bitbucket, C/C++, Codex提示, Correctness, DNS解析, Git, Pull Request, Repo Hygiene, Rider, SDLC, Threading, Visual Studio, Visual Studio Code, VS Code, 中间件漏洞, 事务性I/O, 代码优化, 代码分析工具, 代码安全, 代码审查工具, 代码审查自动化, 代码审查软件, 代码扫描器, 代码规范, 威胁情报, 安全专业人员, 开发者工具, 开发辅助工具, 开源项目, 快速修复, 数据管道, 文件浏览器, 本地仓库扫描, 桌面应用, 测试发现, 漏洞枚举, 系统独立性, 编程工具, 网络安全研究, 自动化审查, 软件工程, 软件开发生命周期, 远程代码执行, 错误基检测, 静态代码分析, 项目扫描