⟵ 春水煎茶 · 王超的个人博客

用 nvim diffview 做 code review

这是一篇分享我如何在命令行下做 code review 的短文。

我希望可以在命令行下完成 code review, 在浏览器、GUI 中看代码总归没有 vim 中舒服。

主要用到两个工具:

看代码这事总归是编辑器更在行

比如说,用 vimdiff 来 review 代码改动时, 我们可以跳转定义、切分窗口、缩放窗口、就地添加修改意见等等, 方便做比对、检查确认,总之可以享受编辑器中已有的一切功能。

而且,一些改动在浏览器里是 “看不到” 的,比如 ^M、空格和 tab 等。 相比之下,浏览器里 review 就 “蹩脚” 的多了。

diffview 插件给 vimdiff 添加了一个侧边栏, 以一览所有改动点

nvim 中打开 diffview 的图示

gh 是 Github 官方的命令行客户端,它可以把 Pull Request 抓下来, 也可以提交 code peview 结果、创建 Pull Request 等,而不必离开终端

结合二者,我的 code review 工作流大概是:

  1. 抓取远程 Pull Request , 切换到新分支:

    gh pr checkout <pr-number>
    
  2. 打开 nvim,进入 diffview, 和主分支 master 进行比较:

    nvim -c "DiffviewOpen master... --imply-local"
    
  3. Review 代码,同时直接在代码中编辑修改意见。

    // REVIEW: 修改意见 XXXXX
    if (ch) dst[0] |= ((ch >> si << di) & ~(0xff << di << c));
    
  4. 将修改意见,提交到 PR 评论。

    先将 diff 复制到剪切板:

    git diff | pbcopy
    

    再提交到评论:

    gh pr comment -e
    

    -e 参数以调起编辑器写 PR 评论,将改动内容粘贴到一个代码块内:

    LGTM, 但是有一些小意见:
    
    ```diff
    diff --git a/lib/c/bitproto.c b/lib/c/bitproto.c
    index d5d0d8b..ce73a66 100644
    --- a/lib/c/bitproto.c
    +++ b/lib/c/bitproto.c
    @@ -272,6 +272,7 @@ void BpCopyBufferBits(int n, unsigned char *dst, unsigned char *src, int di,
                 // benchmark on stm32 seems performance is improved by 2us by adding
                 // an if statement that skip the Zero byte.
                 unsigned char ch = src[0];
    +            // REVIEW: 修改意见 XXXXX
                 if (ch) dst[0] |= ((ch >> si << di) & ~(0xff << di << c));
             }
    ```
    

    如果标注很多,可以考虑直接对此 PR 远程分支提一个新 PR,其改动项就是 review 内容。

    我其实觉得这个思路蛮好,也以提新 PR 的形式来 Review.

    git add .
    git commit -m "Review comments"
    gh pr create
    

稍微一提,gh 支持扩展,我在用的一个是 gh prs, 此自定义命令会调用 fzf 来模糊搜索所有 pull requests, 选中后即切换到对应分支。

gh prs 的效果

(完)

王超 ·
评论 · 首页 · 订阅