初步了解丰富的代码导航体验
2018 年 12 月 4 日 Jonathan Carter, @lostintangent
Pull 请求是每天数百万开发人员的关键协作工具,它促进了异步代码审查以及团队和开源社区之间的知识传播。由于其广泛的实用性和采用率,对 PR 审查工作流程的任何改进都可能对开发人员的生产力、产品质量和发布速度产生重大影响。
9 月,我们与 GitHub 一起发布了 GitHub Pull Requests 扩展,使开发人员可以在编写源代码的同一位置(在其熟悉且高度自定义的编辑器内部)审查源代码。今天,我们很高兴分享一种新体验的预览,该体验将通过支持丰富的、多存储库代码导航进一步增强编辑器内的 PR 审查。
告别肤浅的审查
要彻底审查 pull 请求,您需要了解其更改的上下文以及它们如何影响更广泛的代码库。如今,许多开发人员在浏览器中进行“轻量级审查”,这提供了一个极其方便的工作流程,但很容易错过急需的上下文(例如,“此更改是否破坏了任何 API 使用者?”)。GitHub Pull Requests扩展通过允许您利用开发环境的功能来构建和导航正在审查的源代码,从而改善了这种体验,但仍然需要您在本地检出分支,并安装必要的平台 SDK 和语言扩展。为每个 PR 执行此操作可能需要大量时间和上下文切换,这让您需要在快速审查远程 PR 的便利性与在本地编辑器中审查它们的强大功能之间做出选择。我们认为开发人员应该两者兼得。
我们正在构建的丰富代码导航体验可帮助开发人员从其开发环境中(通过 Visual Studio 和 Visual Studio Code 扩展)跟踪他们感兴趣的 pull 请求,并随时开始无缝导航远程托管 PR 中的更改,而无需在本地检出这些主题分支。具体来说,它使用与驱动其他编辑器体验(例如悬停信息、转到定义、查找所有引用)相同的代码导航功能增强了您从GitHub Pull Requests视图中打开的文件,但在这种情况下,完全由云提供支持。我们相信这可以提高团队的生产力,并使肤浅的审查成为过去。
在 macOS 上导航基于 C# 的 PR,甚至没有安装 C# 扩展或 .NET。
在 macOS 上导航基于 C++ 的 PR,甚至没有安装 C++ 扩展。
在 macOS 上导航基于 Java 的 PR,甚至没有安装 Java 语言支持 (redhat.java) 扩展。
导航所有内容
有了这种体验,您可以导航到您正在审查的文件中定义的符号(例如类、函数、属性),以及作为 PR 一部分更改的其他文件,以及同一存储库中的任意文件。这样,您在整个代码库上下文中理解更改的能力不会受到 PR 或本地环境范围的限制。
此外,如果您正在审查的 PR 使用外部存储库中的依赖项,或包含外部存储库中的代码使用的 API,您也可以直接导航到这些源!这样,您就可以全面、更重要的是快速地评估更改的影响,无论您的应用程序如何在版本控制中组织。我们认为这是一项极其强大的功能,尤其是当越来越多的团队构建多存储库应用程序/微服务并严重依赖 OSS 时。
直接从其 外部引用导航到 GitHub 上的 MobX 存储库中的 observable 函数。
以社区为中心的设计
在幕后,此体验由语言服务器协议 (LSP) 的新增功能提供支持,该协议已经是许多工具(例如 Visual Studio 和 Visual Studio Code)跨语言支持的基础。这个称为语言服务器索引格式 (LSIF,发音为“else if”) 的提案提供了一种语言服务器持久化其运行时智能的方法,以便随后可以大规模地使用它来回答 LSP 请求(例如,悬停和转到定义)。此外,LSIF 定义的数据模型使存储库可以通过源代码的丰富图表以及代码与外部存储库的关系来表示。
作为构建此服务的一部分,我们已经开始为各种语言(TypeScript、Java、C++ 和 C#)实现 LSIF 支持,我们对目前的结果感到非常兴奋。但是,为了使这项工作取得成功,我们必须在标准以及其他语言实现方面与社区合作。要了解有关 LSIF 的更多信息,并为未来的对话做出贡献,请查看LSIF 规范草案。
我们需要您的反馈!
我们很高兴分享丰富代码导航体验的初步预览!在您可以尝试之前,我们还有很多工作要做,但我们希望开始与社区就我们正在做的事情进行公开对话。如果您有兴趣与我们的团队聊天并参加潜在的预览,您可以在此处注册。我们期待在不久的将来分享更多更新!
祝您审查愉快!
Jonathan, @lostintangent