现已发布!阅读关于 11 月新增功能和修复的内容。

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

2018 年 12 月 4 日 Jonathan Carter, @lostintangent

拉取请求(Pull requests)是每天数百万开发人员使用的关键协作工具,有助于促进异步代码审查以及团队和开源社区之间的知识分发。由于其广泛的实用性和普及性,任何对 PR 审查工作流程的改进都可能对开发人员的工作效率、产品质量和发布速度产生重大影响。

今年 9 月,我们与 GitHub 一起发布了 GitHub Pull Requests 扩展,使开发人员能够在编写代码的同一地方(即他们熟悉且高度定制的编辑器中)审查源代码。今天,我们很高兴能分享一个新体验的先睹为快,它将通过支持丰富的多存储库代码导航来进一步增强编辑器内的 PR 审查。

告别肤浅的审查

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

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

Navigating a csharp PR

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

Navigating a C++ PR

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

Navigating a Java PR

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

导航所有内容

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

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

Navigating into a Mobx repo

从对 MobX 的 observable 函数的外部引用直接导航到 GitHub 上的 MobX 存储库

以社区为中心的设计

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

作为构建此服务的一部分,我们已经开始为各种语言(TypeScriptJava、C++ 和 C#)实施 LSIF 支持,我们对目前的结果感到非常兴奋。然而,为了使这项工作取得成功,我们必须与社区在标准以及额外的语言实施方面进行合作。要了解有关 LSIF 的更多信息并为未来的讨论做出贡献,请查看LSIF 规范草案

我们需要您的反馈!

我们很高兴分享丰富的代码导航体验的首次亮相!在它成为你可以尝试的东西之前,我们还有很多工作要做,但我们想就我们正在做的事情与社区开始公开对话。如果你有兴趣与我们的团队聊天并参与潜在的预览,你可以在此处注册。我们期待在不久的将来分享更多更新!

祝审查愉快!

Jonathan, @lostintangent

© . This site is unofficial and not affiliated with Microsoft.