首次预览丰富的代码导航体验
2018 年 12 月 4 日 Jonathan Carter,@lostintangent
拉取请求是数百万开发者日常使用的重要协作工具,有助于异步代码审阅以及在团队和开源社区中传播知识。由于其广泛的实用性和普及性,PR 审阅工作流程的任何改进都能显著影响开发者生产力、产品质量和发布速度。
九月份,我们与 GitHub 一同发布了 GitHub 拉取请求扩展,该扩展使开发者能够在编写源代码的同一位置(即他们熟悉且高度定制的编辑器中)审阅代码。今天,我们很高兴能分享一个新体验的抢先预览,该体验将通过支持丰富的多仓库代码导航来进一步增强编辑器内的 PR 审阅。
告别敷衍的审阅
要彻底审阅拉取请求,您需要理解其变更的上下文以及它们如何影响更广泛的代码库。目前,许多开发者在浏览器中进行“轻量级审阅”,这提供了一种极其便捷的工作流程,但也容易错过很多必要的上下文(例如,“此变更是否会破坏 API 的任何使用者?”)。GitHub 拉取请求扩展通过让您能够利用开发者环境的功能来构建和导航正在审阅的源代码,从而改善了该体验,但仍需要您在本地检出分支并安装必要的平台 SDK 和语言扩展。为每个 PR 执行此操作可能需要大量时间和上下文切换,这让您面临快速审阅远程 PR 的便利性与在本地编辑器中审阅它们的强大功能之间的选择。我们认为开发者应该两者兼得。
我们正在构建的丰富代码导航体验可帮助开发者在开发环境中(通过 Visual Studio 和 Visual Studio Code 扩展功能)跟踪他们感兴趣的拉取请求,并随时开始跨远程托管的 PR 无缝导航变更,而无需在本地检出这些主题分支。具体来说,它使用与驱动其他编辑器体验(例如悬停信息、转到定义、查找所有引用)相同的代码导航功能来增强从GitHub 拉取请求视图中打开的文件,但在这种情况下,完全由云提供支持。我们相信这可以使团队提高生产力,并使敷衍的审阅成为过去。
在 macOS 上导航基于 C# 的 PR,甚至无需安装 C# 扩展或 .NET。
在 macOS 上导航基于 C++ 的 PR,甚至无需安装 C++ 扩展。
在 macOS 上导航基于 Java 的 PR,甚至无需安装 Java Language Support (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