あなたが知識を失うプル要求を合併するとき


それが合併されるとき、プル要求のコメントと議論に何が起こりますか?その知識はチームにとって貴重なものではないか.なぜそれは簡単に将来のプル要求にアクセスできませんか?
プルリクエスト(prs)はコードベースへの変更を提案する主流の方法である.プル要求の周りで最も重要な機能の1つは、開発者が検査し、提案された変更についてコメントできるように、コードのレビューを実行する機能です.
頻繁に、これらのコメントの知識は、チームに非常に貴重です.コードベースと関連技術に精通しているレビュアーは、悪いパターンに気づき、最適化を示唆し、チームのガイドラインやベストプラクティスなどを実施する.
しかし、GitHub、GitLab、またはBitbucketのプル要求をマージするとすぐに、すべての情報は閉じられたPRSのバッグに失われます.
コードレビューでコメントを書くとき、我々はすべてそのD ' j j Vu感じを持ちました:「私は、すでにこのコメントを書きませんでしたか?」PRを準備するとき、時々、我々にもその感覚がありますまたはより良いまだ:“誰も前にこれを考えていない?”
つのシナリオを見てみましょう.

1 .幅広い聴衆に役立つ知識


このコードベースに関係しない開発者に有益な知識.例えば、this comment 同様のコードを変更する他の開発者にとって有用です.

Discussionkgabryjeapache / superset 「」feat(native-filters): add search all filter options #14710

2 .設計決定に関する知識


多くの貢献者を持つチームは、デザイン決定の文脈の欠如に関連する問題に苦しむことができます.例えば、前のプル要求に関する議論に関して決定がされたとき.以下の議論を考えてください.

Discussion うんとhalspang ○○artursouzadapr / dapr 「」Write reminders in multiple partitions #3297
このPRが合併されると仮定すると、将来誰かがこのコードを修正するとき、この議論を取り戻すのに役に立つでしょう.この場合、それがこの人が退化する経路の支持を始めるならば、それは特に関連しています.

3 . D . J . Vu Vuのレビュー


アクティブレビューアであるシニアデベロッパーも、我々がレビューD ' j J Ver . Vusと呼ぶものを経験します.これらは、このように異なるPRSで同様のコメントを繰り返している状況です.

Commenttimotheecournim-lang / Nim 「」oids: switch from PRNG to random module #16203
これらの状況はまた、コード内のドキュメントに意味をなさないいくつかの隠された仮定がある場合に発生します.
我々はそれを維持することなく、将来のPRSに過去のレビューからのコメントを再利用することができればいいですか?

レビューパッドに入る


ReviewPadは、これらの意味オブジェクトに対するコメントのようなプル要求と関連メタデータの変化の意味的なdiffsを構築します.これはgithub、gitlab、bitbucketなどの既存のコードホストの現在の振る舞いからの大きなシフトです.彼らは特定のGit diffのファイルの行にコメントを関連付ける.
ReviewPadを表示しますWeb Crawler リンクを利用した試みGitHub repository . GOのツアーのこの運動では、我々は偽のWebクローラの最初の実装を与えられている-エクササイズはそれを並列化し、同じURLを2回フェッチを防ぐことです.

意味論的GIT拡散


最初のステップとしてReviewpad この最初の実装でプルリクエストを作成します.

ReviewPadインターフェイスpull request レビューと合併後
ReviewPadはリレーショナル静的解析を行います[1] and [2] ) 意味のdiffsを構築するためにプル要求に関連しているgit diffの上に.これらの意味的なdiffsは、我々がReviewPadで探検木と呼ぶものを形成します.

探検木pull request
探索ツリーは修飾ファイルの注釈付きファイルツリーです.変更されたファイルごとに、変更の意味付きツリーを示します.例えば、ファイルfakeFetcher.go 提示されるようにGitHub 全体のスキャンが必要な主要なシンボルを理解する必要がありますfakeFetcher , 2 )構造fakeResult 2つのフィールドでbody and urls 3 )メソッドFetch . メソッドの注意Fetch は、子型fakeFetcher 受信タイプです.現在、我々の分析者はタイプと方法に集中しますfetcher . シンボルの先頭の色は、変更の種類を示します:緑、追加のための赤、削除のための赤と変更のための黄色.
説明と一般的な会話の左側に探索ツリーを示し、開発者がコードの変更についての説明と議論に迅速に対応できるようにします.
探索ツリーの各要素はgit diffの表現にクリック可能です.例えば、fakeFetcher typeはユーザをbeginning of the symbol in the diff :

