首次体验丰富的代码导航体验
2018 年 12 月 4 日 Jonathan Carter,@lostintangent
拉取请求每天都是数百万开发人员的关键协作工具,它促进了异步代码审查,并在团队和开源社区之间传播知识。由于这种广泛的实用性和采用,对 PR 审查工作流程的任何改进都会对开发人员的生产力、产品质量和发布速度产生重大影响。
在 9 月份,我们与 GitHub 共同宣布了 GitHub Pull Requests 扩展,它使开发人员能够在他们编写代码的同一位置审查源代码:在他们熟悉且高度定制的编辑器中。今天,我们很高兴分享一项新体验的抢先体验,该体验将通过对 **丰富、多仓库代码导航** 的支持进一步增强编辑器内的 PR 审查。
告别肤浅的评论
要彻底审查拉取请求,您需要了解其更改的上下文以及它们如何影响更广泛的代码库。如今,许多开发人员在浏览器中进行“轻量级审查”,这提供了非常便捷的工作流程,但很容易错过必要的上下文(例如,“此更改是否破坏了 API 的任何使用者?”)。GitHub Pull Requests 扩展通过允许您利用开发环境的功能来构建和导航正在审查的源代码来改善这种体验,但仍然要求您在本地检出分支,并安装必要的平台 SDK 和语言扩展。对于每个 PR 都这样做可能需要大量的时间和上下文切换,这使您不得不选择是在本地编辑器中快速审查远程 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 的情况下。
从对 MobX 存储库 的外部引用到其observable 函数,直接导航到 GitHub 上的 MobX 存储库。
以社区为中心的設計
在幕后,这种体验是由对语言服务器协议 (LSP) 的补充提供支持的,该协议已经是许多工具(如 Visual Studio 和 Visual Studio Code)中语言支持的基础。这个提案称为语言服务器索引格式 (LSIF,发音类似于“else if”),它提供了一种方法,使语言服务器能够持久化其运行时智能,以便随后可以将其用于大规模地回答 LSP 请求(例如,悬停和转到定义)。此外,LSIF 定义的数据模型使存储库能够通过丰富的源代码图以及代码与外部存储库之间的关系来表示。
作为构建此服务的一部分,我们已经开始为各种语言实现 LSIF 支持(TypeScript、Java、C++ 和 C#),到目前为止,我们对结果非常兴奋。但是,为了使这项工作取得成功,我们必须与社区合作,共同制定标准以及额外的语言实现。要了解有关 LSIF 的更多信息,并参与未来的讨论,请查看LSIF 规范草案。
我们需要您的反馈!
我们很高兴分享丰富的代码导航体验的首次体验!在您能够尝试使用之前,我们还有很多工作要做,但我们希望与社区公开讨论我们正在进行的工作。如果您有兴趣与我们的团队聊天,并参与潜在的预览,您可以在这里注册。我们期待在不久的将来分享更多更新!
祝您审查愉快!
Jonathan,@lostintangent