您的位置:首页 >聚焦 >

环球微资讯!一款不错的开源的代码审查辅助工具

2022-09-17 15:53:34    来源:程序员客栈

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还能处理更复杂的多行消息。

$cattestdata/sbt.in[warn]/path/to/F1.scala:203:localvalinmethodfisneverused:(warningsmaple3)[warn]valx=1[warn]^[warn]/path/to/F1.scala:204:localvalinmethodfisneverused:(warningsmaple2)[warn]valx=2[warn]^[error]/path/to/F2.scala:1093:error:value++isnotamemberofInt[error]valx=1++2[error]^[warn]/path/to/dir/F3.scala:83:localvalinmethodfisneverused[warn]valx=4[warn]^[error]/path/to/dir/F3.scala:84:error:value++isnotamemberofInt[error]valx=5++2[error]^[warn]/path/to/dir/F3.scala:86:localvalinmethodfisneverused[warn]valx=6[warn]^$errorformat"%E[%t%.%+]%f:%l:error:%m""%A[%t%.%+]%f:%l:%m""%Z[%.%+]%p^""%C[%.%+]%.%#""%-G%.%#"

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

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

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

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

关键词: 代码审查 静态分析 基本配置

相关阅读