探索木からコードdiffへのナビゲーション
注:それらのファイルの横にある色のアイコンに気づいたgo.mod – これは、ファイルが自動的にレビューモードから隠されていることを意味します.各ReviewPadユーザーはファイルを除外するために自分のレビュー設定で自分のファイルビューを微調整することができます.
この広報ではfirst review コードの一部を文書化する.例えば、元のコードCrawl
// Crawl uses fetcher to recursively crawl
// pages starting with url, to a maximum of depth.
func Crawl(url string, depth int, fetcher Fetcher) {
    // TODO: Fetch URLs in parallel.
    // TODO: Don't fetch the same URL twice.
    // This implementation doesn't do either:
...
}
私はcomment コードdiffコメントとしての機能についてこれらのレビューコメントはReviewPadによって維持された知識ベースに挿入されます.

クロール関数の差分コメント
探索ツリーのコメントは、Crawl シンボル.これは、コメントがシンボルの定義で行われたことを意味します.

過去のレビューからのコメント


最初のコードのPRがスカッシュと合併された後、私はnew PRsolution Githubユーザーによって発表されますharryhare .

ReviewPadインターフェイスpull request 最初の解決策で
探索木は再びAの導入を含む解決の概要を示しますSafeCounter 構造を持つ構造体v URLが訪れたかどうかを調べるには、mutexmux と方法checkvisited URLが既に訪れたかどうかを調べます.
解決策の残りは、機能への変更を伴いますCrawl and main URLを並列に取得するにはにCrawl メソッドは、ReviewPad過去のPRからのコメントは、メソッドを文書提示します.この方法では、開発者はこのメソッドを変更した以前のPRSからの議論を取得できます.

前のプル要求からのコメントによるコードdiffビュー
ユーザーレビューは、checkvisited コミットに固定されている[fix from review](https://github.com/reviewpad/dejavus/pull/3/commits/a629a38fddad2305a13f2ce07da6a001c263920b) .
エーfinal review コード内のTodosを削除する要求をPRに承認します.
決勝でcommit このPRの中で、コードコメントとしてソリューションへの参照を追加しますCrawl ToDoSのメソッドを削除します.

すべての変更のためのReviewPadインターフェイスpull request
機能のホバリングCrawl 探索ツリーでは、読みやすさのためにこの関数に関連付けられたコードドキュメントが表示されます.

コメントを追跡し、時間をかけて変更


この時点であなたは不思議に思うかもしれません.
  • コメントが正確に前のものでなかったPRでなされるならば、何が起こりますか?
  • コードをリファクタリングし始めるとどうなりますか?
  • これらの質問に答えるために、我々の2つの開いたPRSの上で行きましょうproject .
    第1は待ち行列を使用するもう一つのgithubユーザによって提案された改善です.

    Pull request 待ち行列を用いた改良提案
    このプル要求で示されるコメントは、彼らの時間差に関係なく最初のpr . reviewpadトラックコメントでしたものでした.以下の例でPR エラー/エラーがちなプロジェクトから:

    レビューパッドモードpull request Googleのエラーを起こしやすいプロジェクトの.あなたはgithubでそれをチェックすることができますhere .
    2020年9月にPRをオープンし、2020年1月にコメントを得た.
    2番目のオープンpull request リファクタリングアナライザのベータ版を示します.

    Pull request リファクタリングで
    このPRでは、関数のシグネチャを変更するCrawl 変数の名前変更url to reqUrl そして、2番目はファイルをリネームします.
    ReviewPadは、それが同じ機能であると理解して、最初のPRでなされるコメントを提示します.

    クール.どうやってこれを自分でチェックするのですか?


    我々は、利用できるReviewPadのパブリックベータ版がありますhttps://reviewpad.com/get-started/ . 新しいアカウントを作成し、一度ログインする必要がある場合は、コードホストに接続するには、次のページが表示されます.

    ReviewPadでコードホストページに接続してください
    あなたはOAuthアプリまたは手動でGithubに接続することができますadd a personal access token . OAuthは、パブリックリポジトリに対して読むことができるように最小限のスコープを必要とします.
    そして、それはあなたです- ReviewPad公共のリポジトリにスピンを与えることができるでしょう!我々は今後数日間でより多くの公共リポジトリを追加されますcommunity Slack 要求で!

    参考文献


    [ 1 ] :Cartesian hoare logic for verifying k-safety properties .
    [ 2 ] :Verified three-way program merg e .