首次体验丰富的代码导航功能

2018年12月4日 Jonathan Carter, @lostintangent

拉取请求是数百万开发者每天使用的关键协作工具,促进了异步代码审查以及团队和开源社区之间的知识共享。由于这种广泛的实用性和采用,任何对PR审查工作流程的改进都可能对开发者的生产力、产品质量和发布速度产生重大影响。

在九月,我们与GitHub一起宣布了GitHub Pull Requests扩展,这使得开发者可以在他们编写代码的同一地方审查源代码:在他们熟悉且高度定制的编辑器中。今天,我们很高兴分享一个即将推出的新体验的预览,该体验将通过支持丰富的多仓库代码导航进一步增强编辑器内的PR审查。

告别肤浅的评论

要彻底审查一个拉取请求,你需要理解其更改的背景以及它们如何影响更广泛的代码库。如今,许多开发者在浏览器中进行“轻量级审查”,这提供了极其方便的工作流程,但很容易错过必要的背景信息(例如,“这个更改是否会破坏API的任何消费者?”)。GitHub Pull Requests 扩展通过允许你利用开发者环境的功能来构建和导航正在审查的源代码,从而改善了这种体验,但仍然需要你在本地检出分支,并安装必要的平台SDK和语言扩展。为每个PR执行此操作可能需要大量的时间和上下文切换,这让你在快速审查远程PR的便利性和在本地编辑器中审查它们的强大功能之间做出选择。我们认为开发者应该两者兼得

我们正在构建的丰富代码导航体验帮助开发者在他们的开发环境中(通过Visual StudioVisual Studio Code扩展)跟踪他们感兴趣的拉取请求,并且随时可以无缝地导航远程托管的PR中的更改,而无需在本地检出这些主题分支。具体来说,它增强了从GitHub Pull Requests视图中打开的文件,提供了与其他编辑器体验相同的代码导航功能(例如悬停信息、转到定义、查找所有引用),但在这种情况下,完全由云驱动。我们相信这可以使团队更高效,并使表面审查成为过去。

导航一个csharp PR

在macOS上导航一个基于C#的PR,甚至没有安装C#扩展或.NET。

导航C++ PR

在macOS上导航一个基于C++的PR,甚至没有安装C++扩展。

导航Java PR

在macOS上导航一个基于Java的PR,甚至没有安装Java语言支持(redhat.java)扩展。

导航所有内容

通过这种体验,您可以导航到您正在审查的文件中定义的符号(例如类、函数、属性),以及作为PR一部分更改的其他文件中的符号,以及同一仓库中任意文件中的符号。这样,您理解整个代码库上下文中变化的能力不会受到PR范围或本地环境的限制。

此外,如果您正在审查的PR使用了外部仓库中的依赖项,或者包含了由外部仓库中的代码使用的API,您也可以直接导航到这些源!这样,您可以全面——更重要的是,快速——评估变更的影响,无论您的应用程序在版本控制中是如何组织的。我们相信这是一个极其强大的功能,特别是随着越来越多的团队正在构建多仓库应用程序/微服务,并严重依赖开源软件。

导航进入Mobx仓库

直接从MobX 仓库的外部引用导航到其observable函数的GitHub页面。

以社区为中心的设计

在幕后,这种体验是由对语言服务器协议(LSP)的补充所驱动的,该协议已经是许多工具(如Visual Studio和Visual Studio Code)语言支持的基础。这个提案,称为语言服务器索引格式(LSIF,发音像“else if”),为语言服务器提供了一种持久化其运行时智能的方法,以便随后可以用于大规模回答LSP请求(例如,悬停和转到定义)。此外,LSIF定义的数据模型使得可以通过丰富的源代码图来表示存储库,以及代码与外部存储库的关系。

作为构建此服务的一部分,我们已开始为各种语言(TypeScriptJava、C++ 和 C#)实现 LSIF 支持,并且我们对迄今为止的结果感到非常兴奋。然而,为了使这项工作取得成功,我们与社区在标准以及更多语言实现方面的合作至关重要。要了解更多关于 LSIF 的信息,并为这一对话做出贡献,请查看LSIF 规范草案

我们需要您的反馈!

我们很高兴分享这个丰富的代码导航体验的初步展示!在我们能够让大家尝试之前,还有很多工作要做,但我们希望与社区开始一个开放的对话,讨论我们正在开发的内容。如果您有兴趣与我们的团队交流,并参与潜在的预览,您可以在这里注册。我们期待在不久的将来分享更多更新!

祝您审阅愉快!

乔纳森, @lostintangent