一款不错的开源的代码审查辅助工具

知识小集

共 4152字,需浏览 9分钟

 ·

2022-09-17 11:55

reviewdog

地址:https://github.com/reviewdog/reviewdog

⭐️:5.5k

语言:Go

在做代码审查时,我们一般会使用工具来自动检测到的错误或样式问题,如我们可以使用各种 linter 和静态代码分析工具来检测本地机器、编辑器、CI 服务中的此类问题。但静态分析工具可能会有大量误报,我们很难从混乱的分析结果中找到真正的问题。一些 linter 支持通过代码注释的减少这种误报,但这又可能会弄乱我们的代码。

一种解决方案是每次提交代码时,只针对更改的地方做分析,并产出评审注释。这样我们能集中注意力,去发现真正的问题。而 reviewdog 正是提供这样一个能力的工具。

reviewdog 提供了一种将代码审查评论发布到代码托管服务(例如 GitHub)的方法,该方法可以轻松地与任何 linter 工具集成。它使用 lint 工具的输出,如果发现与要审查的补丁不同,则将它们作为评论发布。reviewdog 还支持在本地环境中运行以通过 diff 过滤 lint 工具的输出。


可以在本地运行 reviewdog 以按差异过滤结果,也可以在 CI 服务器中运行以发布评审报告。

可以将 GitHub API 令牌存储在 REVIEWDOG_GITHUB_API_TOKEN 环境变量中。以下是 CircleCI 的基本配置

test:
pre:
- go get github.com/haya14busa/reviewdog/cmd/reviewdog
override:
- >-
go tool vet -all -shadowstrict . 2>&1 | reviewdog -f=govet -ci="circle-ci"

为了支持任何编译器、linter 或任何工具,reviewdog 使用了 Vim 的“errorformat”功能(在 Go 中移植)。例如,如果结果格式是 {file}:{line number}:{column number}: {message},errorformat 应该是 %f:%l:%c: %m

errorformat 还能处理更复杂的多行消息。

$ cat testdata/sbt.in
[warn] /path/to/F1.scala:203: local val in method f is never used: (warning smaple 3)
[warn]         val x = 1
[warn]             ^
[warn] /path/to/F1.scala:204: local val in method f is never used: (warning smaple 2)
[warn]   val x = 2
[warn]       ^
[error] /path/to/F2.scala:1093: error: value ++ is not a member of Int
[error]     val x = 1 ++ 2
[error]               ^
[warn] /path/to/dir/F3.scala:83: local val in method f is never used
[warn]         val x = 4
[warn]             ^
[error] /path/to/dir/F3.scala:84: error: value ++ is not a member of Int
[error]         val x = 5 ++ 2
[error]                   ^
[warn] /path/to/dir/F3.scala:86: local val in method f is never used
[warn]         val x = 6
[warn]             ^
$ errorformat "%E[%t%.%+] %f:%l: error: %m" "%A[%t%.%+] %f:%l: %m" "%Z[%.%+] %p^" "%C[%.%+] %.%#" "%-G%.%#" < testdata/sbt.in
/path/to/F1.scala|203 col 13 warning| local val in method f is never used: (warning smaple 3)
/path/to/F1.scala|204 col 7 warning| local val in method f is never used: (warning smaple 2)
/path/to/F2.scala|1093 col 15 error| value &#43;&#43; is not a member of Int
/path/to/dir/F3.scala|83 col 13 warning| local val in method f is never used
/path/to/dir/F3.scala|84 col 19 error| value &#43;&#43; is not a member of Int
/path/to/dir/F3.scala|86 col 13 warning| local val in method f is never used

理解整个 errorformat 功能有点困难,但在大多数情况下,我们所需要知道的只是基本的简单项目(%f:文件,%l:行号,%c:列号,%m:消息)。

最重要的是,reviewdog ( haya14busa/errorformat ) 为主要工具提供了预定义的错误格式,因此在大多数情况下我们不需要编写错误格式。可以在此处查看预定义的错误格式或 reviewdog -list

reviewdog 可以使用任何工具自动审查我们的代码,还可以在本地运行以加快开发速度。reviewdog 帮助我们引入严格的 lint 工具(或经常报告误报结果的工具),它仅针对 Pull-Request 之类的差异检测,而不是整个代码库。

reviewdog 目前支持多种语言和工具,可以参考相关 repo 以按自己的需求来配置。

浏览 161
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报