2021年8月(版本1.60)

更新 1.60.1: 本次更新解决了这些问题

更新 1.60.2: 本次更新解决了这些问题

下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


欢迎来到2021年8月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:

如果您想在线阅读这些发布说明,请访问更新code.visualstudio.com上。

加入我们的直播,在VS Code团队的直播中,时间是9月2日星期四太平洋时间上午8点(伦敦时间下午4点),观看本次发布的新功能演示,并实时向我们提问。

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

工作台

自动语言检测

在上一个版本中,我们引入了一个实验性功能,用于无标题文件,该功能会根据文件内容自动设置文件的语言模式。自动语言检测功能使用机器学习来猜测语言,机器学习模型完全在您的机器上本地运行。该模型由开源ML库Tensorflow.js和GitHub用户@yoeoGuesslang的ML模型提供支持。

本次发布我们默认启用了自动语言检测功能,并将检测范围扩展到了没有文件扩展名的文件。在Notebooks中,我们提供了一种简单的方法,通过语言选择器来请求语言检测。

我们添加了这个功能,因为我们发现一些VS Code的新用户不知道如何设置语言模式,也不知道这是为了获得VS Code丰富的功能集(语言着色和扩展推荐)所必需的。使新用户能够快速看到VS Code可用的语言功能和扩展,有助于他们在使用编辑器时更快上手。

此外,使用无标题文本编辑器作为草稿纸的高级用户不再需要显式设置语言模式,我们希望这将简化他们的工作流程。

以下是自动语言检测实现的几个有趣场景。

从网上抓取一个示例并将其粘贴到一个未命名的编辑器中:

主题: Panda Theme

"管道到代码"语言检测(展示无扩展名文件的检测):

主题: Panda Theme

在Notebooks语言选择器中的自动检测选项:

主题: Panda Theme

终端编辑器确认对话框

当关闭带有运行子进程的终端编辑器时,显示的对话框现在特定于终端编辑器,并且不再提供“保存”终端的选项。

终端编辑器确认对话框

在编辑器无法恢复时保持打开状态而不是关闭

以前,当编辑器在窗口重新加载或应用程序重启后无法恢复时,编辑器会自动关闭,直到找到一个成功加载的编辑器。这种行为导致了令人沮丧的结果,即精心创建的编辑器布局会因为编辑器关闭而消失。

在此版本中,即使恢复失败,曾经成功打开的编辑器也不会关闭。编辑器会指示问题并提供重试操作的选项:

保持编辑器打开并提供重试选项

设置编辑器中代码块的语法高亮

Fenced code blocks 在设置描述中的代码块现在支持语法高亮:

设置编辑器中TypeScript代码的语法高亮

在侧边打开设置编辑器

现在可以通过使用openToSide参数配置键绑定,在侧边组中打开设置编辑器。

{
  "key": "cmd+,",
  "command": "workbench.action.openSettings",
  "args": {
    "openToSide": true
  }
}

这也适用于workbench.action.openSettingsJson命令。

编辑器

高性能括号对颜色化

编辑器现在支持原生括号对颜色化:

开启和关闭括号对颜色化的并排比较

可以通过设置"editor.bracketPairColorization.enabled": true来启用括号对颜色化。所有颜色都可以主题化,并且最多可以配置六种颜色。

我们实现了这个功能,以解决由Bracket Pair Colorizer扩展(由CoenraadS开发)引起的性能问题。

现在,即使是巨大文档中的更改也会立即反映出来:

自动完成中的内联建议

当自动完成小部件显示时,内联建议现在可以扩展建议预览。如果在自动完成小部件中选择的建议可以由内联完成提供程序扩展,则扩展将以斜体显示。按一次Tab仍然只会接受自动完成建议。再按一次Tab则会接受内联建议。

此功能需要启用建议预览("editor.suggest.preview": true)。

更新的Peek视图

我们已经对Peek视图进行了视觉刷新,以与其他编辑器视图保持一致:

信息项的Peek视图

警告项的Peek视图

错误项的Peek视图

引用视图的Peek视图

终端

