🚀 在 VS Code 中

2020 年 2 月(版本 1.43)

更新 1.43.1:此更新解决了以下问题

更新 1.43.2:此更新解决了以下问题

下载:Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap


欢迎使用 Visual Studio Code 2020 年 2 月版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括:

如果您想在线阅读这些发行说明,请访问 Updates,网址为 code.visualstudio.com

Insiders: 想要尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即试用。有关最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code

工作台

搜索编辑器

经过几次迭代以在 Insiders 上稳定后,我们正在发布搜索编辑器,它允许您在全尺寸编辑器中查看工作区搜索结果,并带有语法突出显示和可选的周围上下文行。长期以来,这都是一个 高度请求的功能

以下是搜索单词“SearchEditor”的示例,匹配项前后各有两行文本作为上下文

搜索编辑器 主题:A Touch of Lilac,字体:Hasklig

在搜索编辑器中,可以使用转到定义操作导航到结果,例如 F12 以在当前编辑器组中打开源位置,或 ⌘K F12(Windows,Linux Ctrl+K F12 以在侧边编辑器中打开位置。此外,双击可以选择打开源位置,可通过 search.searchEditor.doubleClickBehaviour 设置进行配置。

Search Editor definition reveals

您可以使用 搜索编辑器:打开新的搜索编辑器 命令,或使用搜索视图顶部的 打开新的搜索编辑器 按钮打开新的搜索编辑器。或者,您可以使用添加到结果树顶部的 在编辑器中打开 链接,或 搜索编辑器:在编辑器中打开结果 命令,将现有结果从搜索视图复制到搜索编辑器。

注意:您可以试用实验性的 Search Editor: Apply Changes 扩展,以将您在搜索编辑器中所做的编辑同步回源文件

Search Editor: Apply Changes extension

可拖动边框角

您知道您可以通过抓住并拖动两个正交边框之间的交点来同时调整它们的大小吗?这已经适用于编辑器边框,现在也适用于编辑器和视图之间的边缘

Draggable sash corners

主题:GitHub Sharp,字体:Fira Code

经过公证的 macOS 构建版本

macOS 版 Visual Studio Code 现在已通过 Apple 公证,因此您应该不再看到以下对话框

macOS missing notarization warning

阅读 调查问题Apple 的开发者文档 以了解更多详细信息。

进度通知

从本版本开始,指示长时间运行操作的通知的行为略有不同

  • 它们不再提供通用的 关闭 按钮,因为它给人一种错误印象,认为操作已取消或未取消。您仍然可以按 Esc 键来隐藏通知。
  • 每当操作仍在进行时通知被隐藏时,通知会在状态栏中指示其操作的进度。

后一项更改有助于您了解在您关闭通知后,操作仍在后台继续运行(例如长时间运行的保存操作)。

在选择 取消 按钮之前,以下操作仍在运行

Progress Notification

主题:Dracula Official,字体:Fira Code

未命名编辑器

新的设置 workbench.editor.untitled.labelFormat 允许您控制未命名编辑器是否应使用文件内容作为标题。可能的值为 contentname。配置 'workbench.editor.untitled.labelFormat': 'name' 可获得之前的行为,其中未命名编辑器将具有简短的标题,例如 Untitled-1

当将文本粘贴到未命名编辑器中时,VS Code 现在会自动尝试从文本的第一行检测语言模式。例如,如果第一行包含典型的 XML 标头 <?xml version="1.0" encoding="UTF-8"?>,则粘贴 XML 将在粘贴时自动设置 XML 模式。

VS Code 支持通过协议链接(例如 vscode://file/<file-path>)打开文件。在此里程碑中,我们扩展了支持,包括打开文件夹或工作区。

文件夹或工作区的语法与文件相同

vscode://file/<path>
vscode-insiders://file/<path>

欢迎视图

欢迎视图是工作台的新增功能,它允许视图为用户创建启动体验,以在没有任何有意义的内容要显示时创建内容或配置 VS Code。一些视图已经采用了此基础设施,例如文件资源管理器,它将提供打开文件夹或克隆 Git 存储库以帮助您入门。

File Explorer Welcome view

主题:GitHub Sharp

源代码管理欢迎视图

得益于新的欢迎视图基础设施,源代码管理视图现在为某些情况下提供了更好的体验,在这些情况下,它原本会显示为空。例如,当未检测到安装时,它现在可以引导用户打开文件夹或克隆存储库或安装 Git。

Source Control Welcome view

主题:GitHub Sharp

编辑器

迷你地图尺寸

有一个新的设置 editor.minimap.size,用于控制迷你地图如何使用垂直空间

  • 设置为 proportional(默认值)时,迷你地图中的每行都会获得一定的垂直空间量,具体取决于 editor.minimap.scale。例如,在高 DPI 显示器上,配置的比例为 1(默认值),迷你地图中的每行获得 4 像素。因此,对于 100 行的文件,迷你地图中渲染的行的高度为 400 像素,对于 1000 行的文件,则为 4000 像素。这意味着对于大型文件,迷你地图也会滚动,因为当前文件会滚动。
  • 设置为 fit 时,迷你地图的高度被限制为永远不大于编辑器的高度。因此,如果文件有很多行,则会对它们进行采样,并且迷你地图中只会渲染一个子集,这样就不需要迷你地图滚动。
  • 设置为 fill 时,迷你地图的高度始终是编辑器的高度。对于大型文件,这也是通过对行进行采样来实现的,但对于小型文件,这是通过为每行保留更多垂直空间(拉伸行)来实现的。

此处尺寸从 proportional 更改为 fit,然后在较小的文件中,从 fit 更改为 fill

Minimap size

迷你地图背景和滑块颜色

现在有新的颜色用于自定义迷你地图及其滑块。新颜色之一是 minimap.background,当颜色被定义为透明时(降低 #RRGGBBAA Alpha 通道),迷你地图将透明地渲染

Transparent minimap

{
  "workbench.colorCustomizations": {
    "minimap.background": "#00000055"
  }
}

列选择模式

有一个新的全局切换开关,可通过 选择 > 列选择模式 菜单项访问。一旦进入此模式,如状态栏中所示,鼠标手势和箭头键将创建列选择

Column selection

您也可以从状态栏禁用列选择模式。

在选择时渲染空格

editor.renderWhitespace 设置的默认值已从 none 更改为 selection。默认情况下,空格字符现在将在突出显示的文本上渲染。

此处制表符和空格空格字符显示在选定区域中

Render whitespace characters on selection

现在可以更好地控制 转到定义 鼠标手势的行为。默认情况下,通过鼠标 转到定义 会打开一个单独的编辑器,但将新设置 editor.definitionLinkOpensInPeek 设置为 true 后,该手势将在 Peek 视图中打开。

Definition with mouse in Peek

在折叠行的任何位置展开

有一个新的设置 编辑器:在行尾后单击时展开 (editor.unfoldOnClickAfterEndOfLine),用于控制当您单击折叠行右侧的空白区域(在 ... 之后)时会发生什么。设置为 true 时,您可以单击折叠行上文本后的任何位置,而不必担心精确选择省略号 (...)。默认情况下,此选项处于关闭状态。

folded line with ellipses

撤消跨多个文件的文本编辑

当撤消影响多个文件的重命名或代码操作时,VS Code 现在允许您撤消所有受影响文件中的更改。

撤消跨文件编辑时将显示提示

Undo across files prompt

注意:文件操作(如重命名文件)尚不受支持。例如,Java 中重命名类名(文件名也会重命名)尚不支持跨文件撤消。

具有不同颜色的多个标尺

现有的 editor.rulers 设置已扩展为允许定义具有自定义颜色的标尺。在以下屏幕截图中,在第 80 列处有一个品红色标尺,在第 90 列处有一个红色标尺

Colored rulers

{
  "editor.rulers": [
    { "column": 80, "color": "#ff00ff" },
    { "column": 90, "color": "#ff0000" }
  ]
}

编辑器顶部和底部填充

现在可以使用 editor.padding.topeditor.padding.bottom 在编辑器的顶部或底部保留空格(像素数)。

这是顶部填充为 50 像素的编辑器

editor.padding.top set to 50 pixels

{
  "editor.padding.top": 50
}

滚动主轴

当尝试使用现代触摸板垂直滚动时,经常会发生文件也水平滚动的情况。现在有一个新的设置 editor.scrollPredominantAxis(默认设置为 true),它阻止“对角线”滚动。这强制滚动操作要么是垂直的,要么是水平的(基于最高的绝对滚动增量),但永远不是对角线的。

Linux 上的 Shift+Insert

在 1.42 中,Shift+Insert 被修改为从选择剪贴板粘贴。我们收到了很多反馈,认为这破坏了现有的肌肉记忆,因此我们决定回滚,并让 Shift+Insert 像以前一样从常规剪贴板粘贴。

辅助功能

Linux 屏幕阅读器支持

在社区的帮助下,我们一直在努力使 VS Code 在 Linux 上通过 Orca 屏幕阅读器实现辅助功能。Orca 和 Chromium 仍在积极开发屏幕阅读器支持,因此需要做一些事情才能使其完全正常工作

  • 确保使用 master 分支中的最新版本的 Orca。说明可以在 问题 #91063 中找到。
  • 确保在 VS Code 中具有设置 "editor.accessibilitySupport": "on"。您可以使用设置来执行此操作,也可以运行 显示辅助功能帮助 命令并按 Ctrl+E 以打开屏幕阅读器优化模式。

启用该设置后,VS Code 应该可以与 Orca 屏幕阅读器一起使用。

语言

TypeScript 3.8.3

VS Code 现在捆绑了 TypeScript 3.8.3。此主要更新带来了对新语言功能的支持,包括 ECMAScript 私有字段顶层 await 表达式和 export * as ns 语法,以及许多工具功能和改进。此更新还修复了许多重要的错误。

您可以在 TypeScript 博客上阅读有关 TypeScript 3.8 的更多信息。

转换为模板字符串重构

您可以使用新的 转换为模板字符串 重构功能,将 JavaScript 和 TypeScript 中的字符串连接快速转换为 模板字符串

Converting string concatenation to a template string

JavaScript 和 TypeScript 的调用层次结构支持

TypeScript 3.8 在 JavaScript 和 TypeScript 中带来了 调用层次结构 支持。

Viewing incoming calls using call hierarchy in a TypeScript file

IntelliSense 现在渲染 JS Doc @link 内联标记,用于 http 和 https 链接。在下面的示例图像中,请注意 @link 如何为 lightbulb menu 渲染在悬停提示中

A hover with a rendered @link JSDoc tag

@link 到 URL 的链接适用于 JavaScript 和 TypeScript,并在悬停提示、建议详细信息和签名帮助中渲染为可单击的链接。

TypeScript 语义突出显示

语义突出显示现在默认对 TypeScript 和 JavaScript 启用。语义突出显示由 TypeScript 语言服务器提供,并在基于 TextMate 语法的语法突出显示之上进行。默认语法 (TextMate) 突出显示器将许多标记分类为 variables,这些标记现在被解析为命名空间、类、参数等。

语义突出显示由以下设置控制

"editor.semanticHighlighting.enabled": true

JSON 架构

在将文件名与架构关联时,您现在还可以使用排除模式。排除模式以“!”开头。要匹配,至少需要匹配一个模式,并且最后一个匹配的模式不能是排除模式。

  "json.schemas": [
    {
      "fileMatch": [
        "/receipts/*.json",
        "!/receipts/*.excluded.json"
      ],
      "url": "./receipts.schema.json"
    }
  ]

调试

“运行”在 UI 中更突出

用户研究表明,新用户很难找到如何在 VS Code 中运行他们的程序。原因之一是现有的“调试”功能与他们“运行”程序无关。因此,我们正在使“运行”在 UI 中更加突出。

  • 主菜单 调试 已变为 运行 菜单。
  • 运行和调试 视图已变为 运行 视图,并且相应的活动栏图标现在显示一个大的“播放”图标,带有一个小的“错误”装饰。

Run and Debug Activity Bar icon

调试控制台分组

VS Code 调试控制台现在支持输出分组。调试扩展可以指示何时应将调试控制台输出分组到公共父项下。目前,只有 Mock Debug 扩展实现了输出分组,但很快其他调试扩展也将跟进 - 最值得注意的是 JavaScript 调试器。

Debug Console grouping

禁用调试控制台历史记录建议

您现在可以通过新的 debug.console.historySuggestions 设置关闭调试控制台中的历史记录建议。默认情况下,历史记录建议处于开启状态。

集成终端

Unicode 11 支持

终端中字符的宽度现在默认为 Unicode 11 宽度。这对大多数人来说意味着表情符号将正确显示为宽字符。

Emojis are correctly wide characters

更好的 Alt+Click 导航提示支持

终端具有一项功能,允许您 Alt+Click 单击单元格,光标将导航到该单元格。从历史上看,当在 shell 提示符下时,这仅在单行上起作用,即使它已换行也是如此。这已得到改进,可在整个换行行上工作。

Alt+Click 可以跨换行行移动 主题:Sapphire

请注意,这可能在 Windows 上尚无法正常工作,但 ConPTY 的最新更改 应该会在将来对此进行改进。

任务

任务快速选择更新

任务快速选择(在执行 运行任务 命令时显示)已更新,以显示哪些任务提供程序仍在运行。如果您不需要来自该提供程序的任务,则 停止检测 按钮将立即显示到目前为止已检测到的任务,因此您不必等待任何缓慢的任务提供程序。

任务停止检测 主题:One Dark Pro,字体:Fira Code

任务实例限制

任务 "runOptions" 现在包含一个 "instanceLimit",它指定允许的任务实例数。默认的 "instanceLimit" 为 1。

promptString 密码输入

"promptString" 用户输入类型可以具有 "password": true,这将导致下拉输入框模糊键入的内容,就像密码一样。

预览功能

预览功能尚未准备好发布,但功能已足够使用。我们欢迎您在它们开发期间提供早期反馈。

设置同步

在过去的几个月中,我们一直在努力支持跨机器同步 VS Code 设置、扩展和键盘快捷键(热门功能请求 #2743)。在此里程碑中,我们很高兴地宣布此功能已准备好从我们的下一个 1.44.0 Insider 版本开始预览。您现在可以在所有机器上的所有 VS Code 安装中同步您的首选项。您还可以通过最少的努力在新机器上使用您的个人首选项引导 VS Code。

以下视频演示了在新机器上本地应用扩展和设置

Bootstrap VS Code using Settings Sync

当前同步设置、键盘快捷键、扩展和显示语言,但我们计划添加更多。您可以查看我们建议的 设置同步功能 列表。

默认情况下,机器设置(具有 machinemachine-overridable 范围)不会同步。您还可以从此列表中添加或删除设置,方法是从设置编辑器中添加或删除,或者使用设置 sync.ignoredSettings

忽略的设置 主题:GitHub Sharp

默认情况下,键盘快捷键按平台同步。如果您的键盘快捷键与平台无关,则可以通过禁用设置 sync.keybindingsPerPlatform 来跨平台同步它们。

所有内置和已安装的扩展都会与其全局启用状态一起同步。您可以跳过同步扩展,可以从扩展视图中跳过,也可以使用设置 sync.ignoredExtensions

忽略的扩展 主题:GitHub Sharp

设置同步支持在同步时检测设置和键盘快捷键中的冲突。冲突使用差异编辑器显示,左侧为传入(远程)更改,右侧为本地更改。您可以通过在右侧编辑器中编辑并使用编辑器中提供的操作合并更改来解决冲突。

此处使用 接受远程 操作选择了远程 colorTheme 设置值

设置同步处理冲突 主题:GitHub Sharp、GitHub Sharp Dark

可以在 日志(同步) 输出视图中监视设置同步活动。每次在同步期间更改本地首选项时,都会在磁盘上备份本地首选项,备份时间为最近 30 天。您可以使用命令 同步:打开本地备份文件夹 转到备份位置并检索旧的首选项。

设置同步日志 主题:GitHub Sharp

您可以随时关闭同步,可以在当前的 VS Code 实例上关闭,也可以在所有 VS Code 安装上关闭。当选择禁用所有同步时,您的数据将从云中删除。

Turn off Settings Sync

注意: 设置同步使用 Microsoft 帐户来存储您的 VS Code 首选项以进行同步,因此您需要一个帐户才能使用此功能。有关更多信息,请参阅 设置同步文档

时间线视图

在此迭代中,我们继续在新的时间线视图上取得进展。它现在默认在 Insiders 版本上启用,并且可以通过以下设置在 Stable 版本上启用

"timeline.showView": true

下方的时间线视图显示文件的 Git 提交历史记录

Timeline view

主题:Dark Amethyst

我们现在添加了分页支持(通过上面显示的 加载更多 操作),并在右侧添加了相对时间戳。扩展还可以为时间线视图以及单个时间线项目贡献菜单项。在上面的屏幕截图中,内置的 Git 扩展正在贡献命令 复制提交 ID复制提交消息

新的 JavaScript 调试器

本月,我们继续在新 JavaScript 调试器上取得进展。它默认安装在 Insiders 版本上,并且可以从 VS Code Stable 中的 Marketplace 安装。您可以通过启用 debug.javascript.usePreview 设置开始将其与您现有的启动配置一起使用。以下是我们本月添加的一些新功能

美化打印

Animation of VS Code asking whether to pretty-print a minified file when the debugger steps into it. Selecting "yes" formats the file and moves the debugger into the new beautified code.

主题:Earthsong,字体:Fira Code

调试器现在可以美化打印文件,这在处理缩小源时特别有用。当您步入或打开看起来已缩小的文件时,它将显示一个提示,您也可以通过 调试:美化打印以进行调试 命令手动触发美化打印。

您可以通过选择 从不 或将设置 debug.javascript.suggestPrettyPrinting 更改为 false 来关闭建议提示。

支持 Microsoft Edge 和 WebView2

我们现在支持启动 新的 Microsoft Edge 浏览器,只需将您的调试类型从 chromepwa-chrome 更改为 pwa-msedge 即可试用。它支持与 chrome 相同的所有配置设置。

随之而来的是对桌面 Windows 应用程序中的 WebView2 控件的支持。查看我们的 webview 演示,了解如何进行设置。

Image showing the debugger paused at a breakpoint for code running in a native window's WebView.

远程调试

您现在可以在新的调试器中从远程工作区(例如 GitHub CodespacesRemote SSH)调试浏览器源代码。要进行设置,请端口转发您的 Web 服务器(或使用 简单的静态 Web 服务器),然后创建一个指向转发端口的 chromepwa-msedge 启动配置。

例如

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-msedge",
      "request": "launch",
      "name": "Debug my App",
      "url": "https://127.0.0.1:5000" // <- debug an app forwarded on port 5000
    }
  ]
}

当您启动调试会话时,浏览器将在您的机器上打开,您可以像在 VS Code 中正常调试一样进行调试。

更多视图可移动

在上一个版本中,VS Code 让您初步体验了将视图重新定位到面板。在此版本中,此体验已扩展到更多视图。您现在可以移动诸如调试/运行视图或新的时间线视图之类的视图。您还可以将视图移动到侧边栏中的其他视图中。例如,您可能希望将 打开的编辑器 视图移动到源代码管理视图中。您可以通过拖动视图并将其放到活动栏或面板中的所需位置来完成所有这些操作。

以下动画重点介绍了将 打开的编辑器 视图移动到不同的视图,然后再移动到面板

Moving views around

主题:Horizon Bright,字体:Cascadia Code

我们还引入了一个新命令,使使用键盘移动视图更加容易:视图:移动焦点视图 (workbench.action.moveFocusedView)。

这是一个预览功能,因此如果您进入无法修复的状态,则有一个命令可以将所有视图重置为其原始位置:视图:重置视图位置 (workbench.action.resetViewLocations)。

扩展贡献

远程开发

远程开发扩展 上的工作仍在继续,这些扩展允许您使用容器、远程计算机或 Windows Linux 子系统 (WSL) 作为功能齐全的开发环境。

1.43 中的功能亮点包括:

  • 通过应用程序链接打开远程工作区。
  • 远程 - SSH:支持 Windows 和 macOS SSH 主机。
  • 远程 - SSH:默认启用连接共享。
  • WSL:查看最近的 在 WSL 2 中使用 Docker 博客文章。

您可以在 远程开发发行说明 中了解有关新扩展功能和错误修复的信息。

Vetur

Vue.js 的 Vetur 扩展现在为模板插值提供了更好的自动完成功能。您可以在 0.24.0 版本的更新日志中找到更改记录。

扩展创作

调试器扩展 API

调试欢迎视图

正如 欢迎视图内容 API 部分所述,debug 视图现在向欢迎视图内容贡献开放。这些新增内容可用于引导初学者用户使用特定的功能,从而简化运行或调试程序。

为了避免视图因过多的欢迎视图内容贡献而变得杂乱,我们建议仅为当前活动语言启用各个贡献。为了方便这一点,我们引入了一个新的上下文键 debugStartLanguage,它被设置为上次使用调试器的活动编辑器语言。

例如,如果您的调试器目标是 Python,则只有当 debugStartLanguage == "python" 时,您才会贡献欢迎视图内容。如果您的调试器目标是多种语言,您可以使用 OR 运算符 (||) 组合多个条件。

新的调试悬停 API

如今,VS Code 的调试悬停使用基于正则表达式的启发式方法来查找鼠标下的表达式,VS Code 调试器会评估该表达式,然后在悬停窗口中显示结果。由于正则表达式不可配置,因此并非所有语言都能正确处理(或者没有在最大程度上处理)。问题 #84044#89603#89332 描述了典型问题。

在此里程碑中,我们引入了新的扩展 API 来控制调试悬停的行为。

可以为语言注册 EvaluatableExpressionProvider,以提供鼠标下的表达式,VS Code 调试器将针对活动的调试会话评估该表达式。

这是一个来自 Mock debug 示例的简单示例,该示例展示了基于 getWordRangeAtPosition API 的(简单)实现

vscode.languages.registerEvaluatableExpressionProvider('markdown', {
  provideEvaluatableExpression(
    document: vscode.TextDocument,
    position: vscode.Position
  ): vscode.ProviderResult<vscode.EvaluatableExpression> {
    const wordRange = document.getWordRangeAtPosition(position);
    if (wordRange) {
      return new vscode.EvaluatableExpression(wordRange);
    }
    return undefined; // nothing evaluatable found under mouse
  }
});

不再转义空格

VS Code 调试器 UI 不再转义或引用从调试扩展或调试适配器接收到的任何空格。例如,DAP 变量中或作为 DAP 输出事件接收的所有字符串都按原样显示在 UI 中,不做任何修改。

这意味着现在由调试扩展或调试适配器决定是否需要在将数据发送到 VS Code 之前转义空格。更多详情请参见 issue #73845

CodeAction.disabled

借助 CodeAction.disabled 属性,扩展现在可以告诉 VS Code 为什么给定的 CodeAction 对于用户的当前选择不可用。这对于重构尤其有用。

以下是在我们的 Code Action 示例扩展中使用 .disabled 的示例。

import * as vscode from 'vscode';

export class Emojizer implements vscode.CodeActionProvider {
  public provideCodeActions(
    document: vscode.TextDocument,
    range: vscode.Range
  ): vscode.CodeAction[] | undefined {
    const action = new vscode.CodeAction(
      `Convert to ${emoji}`,
      vscode.CodeActionKind.Refactor.append('emojize')
    );

    if (!this.isAtStartOfSmiley(document, range)) {
      // Tell the user why our action is not available
      action.disabled = { reason: 'Selection is not currently on a :)' };
      return [action];
    }

    action.edit = new vscode.WorkspaceEdit();
    action.edit.replace(
      document.uri,
      new vscode.Range(range.start, range.start.translate(0, 2)),
      '😀'
    );
    return action;
  }
}

如果用户尝试通过键绑定应用禁用的 Code Action,VS Code 将向用户显示 .disabled 错误消息

Showing the '.disabled' error in the editor

此外,为了帮助发现,禁用的 Code Action 在 重构源操作 上下文菜单中显示为淡化

A '.disabled' Code Action in the Refactor menu

请注意,禁用的操作不会显示在顶层灯泡菜单中。

Terminal.exitStatus

扩展现在可以确定终端是否已退出,如果已退出,则可以确定使用的退出代码(如果有)。

window.onDidCloseTerminal(t => {
  if (t.exitStatus && t.exitStatus.code) {
    vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
  }
});

我们已将 提议的诊断链接 API 提升为稳定版

class Diagnostic {
  ...

  /**
   * A code or identifier for this diagnostic.
   * Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
   */
  code?: string | number | {
    /**
     * A code or identifier for this diagnostic.
     * Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
     */
    value: string | number;

    /**
     * A target URI to open with more information about the diagnostic error.
     */
    target: Uri;
  };
}

工作区编辑元数据

我们已经完成了 WorkspaceEditEntryMetadata API。它允许扩展作者对工作区编辑的更改进行分类,特别是更改是否需要在应用之前进行审查。

调试适配器协议

支持在输出事件中分组

为了使输出日志按相关消息分组而更有条理,output 事件中添加了一个可选的 group 属性。 group 的可能值包括 startstartCollapsed (用于打开展开或折叠的分组)以及 end (用于关闭分组)。

注意: 从此版本开始,VS Code 支持此 DAP 增强功能。

允许通过完成项放置光标

完成项中添加了可选的 selectionStartselectionLength 属性。借助这些属性,可以在插入完成文本后控制客户端的当前选择(或插入符位置)。

注意: VS Code 尚不支持此 DAP 增强功能。计划在下一个版本中支持。

提案:进度事件

我们在为调试适配器协议添加进度事件的提案上取得了一些进展。如果您有兴趣,可以参与关于此 DAP 功能请求的讨论。

语言服务器协议

语言服务器协议 3.16 版本的工作已经开始。

新版本包含对以下提议的支持

  • 完成项的插入/替换编辑。
  • 诊断的结构化代码(例如,链接支持)。
  • 符号信息和文档符号的标签支持。

建议的扩展 API

每个里程碑版本都带有新的提议 API,扩展作者可以试用它们。与往常一样,我们渴望得到您的反馈。以下是您试用提议 API 需要做的

  • 您必须使用 Insiders 版本,因为提议的 API 经常更改。
  • 您必须在扩展的 package.json 文件中包含此行:"enableProposedApi": true
  • 将最新版本的 vscode.proposed.d.ts 文件复制到项目的源位置。

请注意,您不能发布使用提议 API 的扩展。下一个版本中可能会有重大更改,我们永远不想破坏现有扩展。

自定义编辑器 API

在此迭代中,我们继续致力于 自定义编辑器 API 提案。值得注意的更改包括

  • 重命名 API 方法,使其更短且更一致。
  • 通过引入 CustomTextEditorProvider 简化了文本文件自定义编辑器的创建。此自定义编辑器使用 VS Code 的普通 TextDocument 作为其数据模型,因此您不必自己实现 savebackup 和其他操作。这也使得资源自定义编辑器和同一资源的文本编辑器之间可以轻松实现实时同步。
  • 引入 CustomDocument 来存储二进制 CustomEditor 使用的模型。每个资源有一个 CustomDocument,但用户可以在该资源上打开多个自定义编辑器。

请继续测试并分享您对我们的 自定义编辑器 API 提案的反馈。尽管 API 的具体细节可能仍会更改,但我们相信当前的提案反映了我们希望尽快完成的内容。

CodeActionProviderMetadata.documentation

我们修订了 我们之前的提案,该提案关于标准化扩展如何为其代码操作贡献文档。根据更新后的提案,文档现在使用 CodeActionProviderMetadata 类型上的 documentation 属性提供。

例如,以下是我们内置的 JavaScript 和 TypeScript 扩展如何贡献文档的示例

class TypeScriptRefactorProvider implements vscode.CodeActionProvider {

  public static readonly metadata: vscode.CodeActionProviderMetadata = {
    providedCodeActionKinds: [ vscode.CodeActionKind.Refactor ],
    documentation: [
      {
        kind: vscode.CodeActionKind.Refactor,

        // This command opens a webpage when executed
        command: {
          command: LearnMoreAboutRefactoringsCommand.id,
          title: localize('refactor.documentation.title', "Learn more about JS/TS refactorings")
        }
      }
    ]
  };
  ...
}

当用户请求重构时,文档会在主代码操作列表之后呈现

The JS/TS Code Action documentation entry

Issue #86788 跟踪提案的状态。

欢迎视图内容 API

某些视图现在支持从扩展贡献的欢迎内容。有关更多信息,请参阅 原始 issue

已采用此 API 的视图包括

  • explorer - 文件资源管理器
  • scm - 源代码管理
  • debug - 运行/调试

例如,以下是 Git 扩展向 explorer 欢迎视图贡献的欢迎视图内容,用于克隆存储库

Explorer Welcome view

主题:GitHub Sharp

OpenDialogOptions 和 SaveDialogOptions 标题

OpenDialogOptionsSaveDialogOptions 都具有提议的 title 属性。是否显示 title 取决于平台,但如果平台显示 title,则它会显示在“保存”或“打开”对话框上方。例如,内置命令 工作区:将工作区另存为... 将标题设置为 保存工作区

工程

Electron 7.0 更新

在此里程碑中,我们完成了将 Electron 7 打包到 VS Code 中的探索。这是一个主要的 Electron 版本,附带 Chromium 78.0.3904.130 和 Node.js 12.8.1。

对于 HDR 显示器

我们正在跟踪 Windows 用户在使用高动态范围 (HDR) 显示器时遇到的问题,该问题在 issue #88491 中有所描述,其中 VS Code 看起来暗淡且无法使用。这是所有基于 Chromium 的应用程序在 78.0.3904.130 版本上的问题,该问题在 Chromium 81 的更新版本中已修复。一旦我们升级到 Electron 9,VS Code 将获得此修复,并且存在技术原因导致无法将此修复向后移植到 Chromium 78。

在此期间,我们为此问题提供了一个临时解决方法

  • 打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。
  • 运行 首选项:配置运行时参数 命令。
  • 此命令将打开一个 argv.json 文件来配置运行时参数。那里可能已经有一些默认参数。
  • "disable-color-correct-rendering": true 编辑为 "disable-color-correct-rendering": false
  • 重启 VS Code。

注意: 除非您遇到问题,否则请勿编辑此设置!

我们添加了此默认运行时参数,以便我们可以覆盖 Chromium 的默认颜色校正为 sRGB,并在 macOS 上改用显示颜色空间。这样做可以避免诸如 issue #84154 之类的问题,但不适用于 HDR 显示器。

"strict": true

当我们首次发布 VS Code 时,TypeScript 仍然是一种新兴且快速发展的语言,它缺少您今天可能认为理所当然的一些有用的类型安全检查,例如 严格的 null 检查。在过去的几年中,TypeScript 团队引入了许多选项,使 TypeScript 编译器更加“严格”。这些严格的选项可以捕获许多常见的编程错误,并消除整类错误。严格模式的好处已得到充分证明,我们一直希望为 VS Code 代码库启用严格模式。然而,考虑到这将需要在构成 VS Code 核心代码库的大约 50 万行源代码中修复数千个错误,因此这样做似乎几乎是不可能的任务。

尽管如此,严格模式的价值仍然非常大,以至于我们决定值得为此努力,即使这需要我们花费一些时间才能实现。因此,在过去的两年中,我们一直在逐步更新我们的代码库,使其符合严格模式。我们以增量方式直接在我们的开发分支中完成了所有这些工作,以便每个与严格模式相关的修复都使我们的代码库对每个人都更安全一点。启用严格的 null 检查可能是该过程中最复杂的部分,我们在 博客文章中记录了我们如何完成此操作。

在此迭代中,我们最终完成了启用最后一个严格模式选项:strictFunctionTypes。完成此操作后,一个 相当平淡的提交 为我们的整个代码库启用了严格模式!

启用严格模式是一段漫长的旅程,核心 VS Code 团队的每个人和许多社区成员都为此做出了贡献。但是,通过以增量方式完成这项工作,我们从第一天开始就能够从所有这些辛勤工作中受益。展望未来,严格模式应该鼓励最佳编码实践,使重构更安全,并最终使我们能够更快、更少错误地交付产品!

改进的 CI 构建性能

VS Code 使用 Azure Pipelines 进行持续集成构建,我们最近显着提高了构建性能。您可以在 改进 CI 构建时间 博客文章中了解更多信息。

针对浏览器运行测试

在此里程碑中,我们通过利用 Playwright 库,使我们的所有测试(单元测试、集成测试、冒烟测试)都可以在浏览器中运行,这为我们提供了对 Chrome、Firefox 和 Safari 等浏览器的更高覆盖率。您可以参考我们的 VS Code 测试 README,了解如何运行这些测试。

值得注意的修复

  • 61491: SCM: 视图窗格应该改进 “没有存储库” 消息
  • 74782: 调查:macOS 公证
  • 82828: autoReveal 高亮显示文件名,使其在资源管理器中显示,而无需始终将其移动到中间位置
  • 8641: macOS: 允许鼠标按键 4 和 5 导航历史记录
  • 87767: VSCode 重启调试不再工作
  • 88038: 不要用自动执行的调试器命令污染 shell 历史记录
  • 89230: 当编辑器聚焦时,“Group” 被读取
  • 89699: 后退/前进:保留选择
  • 89989: Web: 允许在新窗口中打开文件
  • 90075: 资源管理器:支持悬空的符号链接
  • 90240: Zen 模式切换关闭后,行号不可见
  • 90876: 列表项应具有 role 'listitem'
  • 91166: 当问题面板打开时,警报过于冗长。
  • 91238: 和弦在集成终端中不起作用

感谢

最后但同样重要的是,非常感谢以下人员为使 VS Code 变得更好做出的贡献

对我们的 issue 跟踪的贡献

vscode 的贡献

vscode-eslint 的贡献

language-server-protocol 的贡献

vscode-js-debug 的贡献

vscode-languageserver-node 的贡献

vscode-css-languageservice 的贡献

vscode-vsce 的贡献

localization 的贡献

有超过 800 名 Cloud + AI Localization 社区成员正在使用 Microsoft Localization Community Platform (MLCP),其中约有 170 多名活跃贡献者参与 Visual Studio Code 的本地化工作。我们感谢您的贡献,无论是提供新的翻译、为翻译投票,还是提出流程改进建议。

以下是 贡献者 的快照。有关项目的详细信息,包括贡献者姓名列表,请访问项目站点 https://aka.ms/vscodeloc

  • 简体中文(中国) Yizhi Gu, Tingting Yi, Charles Dong, Justin Liu, 斌 项, ick, paul cheung, CHEN Shihuan, 普鲁文, 张锐, Zhiqiang Li, Joel Yang.
  • 繁體中文(台灣) Yi-Jyun Pan, 高民 林.
  • 丹麦语(丹麦) Lasse Stilvang.
  • 荷兰语(荷兰) Koen Williame.
  • 英语(英国) Martin Littlecott, Henry Dearn, carlos baltazar.
  • 芬兰语(芬兰) Feetu Nyrhinen.
  • 法语(法国) Thierry DEMAN-BARCELÒ, Antoine Griffard, Rodolphe NOEL, Younes ZOBAIRI.
  • 德语(德国) Philip Kneifeld, Raphael Höser, nick rauch.
  • 印地语(印度) KRISHNA TANDON, Alish Vagadiya.
  • 匈牙利语(匈牙利) Levente Borbély.
  • 印尼语(印度尼西亚) Eriawan Kusumawardhono, Riwut Libinuko.
  • 意大利语(意大利) Luigi Bruno.
  • 日语(日本) TENMYO Masakazu, Koichi Makino.
  • 韩语(韩国) 강 성원, Hongju, 관우 정.
  • 拉脱维亚语(拉脱维亚) Andris Vilde, Atis Straujums.
  • 波兰语(波兰) Makabeus Orban, Mariusz Wachowski.
  • 葡萄牙语(巴西) Marcondes Alexandre, Arthur Lima, Marcelo Fernandes, Roberto Fonseca, Yuri Dantas, Luiz Gustavo Nunes, Thiago Takehana.
  • 葡萄牙语(葡萄牙) Diogo Barros.
  • 罗马尼亚语(罗马尼亚) LaServici.
  • 俄语(俄罗斯) Andrey Veselov, Vadim Svitkin, Дмитрий Кирьянов.
  • 西班牙语(西班牙,国际排序) Ricardo Estrada Rdez, Alvaro Enrique Ruano.
  • 泰米尔语(印度) Vijay Rajasekar, Selvakumarasamy G, Pandidurai R.
  • 土耳其语(土耳其) Mehmet Yönügül.
  • 越南语(越南) Hiếu Nguyễn, Van-Tien Hoang, Vương.