搶先體驗豐富的程式碼導覽體驗
2018 年 12 月 4 日 Jonathan Carter, @lostintangent
對於每天數百萬的開發人員來說,提取請求 (Pull requests) 是一個至關重要的協作工具,有助於非同步程式碼審查以及團隊和開放原始碼社群之間的知識傳播。由於其廣泛的實用性和採用,對 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 Language Support (redhat.java) 擴充功能。
導覽所有事物
透過此體驗,您可以導覽至檔案中定義的符號 (例如,類別、函式、屬性)、作為 PR 一部分變更的其他檔案,以及同一儲存庫中的任意檔案。這樣,您在整個程式碼庫的背景資訊中理解變更的能力不會受到 PR 或本機環境範圍的限制。
此外,如果您審查的 PR 使用外部儲存庫中的相依性,或包含外部儲存庫中程式碼使用的 API,您也可以直接導覽至這些來源!這樣,您可以完全且更重要的是快速地評估變更的影響,無論您的應用程式在版本控制中如何組織。我們相信這是一項非常強大的功能,尤其是在越來越多的團隊正在建置多儲存庫應用程式/微服務並嚴重依賴 OSS 的情況下。
從對其 MobX 儲存庫的外部參考直接導覽至 GitHub 上的 observable 函式。
以社群為中心的設計
在幕後,此體驗由 語言伺服器協定 (LSP) 的新增功能提供支援,該協定已經是跨多種 工具 (例如 Visual Studio 和 Visual Studio Code) 的語言支援基礎。這個名為語言伺服器索引格式 (LSIF,發音類似「else if」) 的提案,提供了一種語言伺服器持久保存其執行階段智慧的方法,以便後續可用於大規模回答 LSP 請求 (例如,懸停和跳到定義)。此外,LSIF 定義的資料模型使儲存庫能夠透過豐富的原始碼圖表以及程式碼與外部儲存庫的關係來表示。
作為建置此服務的一部分,我們已開始實作各種語言 (TypeScript、Java、C++ 和 C#) 的 LSIF 支援,而且我們對目前為止的結果感到非常興奮。但是,為了使這項工作取得成功,我們必須在標準以及其他語言實作方面與社群合作。若要深入了解 LSIF 並推動此對話,請查看LSIF 規格草案。
我們需要您的意見回饋!
我們很高興分享豐富程式碼導覽體驗的初步預覽!在它可以讓您試用之前,我們還有很多工作要做,但我們想開始與社群公開討論我們正在做的事情。如果您有興趣與我們的團隊聊天並參與潛在的預覽,您可以在此處註冊。我們期待在不久的將來分享更多更新!
祝您審查愉快!
Jonathan, @lostintangent