自定义绘制框线和块元素字符的渲染

当GPU加速开启时(terminal.integrated.gpuAcceleration),盒绘制和块元素字符现在使用像素完美的自定义字形,而不是使用字体。这意味着,例如,即使你在终端中设置了行高或字母间距,盒子也会被绘制得没有间隙。

终端字形渲染之前有间隙 终端字形渲染之后无间隙

这是一个终端应用程序 Zenith 的示例,它显示了图表部分的框绘制字符以及块元素:

终端渲染框字符和块元素

这可以通过设置 "terminal.integrated.customGlyphs": false 来禁用。

改进某些字体的下划线渲染

在终端中如何渲染下划线存在一些历史问题,其中大多数问题通过切换到WebGL渲染器(默认)得到了解决。但有一个例外,即在Linux上,字体中的下划线字符意外地绘制在单元格的边界下方。

注意下划线下方的行是如何在单元格下方呈现的:

下划线之前渲染在单元格边界下方1像素处

虽然在大多数情况下这工作得很好,但在最下面一行它会失败,因为它是在画布边界之外绘制的。

我们现在通过检测这种字体并将下划线纹理向上移动,直到它在单元格的边界内来解决这个问题。这个解决方案也适用于画布渲染器,之前由于它如何裁剪行以避免重叠,任何行都不会显示下划线。

下划线现在位于单元格的底部边界

重新加载窗口后更快地重新连接

之前,当重新加载窗口时,解析终端缓冲区状态可能需要长达300毫秒,并且还存在损坏的可能性。对于几个繁忙的终端来说,这可能会迅速累积!为了解决这个问题,恢复缓冲区的方法已经从在pty主机上记录大量最近的原始终端事件,改为在pty主机上维护一个无头终端前端,并将所有数据写入其中。

这种方法带来了几个好处:

  • 可以微调要恢复的回滚量。默认值现在是100,这是在速度和数据量之间的良好平衡。可以使用terminal.integrated.persistentSessionScrollback设置更改回滚量。
  • 感谢xterm.js'快速解析器,这应该对CPU使用率的影响最小,并减少pty主机上的总体内存使用。
  • 终端模式现在被明确恢复,这些模式以前可能会被遗漏并导致缓冲区损坏。
  • 不再需要重放昂贵的调整大小事件,因为终端的缓冲区始终与其大小同步。
  • 由于恢复相对较快,所有操作都在单个帧中处理。这意味着宝贵的CPU时间不会浪费在渲染部分恢复的终端上,从而进一步减慢速度。

这种新实现提供的加速程度取决于许多因素,如终端数量、硬件、终端缓冲区大小以及终端中发生的情况。粗略估计,恢复完整的终端缓冲区应该能带来大约5-10倍的加速。

我们还在npm上发布了新的xterm-headless包,因此您可以在自己的项目中使用这项工作。

调试

在WATCH视图中设置值

现在可以使用上下文菜单中的设置值操作在WATCH视图中设置监视表达式的值。

显示在上下文菜单中选择设置值操作的WATCH视图

调试扩展必须选择加入此功能,以便设置值可用。目前,JS-debug、C#和C++扩展支持此功能,但我们预计其他调试扩展很快也会跟进。

次要的用户界面改进

  • VS Code 现在还可以在 VARIABLES 视图、WATCH 视图和调试悬停中检测值的链接。当变量的值是一个链接时,通过点击该链接可以更容易地跟踪该链接。

  • 当启动另一个已经在运行的调试会话实例时,现在会出现一个模态确认对话框,以防止意外启动两个会话。

  • 现在点击编辑器断点槽中的禁用断点将启用该断点,而不是移除它。

  • 当调试会话处于活动状态时,运行到行操作现在可以在编辑器的断点装订线上下文菜单中使用:

新设置

  • 如果你想在调试会话期间避免意外关闭窗口,可以启用新设置debug.confirmOnExit。将此设置为always后,关闭窗口时将提示你确认是否要停止调试会话。

    调试时确认退出

  • 一个新的设置 debug.console.acceptSuggestionOnEnter 控制是否在调试控制台中按下 Enter 时接受建议。Enter 也用于评估在调试控制台中输入的内容,因此此选项使用户能够更好地控制在按下 Enter 时发生的情况。

