に参加して、VS Code の AI 支援開発について学びましょう。

リッチなコードナビゲーション体験を初公開

2018年12月4日 ジョナサン・カーター、@lostintangent

プルリクエストは、何百万もの開発者にとって毎日不可欠なコラボレーションツールであり、非同期のコードレビューや、チームおよびオープンソースコミュニティ間での知識の共有を促進しています。この広範な有用性と普及により、PRレビューワークフローのいかなる進歩も、開発者の生産性、製品の品質、リリース速度に大きな影響を与える可能性があります。

9月には、GitHubとともに、GitHub Pull Requests拡張機能を発表しました。これにより、開発者は、慣れ親しんだ高度にカスタマイズされたエディター内で、つまりコードを書くのと同じ場所でソースコードをレビューできるようになりました。本日、リッチなマルチリポジトリコードナビゲーションのサポートにより、エディター内PRレビューをさらに強化する新しい体験の先行公開を共有できることを嬉しく思います。

表層的なレビューにさようなら

プルリクエストを徹底的にレビューするには、その変更のコンテキストと、それがより広範なコードベースにどのように影響するかを理解する必要があります。今日、多くの開発者はブラウザで「軽量なレビュー」を行っています。これは非常に便利なワークフローを提供しますが、必要なコンテキストを見落としがちです(たとえば、「この変更はAPIの利用者を壊さないか?」など)。GitHub Pull Requests拡張機能は、開発環境の機能を利用してレビュー対象のソースコードを構築・ナビゲートできるようにすることでその体験を改善しましたが、それでもブランチをローカルにチェックアウトし、必要なプラットフォームSDKと言語拡張機能をインストールする必要があります。すべてのPRに対してこれを行うには、かなりの時間とコンテキスト切り替えが必要になり、リモートPRを迅速にレビューする利便性と、ローカルエディターでレビューする強力さのどちらかを選択しなければなりません。開発者はその両方を持つべきだと考えています

私たちが構築しているリッチなコードナビゲーション体験は、開発者が開発環境内から(Visual StudioおよびVisual Studio Code拡張機能経由で)関心のあるプルリクエストを追跡し、いつでもリモートホストされているPR間での変更を、それらのトピックブランチをローカルにチェックアウトすることなくシームレスにナビゲートできるよう支援します。具体的には、GitHub Pull Requestsビューから開いたファイルを、他のエディター体験を動かすのと同じコードナビゲーション機能(例:ホバー情報、定義へ移動、すべての参照を検索)で強化しますが、この場合は、完全にクラウドによって提供されます。これにより、チームの生産性が向上し、表層的なレビューが過去のものになると信じています。

Navigating a csharp PR

C#拡張機能や.NETがインストールされていないMac上でC#ベースのPRをナビゲートしています。

Navigating a C++ PR

C++拡張機能がインストールされていないMac上でC++ベースのPRをナビゲートしています。

Navigating a Java PR

Java Language Support (redhat.java) 拡張機能がインストールされていないMac上でJavaベースのPRをナビゲートしています。

すべてのものをナビゲートする

この体験により、レビューしているファイル内、PRの一部として変更された他のファイル内、および同じリポジトリ内の任意のファイル内で定義されているシンボル(例:クラス、関数、プロパティ)にナビゲートできます。このように、コードベース全体のコンテキストで変更を理解する能力は、PRのスコープやローカル環境によって制限されません。

さらに、レビュー中のPRが外部リポジトリの依存関係を使用している場合、または外部リポジトリのコードによって使用されるAPIを含んでいる場合でも、それらのソースに直接ナビゲートできます。これにより、アプリケーションがバージョン管理でどのように構成されているかに関係なく、変更の影響を完全に、そしてより重要なことに、迅速に評価できます。これは、特に多くのチームがマルチリポジトリアプリケーション/マイクロサービスを構築し、OSSに大きく依存しているため、非常に強力な機能であると信じています。

Navigating into a Mobx repo

observable関数への外部参照から、GitHub上のMobXリポジトリに直接ナビゲートしています。

コミュニティに焦点を当てたデザイン

舞台裏では、この体験はLanguage Server Protocol (LSP) への追加によって実現されています。LSPは、Visual StudioやVisual Studio Codeなど、数多くのツール全体で言語サポートの基盤となっています。この提案はLanguage Server Index Format (LSIF、「else if」のように発音) と呼ばれ、言語サーバーが実行時のインテリジェンスを永続化する手段を提供し、それによって後で大規模なLSPリクエスト(例:ホバーや定義へ移動)に応答するために使用できます。さらに、LSIFが定義するデータモデルにより、リポジトリをソースコードの豊富なグラフ、およびそのコードが外部リポジトリと持つ関係によって表現できます。

このサービスを構築する一環として、さまざまな言語(TypeScriptJava、C++、C#)のLSIFサポートの実装を開始し、これまでの結果に非常に興奮しています。しかし、この取り組みが成功するためには、標準と追加の言語実装の両方でコミュニティと協力することが不可欠です。LSIFの詳細について学び、今後の議論に貢献するには、LSIF仕様のドラフトをご覧ください。

皆様からのフィードバックが必要です!

リッチなコードナビゲーション体験のこの最初の公開を共有できることを嬉しく思います!これが実際に試せるようになるまでにはまだ多くの作業が残っていますが、私たちが取り組んでいることについてコミュニティとのオープンな対話を始めたかったのです。私たちのチームとチャットし、潜在的なプレビューに参加することに興味がある場合は、こちらからサインアップできます。近い将来、さらなる更新を共有できることを楽しみにしています!

楽しいレビューを!

ジョナサン、@lostintangent

© . This site is unofficial and not affiliated with Microsoft.