🚀 在 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 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,则手势将在速览视图中打开。

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 仍在积极开发屏幕阅读器支持,因此要使其完全正常工作,还需要进行一些操作

  • 请确保使用最新版本的 Orca master 分支。说明可以在问题 #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 现在为 http 和 https 链接呈现 JS Doc @link 内联标记。在下面的示例图像中,请注意 @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+单击以导航提示支持

终端具有一项功能,可让您 Alt+单击 单元格,光标将导航到该单元格。从历史上看,当在 shell 的提示符中时,这仅适用于单行,即使它是换行的。这已得到改进,可在完整的换行上工作。

Alt+单击可以在换行之间移动 主题: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 Codespaces远程 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 Subsystem for 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 不再转义或引用从调试扩展或调试适配器接收的任何空格。例如,在 UI 中,DAP 变量中或 DAP 输出事件中接收的所有字符串都按原样显示,不进行修改。

这意味着现在由调试扩展或调试适配器决定是否需要在将数据发送到 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

我们修改了 我们之前的提案,该提案关于标准化扩展如何为其 Code Action 贡献文档。根据更新后的提案,现在使用 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")
        }
      }
    ]
  };
  ...
}

当用户请求重构时,文档会在主 Code Action 列表之后呈现。

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

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

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

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

改进的 CI 构建性能

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

针对浏览器运行测试

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

值得注意的修复

  • 61491: SCM: 视图窗格应改进“没有存储库”消息传递
  • 74782: 调查:macOS 公证
  • 82828: autoReveal 高亮显示文件名,而无需始终将其移动到资源管理器中间
  • 8641: macOS:允许鼠标按钮 4 和 5 导航历史记录
  • 87767: VSCode 重新启动调试不再起作用
  • 88038: 不要用自动执行的调试器命令污染 shell 历史记录
  • 89230: 当编辑器获得焦点时,“分组”会被读取
  • 89699: 后退/前进:保留选择
  • 89989: Web:允许在新窗口中打开文件
  • 90075: 资源管理器:支持悬空符号链接
  • 90240: Zen 模式切换关闭后,行号不可见
  • 90876: 列表项应具有角色 '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 本地化 社区成员正在使用 Microsoft 本地化社区平台 (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.