JavaScript 调试

传统的节点调试器已经消失

VS Code 长期以来都内置了一个 Node.js 调试器,并发布了一个独立的 Chrome 调试器。去年我们为 Node.js 和 Chrome 引入了一个新的调试器,自 VS Code 1.47(2020 年 7 月)以来,它已成为默认选项,并提供了一个“选择退出”的选项。

随着此次发布,旧的调试器已从产品中移除,并在市场上标记为已弃用。如果您是大多数未选择退出新JavaScript调试器的VS Code用户之一,对您来说不会有任何变化。

如果您需要旧的调试器——例如,调试Node.js 6程序——您可以安装[Deprecated] Node Debug[Deprecated] Debugger for Chrome扩展,并分别使用legacy-nodelegacy-chrome启动类型。

改进了异步函数和Node.js内部的步进

你可以设置调试器的skipFiles来避免进入某些代码,包括Node.js的内部代码,这在异步函数中经常会被触发。

然而,Node.js在处理"blackboxed"脚本时并不总是表现出正确的行为,因此在此次迭代中,我们在调试器中引入了“合成黑盒”。这应该会显著提高处理Node.js程序时的可靠性,特别是在进入异步函数时。

在我们的下一个版本中,我们计划默认让调试器跳过Node.js的内部实现。

安装程序

默认情况下为支持的文件类型注册VS Code

Windows 11 引入了一个新的文件资源管理器上下文菜单,将打开方式置于菜单顶部,与打开分组。此更新使得查找所有可用的编辑器并更改默认设置变得更加容易。

遵循新的最佳实践,VS Code的复选框将VS Code注册为关联文件类型的编辑器现在在Windows安装期间默认会被勾选。我们还审查了关联文件类型的列表,并扩展了它,以包括更多经常打开的文件类型。

Windows 11 上的 Microsoft Store

随着即将推出的Windows 11,新的微软商店可以支持更多传统的应用程序类型和安装程序。如果您已经通过Windows Insiders计划测试Windows 11,您现在可以在商店中搜索并安装最新版本的VS Code。安装后,您将拥有与我们网站上提供的用户安装相同的VS Code,并且更新将在应用程序内处理,就像现在一样。

笔记本

Notebooks 现在支持 Markdown 单元格之间的链接:

你可以使用以下方法在Markdown单元格中创建指向标题的链接:

