首次體驗豐富的程式碼導航
2018年12月4日 Jonathan Carter, @lostintangent
拉取請求是數百萬開發者日常使用的關鍵協作工具,它促進了非同步程式碼審查以及團隊和開源社群之間的知識傳播。由於其廣泛的實用性和普及性,PR 審查工作流程的任何改進都可能對開發人員的生產力、產品質量和釋出速度產生重大影響。
9月,我們與 GitHub 共同釋出了 GitHub Pull Requests 擴充套件,它使開發人員能夠在他們編寫程式碼的同一個地方進行原始碼審查:在他們熟悉且高度定製的編輯器中。今天,我們很高興能分享一個新體驗的預覽,它將透過支援豐富的、多倉庫程式碼導航,進一步增強編輯器內的 PR 審查。
告別膚淺的審查
要徹底審查一個拉取請求,你需要理解其變更的上下文以及它們如何影響更廣泛的程式碼庫。如今,許多開發者在瀏覽器中進行“輕量級審查”,這提供了一個極其便捷的工作流程,但也容易錯過很多必要的上下文(例如,“這個變更會破壞 API 的任何消費者嗎?”)。GitHub Pull Requests 擴充套件透過允許你利用開發環境的功能來構建和導航正在審查的原始碼,從而改進了這種體驗,但仍然要求你在本地檢出分支,並安裝必要的平臺 SDK 和語言擴充套件。對每個 PR 都這樣做可能需要大量的時間和上下文切換,這讓你面臨在快速審查遠端 PR 的便利性,或在本地編輯器中審查它們的強大功能之間做出選擇。我們認為開發者應該兩者兼得。
我們正在構建的豐富程式碼導航體驗幫助開發者在開發環境中(透過 Visual Studio 和 Visual Studio Code 擴充套件)跟蹤他們感興趣的拉取請求,並隨時開始無縫導航遠端託管 PR 中的變更,而無需在本地檢出這些主題分支。具體來說,它增強了你從GitHub Pull Requests檢視開啟的檔案,使其具有驅動其他編輯器體驗的相同程式碼導航功能(例如懸停資訊、轉到定義、查詢所有引用),但在這種情況下,完全由雲端提供支援。我們相信這可以提高團隊的生產力,並使膚淺的審查成為過去。
在 macOS 上導航基於 C# 的 PR,甚至無需安裝 C# 擴充套件或 .NET。
在 macOS 上導航基於 C++ 的 PR,甚至無需安裝 C++ 擴充套件。
在 macOS 上導航基於 Java 的 PR,甚至無需安裝 Java 語言支援 (redhat.java) 擴充套件。
導航所有內容
透過此體驗,你可以導航到在你正在審查的檔案中定義的符號(例如類、函式、屬性),在作為 PR 一部分而更改的其他檔案中定義的符號,以及在同一倉庫中任意檔案中定義的符號。透過這種方式,你理解整個程式碼庫中變更的能力不受 PR 範圍或本地環境的限制。
此外,如果你正在審查的 PR 使用了外部倉庫中的依賴項,或包含了被外部倉庫中的程式碼使用的 API,你也可以直接導航到這些源!透過這種方式,你可以完全——更重要的是,快速地——評估變更的影響,無論你的應用程式在版本控制中是如何組織的。我們相信這是一個極其強大的功能,特別是隨著越來越多的團隊正在構建多倉庫應用程式/微服務並嚴重依賴 OSS。
從對 observable 函式的外部引用,直接導航到 GitHub 上的 MobX 倉庫。
以社群為中心的設計
在幕後,此體驗由 語言伺服器協議 (LSP) 的一項附加功能提供支援,LSP 已經是許多 工具(例如 Visual Studio 和 Visual Studio Code)的語言支援基礎。這項提案稱為語言伺服器索引格式 (LSIF,發音像“else if”),它為語言伺服器提供了一種持久化其執行時智慧的方式,以便後續可以大規模地用於回答 LSP 請求(例如懸停和轉到定義)。此外,LSIF 定義的資料模型允許透過豐富的原始碼圖以及程式碼與外部倉庫的關係來表示倉庫。
作為構建這項服務的一部分,我們已經開始為各種語言(TypeScript、Java、C++ 和 C#)實現 LSIF 支援,我們對迄今為止的結果感到非常興奮。然而,為了使這項工作取得成功,與社群在標準以及額外的語言實現方面進行合作至關重要。要了解更多關於 LSIF 的資訊,併為未來的討論做出貢獻,請查閱LSIF 規範草案。
我們需要您的反饋!
我們很高興能首次展示豐富的程式碼導航體驗!在您可以實際體驗到這項功能之前,我們還有很多工作要做,但我們希望與社群就我們正在進行的工作展開公開對話。如果您有興趣與我們的團隊交流並參與潛在的預覽,您可以在此處註冊。我們期待在不久的將來分享更多更新!
愉快地審查!
Jonathan, @lostintangent