VS Codeのエージェントモードを拡張するには、を試してください!

豊富なコードナビゲーション体験を初公開

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がインストールされていない状態でも、macOSでC#ベースのPRをナビゲート。

Navigating a C++ PR

C++拡張機能がインストールされていない状態でも、macOSでC++ベースのPRをナビゲート。

Navigating a Java PR

Java Language Support (redhat.java)拡張機能がインストールされていない状態でも、macOSでJavaベースのPRをナビゲート。

すべてをナビゲート

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

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

Navigating into a Mobx repo

GitHub上のMobXリポジトリへ、そのobservable関数への外部参照から直接ナビゲート。

コミュニティ重視のデザイン

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

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

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

豊富なコードナビゲーション体験の初の公開を共有できることを嬉しく思います!これは皆様に試していただけるものになるまでにまだ多くの作業が残っていますが、私たちが取り組んでいることについてコミュニティとオープンな会話を始めたいと思いました。私たちのチームと話したり、今後のプレビューに参加したりすることに興味がある場合は、こちらからサインアップできます。近い将来、さらなるアップデートを共有できることを楽しみにしています!

楽しくレビューを!

ジョナサン、@lostintangent