[Link text](#_header-slug)

header-slug 是将标题中的空格或特殊字符替换为 - 的小写文本。上面示例中的链接将跳转到标题 # Header Slug

处理大量输出时的性能改进

我们已经优化了在笔记本中处理大输出的方式,以显著提高性能。

在幕后,VS Code 使用 Uint8Arrays 将笔记本输出存储为二进制数据。以前,在扩展主机进程和渲染器进程之间传输输出数据时,数据首先被转换为数值数组,然后序列化为 JSON。

要理解为什么这对性能不利,考虑一个输出文本的笔记本:Hello Code!。这在内部存储为Uint8Array

new Uint8Array([72, 101, 108, 108, 111, 32, 67, 111, 100, 101, 33]);

该数据长度为11字节。旧实现会将二进制数据转换为JSON字符串:

'[72,101,108,108,111,32,67,111,100,101,33]';

这个字符串有41字节长,是我们原始数据大小的3.5倍以上!这意味着需要传输的额外字节数非常多,接收方现在必须将该字符串解析为JSON,以将其转换回Uint8Array。对于大小为几十MB的笔记本输出,这种解析可能会成为一个显著的瓶颈。

通过新的实现,笔记本输出在传输过程中保持为二进制数据。您可以阅读更多关于如何实现这一点的详细信息在拉取请求中

此修复显著改善了加载包含大量输出保存的笔记本的性能,同时也提高了笔记本在执行过程中生成大量输出时的性能。

onNotebook 激活事件改进

VS Code 在工作区中打开笔记本时,将发出 onNotebook:{type}onNotebook:* 事件,以便笔记本扩展在监听这些事件时可以被激活。以前,VS Code 会在打开文件之前等待所有监听这两个事件的扩展,但现在它只会等待特定笔记本的序列化器被注册。例如,当用户在一个新的工作区中打开一个 ipynb 文件时,内置的 ipynb 序列化器扩展将被激活,文件将立即打开。同时,VS Code 会向所有其他扩展发出激活事件,例如 Jupyter、.NET Interactive 或 Julia 扩展。其他扩展的激活不会减慢文件操作,以确保快速打开笔记本。

笔记本布局自定义

您现在可以直接通过编辑器工具栏自定义笔记本布局设置。

编辑工具栏中可用的笔记本布局自定义操作

语言特性

TypeScript 4.4

VS Code 现在包含了 TypeScript 4.4。此更新带来了对许多新语言功能和改进的支持,包括 静态块新的严格选项。它还增加了新的工具改进,并修复了一些重要的错误。

你可以在TypeScript博客上阅读所有关于TypeScript 4.4的内容。

JavaScript 和 TypeScript 的内联提示

TypeScript 4.4 中最重要的新工具特性是内嵌提示支持。内嵌提示在源代码中添加额外的内联信息,以帮助您理解代码的功能。

参数名称内嵌提示,例如,在函数调用中显示参数的名称:

参数名称内联提示

这可以帮助您一目了然地理解每个参数的含义,这对于接受布尔标志或具有容易混淆的参数的函数尤其有帮助。

要启用参数名称提示,请设置 javascript.inlayHints.parameterNames.enabledtypescript.inlayHints.parameterNames.enabled 设置。有三种可能的值:

  • none - 禁用参数内联提示。
  • literals - 仅显示字面量的嵌入提示(字符串、数字、布尔值)。
  • all - 显示所有参数的内嵌提示。

此外,VS Code 还提供了内嵌提示,显示 JavaScript 和 TypeScript 代码中的隐式类型信息。

变量类型内联提示 显示没有显式类型注释的变量的类型。

设置 - javascript.inlayHints.variableTypes.enabledtypescript.inlayHints.variableTypes.enabled

变量类型内嵌提示

属性类型内嵌提示 显示没有显式类型注释的类属性的类型。

设置- javascript.inlayHints.propertyDeclarationTypes.enabledtypescript.inlayHints.propertyDeclarationTypes.enabled

属性类型内嵌提示

参数类型提示 显示隐式类型参数的类型。

设置 - javascript.inlayHints.parameterTypes.enabledtypescript.inlayHints.parameterTypes.enabled

参数类型内联提示

返回类型内联提示 显示没有显式类型注释的函数的返回类型。

设置 - javascript.inlayHints.functionLikeReturnTypes.enabledtypescript.inlayHints.functionLikeReturnTypes.enabled

返回类型内嵌提示

我们计划继续改进内嵌提示功能,因此请务必分享您对新功能的任何反馈

JavaScript 文件中的拼写建议

VS Code 现在可以帮助你捕捉 JavaScript 文件中的简单拼写错误:

纯JS文件中的拼写建议

只有在相当确定它们是实际错误,而不仅仅是我们的IntelliSense引擎不理解的代码模式时,才会显示拼写建议。您可以阅读更多关于此功能的详细信息在添加此功能的PR中

您也可以通过设置来禁用这些建议:

"javascript.suggestionActions.enabled": false

为了更全面的检查,尝试在你的JavaScript代码中启用完整的语义检查。这不仅可以帮助捕获更多错误,还可以启用几个有用的快速修复。

typescript.tsserver.useSyntaxServer

新的typescript.tsserver.useSyntaxServer设置允许您控制TypeScript是否启动一个专用服务器来快速处理与语法相关的操作,例如计算代码折叠。它取代了现已弃用的typescript.tsserver.useSeparateSyntaxServer设置。

可能的值为:

  • auto - 同时生成一个完整的服务器和一个专门用于语法操作的轻量级服务器。语法服务器用于加速代码折叠等语法操作,并在项目加载时提供智能感知。(默认)
  • always - 使用一个更轻量级的语法服务器来处理所有IntelliSense操作。这个语法服务器只能为已打开的文件提供IntelliSense。
  • never - 不使用专用的语法服务器。使用单一服务器处理所有IntelliSense操作。

预览功能

锁定的编辑器组

随着编辑器区域中的终端的引入,我们收到了用户的反馈,他们感到沮丧的是,终端编辑器会太容易或意外地被文件编辑器替换。默认情况下,文件将始终在活动的编辑器组中打开,因此,即使终端处于活动状态,文件也会打开并隐藏终端。

锁定的编辑器组 提供了一种处理这个问题的新方法,不仅适用于终端,也适用于任何编辑器。如果你打开了多个编辑器组,你现在可以锁定它,可以使用新的命令之一,也可以从 "..." 溢出菜单中进行锁定:

编辑器上下文菜单上的锁定组操作

锁定的组与未锁定的组行为不同:

  • 新编辑器不会在锁定的组中打开,除非用户明确将其移动到那里(例如,通过拖放)。
  • 如果编辑器跳过了锁定的组进行打开,它将在最近使用的未锁定组中打开,或者在锁定的组旁边创建一个新组。
  • 编辑器组的锁定状态在重启后会持久化并恢复。
  • 您也可以锁定空组,以实现更稳定的编辑器布局。
  • 锁定的组会在操作工具栏(右上角)中显示一个锁图标。

锁定编辑器组布局与锁定图标

请参阅以下演示,了解锁定编辑器组在实际操作中的行为。即使Markdown预览处于活动状态,新文件也将在左侧编辑器组中打开:

为此功能添加的命令有:

  • workbench.action.experimentalLockEditorGroup
  • workbench.action.experimentalUnlockEditorGroup
  • workbench.action.experimentalToggleEditorGroupLock

一个新的上下文键activeEditorGroupLocked可用于根据组的锁定状态有条件地绑定命令。

注意:相关的设置和命令在我们最终确定锁定编辑器组的设计之前是实验性的。我们希望您对这个新功能提供反馈,所以请不要犹豫报告问题

自动锁定编辑器组

基于新的锁定编辑器组概念,新的workbench.editor.experimentalAutoLockGroups设置允许您选择在打开时应自动锁定组的编辑器。这仅适用于当编辑器是在其他情况下为空或新的组中第一个打开时。

终端默认配置为自动锁定新组。在下面的短视频中,即使终端处于活动状态,从终端选择的文件也将在左侧编辑器组中打开:

如果您希望Markdown预览自动锁定一个组,您可以将mainThreadWebview-markdown.preview: true添加到experimentalAutoLockGroups设置中。

在接下来的里程碑中,我们将致力于改进设置的用户体验,以便能够选择编辑器而无需知道它们的标识符。相关的设置和命令在我们最终确定锁定编辑器组的设计之前是实验性的。我们再次希望得到您的反馈

在“按文件名搜索”快速选择中支持引号

本次迭代中,我们增加了通过将搜索字符串放在引号中来从“按文件名搜索”快速选择(⌘P (Windows, Linux Ctrl+P))中排除模糊搜索结果的功能。

这种情况下的应用场景:

当查询只有几个字符时:

如果你想减少结果的“杂乱”:

我们喜欢这种引用体验,因为它感觉直观,因为大多数搜索引擎使用类似的机制,但我们希望得到您的反馈。我们也在考虑在问题 #131431中讨论的其他方法。

对扩展的贡献

Jupyter

逐行运行

VS Code 现在支持 Jupyter 笔记本中的逐行运行功能。这是一种简单的调试模式,允许您逐行执行单元格中的代码。要尝试此功能,请确保已安装 ipykernel v6+ 作为您选择的内核,然后选择逐行运行按钮。

调试

还有实验性的支持,可以使用VS Code的完整调试功能来调试Jupyter笔记本。要尝试此功能,请确保已安装ipykernel v6+作为您选择的内核,设置"jupyter.experimental.debugging": true,设置断点,然后选择调试单元格命令。

Jupyter 快捷键

我们将Jupyter经典键绑定提取到一个单独的Jupyter键映射扩展中,如果您更喜欢使用市场中的另一组笔记本键绑定,您可以禁用它。

Python

改进的测试界面

感谢新的测试APIPython扩展已经改进了其测试功能。您现在可以享受更稳定的测试发现、导航和状态渲染体验,以及新功能,如搜索测试、运行选定的测试、重新运行上次执行的测试等!

使用新的Python测试资源管理器运行测试

在终端中从编辑器运行和调试Python文件

您现在可以直接在编辑器中通过Python扩展在终端中运行和调试您的Python文件。

GitHub 拉取请求和问题

GitHub Pull Requests and Issues扩展中,用户强烈要求的展开和折叠所有评论的功能现已可用。所有评论可以通过命令GitHub Pull Requests: Expand All CommentsGitHub Pull Requests: Collapse All Comments来展开和折叠。还有一个设置githubPullRequests.commentExpandState来控制展开和折叠的状态。最后,您还可以从评论界面中折叠所有评论:

折叠所有拉取请求评论按钮

要了解所有新功能和更新,您可以查看扩展的完整0.30.0版本的变更日志

扩展开发

Web扩展

当VS Code在浏览器中运行时,扩展程序也会加载到同样在浏览器中运行的扩展主机中。"Web扩展主机"受到浏览器的限制,扩展程序无法访问本地文件系统或平台功能。为了帮助扩展作者更新他们的扩展以支持在VS Code for the web中运行,现在有一个Web扩展编写指南。在这里,您将了解哪些类型的扩展在Web上效果最佳,如何访问VS Code API,以及如何使用虚拟文件系统。

除了网页扩展指南外,yo code 扩展生成器现在有一个选项可以搭建一个网页扩展,并且还包括对@vscode/test-web模块的支持,以便从命令行测试网页扩展。

如果您还没有见过Visual Studio Code for Web的实际操作,您可以在GitHub仓库的<> Code标签页中按下'.'(句号键),您将启动一个基于网页的VS Code版本,用于浏览和编辑源代码。

命令的简短标题

commands 贡献点允许扩展为命令定义UI属性,如标题、类别或图标。另一方面,菜单是显示命令的“位置”,菜单可能会展示部分或全部命令的UI属性。例如,一些菜单只渲染图标,而其他菜单则渲染标题或类别加标题。作为扩展作者,很难想出一个既适用于全局菜单又适用于本地菜单的命令标题。例如,命令面板可以显示比上下文菜单更多的单词。

为了允许不同的标题,有一个新的shortTitle属性。它允许命令提供一个较短的标题,根据用户界面的不同而工作良好,例如在命令面板中的Notebook: Clear All Cell Output和在笔记本工具栏中的较短Clear All

应用程序主机已添加到环境命名空间

.env 命名空间现在包含了应用程序主机 appHost 属性。appHost 允许扩展开发者确定 VS Code 所运行的环境。示例包括桌面、GitHub Codespaces、github.dev 和 vscode.dev。

RendererContext.workspace.isTrusted 用于笔记本渲染器

新的workspace.isTrusted属性在传递给notebook renderers的上下文对象上,允许扩展作者检查当前工作区是否受信任:

import type { ActivationFunction } from 'vscode-notebook-renderer';

export const activate: ActivationFunction<void> = (ctx) => {
  return {
    renderOutputItem: (outputInfo, element) => {
      if (ctx.workspace.isTrusted) {
        // Render normally. Still take precautions to avoid script injection and
        // only enable as much functionality as your renderer needs.
      } else {
        // Only render safe content. Always make sure it has been properly sanitized.
      }
    }
  }
};

平台特定扩展

我们一直在平台特定扩展方面取得进展,这些扩展允许扩展作者为不同平台(Windows、macOS、Linux)创建单独的扩展版本。我们一直在与Marketplace团队合作开发此功能,并已确定解决方案。在这个里程碑中,我们开始了实现工作,并计划很快将其提供给扩展作者。您可以关注问题 #23251以获取更新并提供反馈。

更新后的codicons

以下新图标已添加到我们的codicon库中:

更新后的codicons示例

  • folder-library
  • run-errors

演练贡献的更新

使用可主题化的SVG作为教程步骤媒体

现在,演练步骤可以在其media对象中指定一个svg属性。除了更好的缩放支持外,SVG还提供了对主题令牌的访问,这可以使媒体在视觉上与工作台的其余部分相匹配。有关更多信息,请参阅我们的指南theming webview content

声明演练中感兴趣的文件

现在,演练支持一个可选的featuredFor参数,该参数列出了给定演练适用的文件类型。当在工作区文件夹中找到这些文件时,演练将以更高的视觉优先级呈现。

任务默认组API

TaskGroupisDefault 属性已经确定。扩展现在可以获取任务,然后读取任务的 groupisDefault 属性,以确定该任务是否为该组的默认任务。

调试器扩展编写

"DebugSessionOptions" 上的新 "managedByParent" 属性

一个新的标志 managedByParent 已被添加到 DebugSessionOptions 类型中。当传递给 startDebugging API 时,它控制诸如 disconnectrestart 之类的生命周期请求是发送到新创建的会话还是其父会话。

调试适配器协议的“showUser”属性

launch请求失败时,VS Code现在将尊重从调试适配器发送的响应中的showUser属性。如果提供了showUser属性并且为false,VS Code将不会显示带有错误的模态对话框。如果showUser属性缺失或为true,VS Code将像以前一样显示错误对话框。

对于其他调试适配器协议(DAP)请求,没有变化。如果showUsertrue,错误将通过通知显示。否则,不会向用户显示任何内容。

VS Code 不再为“noDebug”调试会话注册断点

当DAP的launch请求的noDebug属性设置为true时,VS Code将不再调用任何断点注册DAP请求(setBreakpointssetExceptionBreakpointssetDataBreakpointssetFunctionBreakpointssetInstructionBreakpoints)。

VS Code 现在支持 DAP "setExpression" 请求

如果调试适配器实现了setExpression请求(supportsSetExpression能力为true),VS Code 将在两种情况下使用setExpression

  • 在VARIABLES和WATCH视图中,用于更改变量的值,如果调试适配器不支持setVariable请求(缺少supportsSetVariable能力或为false),并且如果变量具有evaluateName属性且可编辑(VariablePresentationHint中的readOnly属性不为true)。
  • 在WATCH视图中,用于更改可赋值表达式的值,如果监视表达式是可编辑的(VariablePresentationHint中的readOnly属性不为true)。

在DAP错误消息中抑制'Open launch.json'按钮

调试适配器协议允许消息错误响应返回一个url,其中可以找到有关消息的更多信息,以及一个urlLabel,该标签作为打开URL的用户界面呈现给用户。当VS Code在模态对话框中向用户显示消息时,会显示一个按钮,按钮标题为urlLabel。在此版本之前,VS Code还会添加一个标题为打开launch.json的按钮。如果消息的url使用'command'方案,例如command:myExtension.fixError,则不再添加该按钮。

调试适配器协议

新的“memory”事件发布

memory 事件已经完成,现在可以在 Debug Adapter Protocol 的 1.49 版本及相应的 npm 模块中使用。如果调试适配器在 initialize 请求的 supportsMemoryEvent 能力中收到了 true 值,调试适配器可以发出 memory 事件来指示某些内存范围已更新。

提议的扩展API

每个里程碑都伴随着新的提议API,扩展作者可以尝试使用它们。一如既往,我们希望得到您的反馈。以下是您尝试提议API需要做的事情:

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

你不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。

支持类型层次结构

有一个API提案用于TypeHierarchyProvider,它允许扩展为符号提供超类型和子类型。该API已经准备好进行试用,如果您发现问题或有建议,可以在VS Code仓库中输入它们。

在任何地方创建终端

提议的终端位置API允许在面板和编辑器区域中创建终端分割。

查询和事件以确定终端是否已被“交互”

一个新的提议API用于Terminal.state和window.onDidChangeTerminalState,允许查询终端是否已被“交互”。交互意味着数据已发送到进程,可能由于各种原因发生,主要原因是键盘输入。

QuickPickItems中的按钮

有一个提议的API用于在QuickPickItem中添加和处理按钮。我们希望这将使扩展能够提供更丰富的用户交互与快速选择。

快速选择项中的按钮

试试看,让我们知道你的想法。需要注意的是,目前有一个关于Quick Pick滚动位置的已知问题,我们认为这个新提出的API会放大这个问题。我们正在研究一套合适的API来解决这个问题。请通过参与问题讨论告诉我们你的想法。

测试标签

Test tags 是一个提议的API,它提供了一种组织测试的方法,同时也指示哪些测试是可运行的。

非错误测试输出

测试API支持测试失败消息,但之前没有一种方法将非错误输出与特定测试用例关联起来。我们正在评估一种方法,通过向TestRun.appendOutput方法传递可选的TestItemlocation来实现这一点。如果您有任何意见,请在issue #129201上留下反馈!

内联完成提供者:与自动完成小部件的交互

InlineCompletionContext 有一个新字段 selectedCompletionInfo,它包含自动完成小部件中当前所选建议的详细信息。此外,每当用户在自动完成小部件中更改所选项目时,InlineCompletionItemProvider 都会被要求提供内联建议。如果内联建议扩展了所选建议项,则扩展部分将以斜体显示。

工程

修复对RHEL7和Centos7发行版的支持

在VS Code版本1.53中,我们更新了构建镜像以使用较新的Electron版本,这导致了对原生模块的CXXABI要求的更改,从而在某些发行版中破坏了我们的rpm包问题 #115784。随着更新到Electron v13,我们现在能够使用与运行时相同的编译器工具链构建我们的原生模块,特别是我们现在使用Clang并从运行时静态链接libcxx。这使我们能够绕过CXXABI要求,仅增加约10 MB的二进制大小,并恢复对这些发行版的支持。感谢您的耐心和在Insiders上的测试帮助。

文档

VS Code 中的 Julia

有一个新的Visual Studio Code中的Julia主题,描述了在VS Code中使用Julia编程语言的支持,通过Julia扩展。Julia扩展包括丰富的语言功能,如代码补全、代码导航和调试,以及集成的REPL和绘图导航器。

Julia扩展

Azure 机器学习

你可以阅读VS Code中的Azure机器学习概述,了解Azure机器学习扩展如何让你直接从VS Code中使用Azure机器学习基于云的机器学习模型

显著的修复

  • 82489: 使用 "AltGr" 键时键盘输入不正确
  • 115945: 当工具栏停靠时,调试工具栏贡献的命令缺失
  • 118196: 重新启动调试会话时,args-list中的元素未更新
  • 121201: iPad上的菜单选择未正确渲染
  • 124128: 调试停止时,扩展开发窗口未关闭
  • 125259: 调试在启动前未保存 launch.json
  • 126102: SkipFiles 仍然会暂时打开要跳过的文件,导致速度变慢
  • 126911: 扩展调试:停止调试会话不会关闭窗口
  • 128484: 调试:启动失败时禁用模态对话框的选项
  • 129019: 树视图开始时关闭,需要再次刷新(或重新打开)以显示内容
  • 129469: 设置编辑器的输入框可以更大
  • 129645: 在设置界面中启用代码块语法高亮
  • 129844: markdownEnumDescriptions 在设置界面中不会移除 markdown ##,并且在 settings.json 中不会移除 ##
  • 130265: Node 调试器在未处理的 promise 拒绝时不会中断

感谢您

最后但同样重要的是,向本月为VS Code做出贡献的以下人员表示衷心的感谢

对我们问题跟踪的贡献:

vscode 的贡献:

vscode-generator-code 的贡献:

vscode-js-debug 的贡献:

vscode-pull-request-github 的贡献:

debug-adapter-protocol的贡献:

language-server-protocol的贡献:

monaco-editor的贡献:

monaco-html的贡献:

monaco-languages的贡献: