在 VS Code 中试试

2024 年 11 月 (版本 1.96)

更新 1.96.1:此更新解决了这些问题并启用了GitHub Copilot Free 计划

更新 1.96.2:此更新解决了这些问题

更新 1.96.3:此更新解决了这些问题

更新 1.96.4:此更新解决了这些问题

下载:Windows: x64 Arm64 | Mac: 通用 Intel Apple 芯片 | Linux: deb rpm tarball Arm snap


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

如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。Insiders:想尽快试用新功能?您可以下载每夜构建的 Insiders 版本,尽快体验最新更新。

GitHub Copilot

GitHub Copilot Free 计划

我们很高兴宣布全新的 GitHub Copilot 免费套餐。注册 GitHub Copilot Free 计划,您只需要一个 GitHub 帐户。您每月享有一定数量的完成和聊天交互次数,这些次数每月重置。

您可以直接在 VS Code 中注册。请按照Copilot 设置指南中的步骤操作。

Chat view shows the Copilot message and a button that enables you to sign in to use Copilot.

了解更多关于Copilot Free 计划详情和条件的信息。

Copilot Edits

在上一个里程碑中,我们引入了 Copilot Edits (目前处于预览阶段),它允许您使用自然语言快速编辑多个文件。从那时起,我们一直在迭代改进此体验。您可以通过在命令中心打开 Copilot 菜单,然后选择“打开 Copilot Edits”,或通过触发 来试用 Copilot Edits。

进度和编辑器控件

Copilot Edits 可以对不同文件进行多项更改。现在,随着编辑的流入,您可以更清楚地看到其进度。借助编辑器叠加控件,您可以轻松地循环查看所有更改并接受或放弃它们。

将聊天会话移动到 Copilot Edits

您可以使用聊天视图来探索更改代码的一些想法。现在,您可以将聊天会话移动到 Copilot Edits,而不是应用单独的代码块,以应用会话中的所有代码建议。

Edit with Copilot showing for a chat exchange.

工作集建议文件

在 Copilot Edits 中,工作集决定了 Copilot Edits 可以建议更改的文件。为了帮助您向工作集添加相关文件,对于 Git 仓库,Copilot Edits 现在可以根据您已添加的文件建议更多文件。例如,Copilot Edits 将建议经常与您已添加的文件一起更改的文件。

Copilot 在工作集中的 添加文件 按钮旁边显示建议的文件。您也可以选择 添加文件,然后选择 相关文件,从建议的文件列表中进行选择。

重启后恢复编辑会话

重启 VS Code 后,编辑会话现在可以完全恢复。这包括工作集、接受状态以及所有过去编辑步骤的文件状态。

从资源管理器、搜索和编辑器添加到工作集

您可以使用“搜索”视图中搜索结果和“资源管理器”视图中文件的新 将文件添加到 Copilot Edits 上下文菜单操作,将文件添加到您的 Copilot Edits 工作集。此外,您还可以从编辑器上下文菜单中将文本选区附加到 Copilot Edits。

Add a file from the explorer view to Copilot Edits

使用 Copilot 调试

配置调试可能会很棘手,尤其是当您正在处理新项目或语言时。在这个里程碑中,我们引入了一个新的 copilot-debug 终端命令,帮助您使用 VS Code 调试程序。您可以通过在通常运行的命令前加上 copilot-debug 来使用它。例如,如果您通常使用命令 python foo.py 运行程序,现在可以运行 copilot-debug python foo.py 来启动调试会话。

程序退出后,您可以选择重新运行程序,或者查看、保存或重新生成用于调试程序的 VS Code 启动配置

终端在调试会话后显示重新运行、重新生成、保存或查看启动配置的选项。 主题:Codesong (在 vscode.dev 上预览)

任务支持

Copilot 的调试功能,包括 copilot-debug/startDebugging 意图,现在会根据需要为需要在调试前进行编译的代码生成 preLaunchTask。这对于 Rust 和 C++ 等编译语言通常是必需的。

添加上下文

我们添加了新方法,可以将符号和文件夹作为上下文包含在 Copilot Chat 和 Copilot Edits 中,使您在工作流程中更容易引用相关信息。

符号

现在可以通过将符号从大纲视图或面包屑拖放到聊天视图中,轻松地将它们添加到 Copilot Chat 和 Copilot Edits 中。

我们还在聊天输入中引入了符号完成。通过键入 # 后跟符号名称,您将看到最近处理过的文件中的符号建议。

要引用整个项目中的符号,您可以使用 #sym 打开全局符号选择器。

文件夹

现在可以将文件夹从资源管理器、面包屑或其他视图拖放到 Copilot Chat 中,作为上下文添加。

将文件夹拖放到 Copilot Edits 中时,该文件夹中的所有文件都将包含在工作集中。

Copilot 使用图表

VS Code 扩展可以使用 VS Code API 在 Copilot 的功能基础上进行构建。您现在可以在运行时状态视图中看到扩展的 Copilot 使用图表。此图表显示了该扩展在过去 30 天内发出的聊天请求数量。

Copilot usage graph in the Runtime Status view

提交消息生成的自定义指令

Copilot 可以根据您所做的更改帮助您生成提交消息。在这个里程碑中,我们增加了在生成提交消息时支持自定义指令的功能。例如,如果您的提交消息需要遵循特定格式,您可以在自定义指令中进行描述。

您可以使用 github.copilot.chat.commitMessageGeneration.instructions 设置来指定自定义指令,或指定工作空间中包含自定义指令的文件。这些指令将附加到用于生成提交消息的提示中。获取关于如何使用自定义指令的更多信息。

内联聊天

在此里程碑中,我们进一步改进了内联聊天的用户体验:我们使进度报告更加微妙,流式传输更改时禁用波浪线,并且检测到的命令呈现得更好看。

此外,我们继续改进了伪代码检测,当某行主要是自然语言时,现在会显示提示,您可以继续使用内联聊天。此功能允许您在编辑器中键入伪代码,然后将其用作内联聊天的提示。您也可以通过按下 ⌘I (Windows、Linux Ctrl+I) 来触发此流程。

Inline Chat hint for a line that is dominated by natural language.

此外,有一个新的实验性设置,可以在空行上显示内联聊天提示。可以通过 inlineChat.lineEmptyHint 设置启用此功能。默认情况下,此设置处于禁用状态。

终端聊天

终端内联聊天进行了全新的外观改进,使其外观和感觉更接近编辑器内联聊天

Terminal inline chat looks a lot like editor chat now

以下是一些值得注意的其他改进

  • 小部件的布局和定位得到改进,整体行为更好
  • 有一个模型选择器
  • 底部的按钮现在更加一致

@workspace 的性能改进

当您使用 @workspace 向 Copilot 询问当前打开的工作空间时,我们首先需要将工作空间缩小到一组相关的代码片段,以便将其作为上下文交给 Copilot。如果您的工作空间由 GitHub 仓库支持,我们可以通过使用 GitHub 代码搜索快速找到这些相关的片段。但是,由于代码搜索索引跟踪的是仓库的主分支,因此我们无法依赖它来处理本地更改或在分支上时使用。

在此里程碑中,我们努力将 GitHub 搜索的速度优势带到分支和拉取请求中。这意味着我们现在不仅搜索基于仓库主分支的远程索引,还搜索任何本地更改的文件。然后我们将这些结果合并在一起,为 Copilot 提供一组快速且最新的片段来处理。您可以阅读更多关于GitHub 代码搜索以及如何启用它的信息。

辅助功能

代码操作辅助功能信号

某些代码操作可能需要很长时间才能完成,例如调用外部服务生成图像 alt 文本的快速修复。它们何时触发或完全应用可能并不明显。因此,我们添加了辅助功能信号来指示代码操作已触发或已应用。

您可以使用 accessibility.signals.codeActionTriggeredaccessibility.signals.codeActionApplied 设置启用这些信号。

REPL 中的自动焦点管理

我们引入了一个新设置,以提高在 REPL 中工作时的辅助功能。使用 accessibility.replEditor.autoFocusReplExecution,您现在可以指定每当执行代码时,焦点是保持不变 (none),移动到输入框 (input),还是转移到最近执行的单元格 (lastExecution)。默认情况下,焦点移动到输入框。

工作台

改进的扩展搜索结果

当您在“扩展”视图中使用自由文本搜索扩展时,已安装的扩展现在会出现在搜索结果的顶部。这使得在搜索市场时更容易找到和管理您已安装的扩展。

Installed extensions shown at top of search results.

从“扩展”视图下载扩展

您现在可以通过在“扩展”视图中扩展的上下文菜单中使用下载操作,直接从 VS Code 下载扩展。如果您想在不安装扩展的情况下下载它,这会很有用。

Context menu option to download an extension from the Extensions view.

扩展磁盘空间

您现在可以在“扩展”编辑器中查看扩展在磁盘上的内存使用情况。这可以帮助您了解扩展占用了多少磁盘空间。

Extension memory usage on disk shown in the Extensions view.

资源管理器中的查找改进

在 9 月发布版本中,我们引入了在资源管理器中查找整个项目文件(此功能以前不可用)的功能。然而,此次更新暂时取消了高亮模式并限制了某些操作。

在此发布版本中,我们重新引入了高亮模式。此功能允许您轻松定位工作空间中的文件和文件夹,并高亮显示匹配结果,以提高可见性。此外,我们还在折叠的文件夹上引入了一个新的视觉指示器,显示其中是否隐藏了匹配项。

筛选切换仍然可用,使您能够通过隐藏不匹配的项目来只关注与您的查询匹配的文件和文件夹。我们还重新启用了之前发布版本中不得不禁用的所有上下文菜单操作。

我们还改进了使用查找控件时的用户体验。当滚动到文件资源管理器的顶部时,顶部会创建额外的空间,确保控件不会阻挡您的搜索结果。

The find control is rendered above the first file or folder in the explorer when scrolled to the top.

在主要侧边栏和辅助侧边栏之间移动视图

您之前已经可以通过拖放或使用 移动视图 命令将视图容器移动到另一个位置。您现在可以直接在视图容器上使用“移动到”上下文菜单操作,将其在主要侧边栏、辅助侧边栏或面板区域之间移动。

隐藏标题区域中的导航控件

有些人喜欢让标题区域尽可能干净。我们添加了一个新设置 workbench.navigationControl.enabled,允许您在标题区域中隐藏前进/后退按钮。

您还可以通过右键单击标题区域,然后选择 导航控件 来访问此设置。

Navigation Controls context menu when right-clicking the VS Code title area.

编辑器

配置粘贴和拖放行为

当您将文件拖放到文本编辑器中或复制粘贴文件时,VS Code 提供了多种方法将其插入到该文件中。默认情况下,VS Code 会尝试插入文件的相对于工作空间的路径。现在您可以使用拖放/粘贴控件来切换资源的插入方式。扩展程序还可以提供自定义的编辑,例如在 Markdown 中,它提供了插入 Markdown 链接的编辑

使用新的 editor.pasteAs.preferenceseditor.dropIntoEditor.preferences 设置,您现在可以指定默认使用哪种编辑类型。例如,如果您希望复制/粘贴始终插入粘贴文件的绝对路径,只需设置

"editor.pasteAs.preferences": [
    "uri.path.absolute"
]

这些设置是编辑类型的有序列表。默认情况下应用首选类型中的第一个匹配编辑。在应用默认编辑后,您仍然可以使用拖放/粘贴控件更改为不同类型的编辑。

这些新设置与我们的 JavaScript 和 TypeScript 中新的粘贴时添加导入支持 配合得很好。此功能在跨 JavaScript 或 TypeScript 文件复制和粘贴代码时自动添加导入。为避免干扰您的工作流程,默认情况下,我们决定粘贴只插入纯文本,而将 paste with imports 作为粘贴控件中的一个选项提供。但是,如果您希望 VS Code 始终尝试粘贴时添加导入,只需设置

"editor.pasteAs.preferences": [
    "text.updateImports"
]

现在,VS Code 会在可能的情况下自动尝试粘贴时添加导入,如果粘贴时添加导入的编辑不可用,则回退到粘贴纯文本。目前,此功能仅适用于 JavaScript 和 TypeScript,但我们希望随着时间的推移,更多语言将采用此支持。

最后,您现在还可以在设置 editor.action.pasteAs 键绑定时指定首选的粘贴样式。下面的键绑定将始终尝试粘贴并更新导入

{
  "key": "ctrl+shift+v",
  "command": "editor.action.pasteAs",
  "args": {
    "preferences": ["text.updateImports"]
  }
}

保留编辑器查找历史记录

查找控件现在可以在会话之间保留搜索历史记录,并在 VS Code 重启后恢复。搜索历史记录按工作空间存储,可以通过 editor.find.history 设置禁用。

覆盖模式

您知道吗,VS Code 以前不支持在编辑器中覆盖文本,除非您安装了 Vim 键绑定?应用户的普遍要求,我们现在添加了覆盖模式,以便在输入时覆盖编辑器中的文本,而不是插入文本。此功能在编辑 Markdown 表格时非常有用,您可以保持表格单元格边界的整齐对齐。

此模式可以通过命令 视图:切换覆盖/插入模式 或使用键盘上的 Insert 键进行切换。处于覆盖模式时,状态栏会显示 OVR 指示符。

可以通过使用 editor.overtypeCursorStyle 设置来更改覆盖模式下的光标样式。此外,还有一个设置 editor.overtypeOnPaste,用于确定在覆盖模式下粘贴是覆盖还是插入。默认行为是插入粘贴的文本。

源代码管理

Git blame 信息(实验性)

在此里程碑中,我们添加了实验性支持,通过编辑器装饰和状态栏项显示 blame 信息。您可以使用 git.blame.editorDecoration.enabledgit.blame.statusBarItem.enabled 设置启用此功能。您可以将鼠标悬停在 blame 信息上查看更多提交详情。

您可以使用 git.blame.editorDecoration.templategit.blame.statusBarItem.template 设置自定义在编辑器和状态栏中显示的消息格式。您可以使用变量来表示最常见的信息。例如,以下模板显示提交的主题、作者姓名和作者的相对日期

{
  "git.blame.editorDecoration.template": "${subject}, ${authorName} (${authorDateAgo})"
}

如果您想调整编辑器装饰的颜色,请使用 git.blame.editorDecorationForeground 主题颜色。

请试用此实验性功能并告诉我们您的想法。

源代码管理图标题操作

根据用户反馈,我们已将“拉取”和“推送”操作重新添加回“源代码管理图”视图标题栏。如果当前历史项引用在“源代码管理图”中显示,则启用这些操作。

如果您不想使用这些操作或“源代码管理图”视图标题栏中的任何其他操作,可以右键单击标题栏并将其隐藏。

Source Control Graph title actions and context menu to hide specific items.

Notebooks

跨单元格选择高亮

Notebooks 现在支持选择高亮显示,允许基于文本选择跨多个单元格进行高亮显示。这由现有设置 editor.selectionHighlight 控制。

多光标:选择查找匹配项的所有出现

Notebooks 现在支持 选择查找匹配项的所有出现 的键盘快捷方式。此命令 ID 为 notebook.selectAllFindMatches,默认情况下可以使用按键 ⇧⌘L (Windows, Linux Ctrl+Shift+L) 使用。

运行 Markdown 部分中的单元格

Notebooks 现在将 运行部分中的单元格 操作暴露给 Markdown 单元格的单元格工具栏。如果 Markdown 单元格具有标题,则执行包含在该部分及其子部分中的所有单元格。如果没有标题,则尽可能执行周围部分中的所有单元格。

单元格执行时间详细度

单元格状态栏中的执行时间信息现在有一个增加详细度的选项。可以通过 notebook.cellExecutionTimeVerbosity 设置开启此功能,除了持续时间外,还可以显示执行时间戳。

Verbose cell execution time within cell status bar.

终端

连字支持

终端现在支持连字,无论是否使用GPU 加速。可以通过 terminal.integrated.fontLigatures 设置开启此功能

Fonts that support ligatures like ->, ==>, and so on will now visually look like single characters

为了使用此功能,请确保您也使用了支持连字的字体 terminal.integrated.fontFamily

用于自定义终端选项卡的新变量

终端选项卡中显示的文本由 terminal.integrated.tabs.titleterminal.integrated.tabs.description 设置决定,这些设置允许使用一组变量。我们现在支持以下新变量

  • ${shellType} - 终端中正在使用的 shell 的检测类型。这与默认值类似,但例如在运行 git 命令时不会变为 git

  • ${shellCommand} - 在终端中正在运行的命令。这需要shell 集成

    alt text

  • ${shellPromptInput} - 在终端中正在运行的命令或当前检测到的提示输入。这需要shell 集成

    Typing "echo hello" in the terminal will show "echo hello|" in the tab when configured

运行最近命令现在显示历史源文件

运行最近命令的 shell 集成功能现在包含命令源的完整大小标题,包括相关的历史文件以及一个方便的打开按钮。

alt text

此命令的默认键绑定是 Ctrl+Alt+R

格式为 /path/to/file.ext, <line> 的链接现在应该在终端中被检测为链接。

测试

可归因覆盖率

在此里程碑中,我们最终确定了一个 API,使扩展能够提供按测试划分的覆盖率,以便您可以精确查看任何给定测试执行了哪些代码。当可归因覆盖率可用时,在“测试覆盖率”视图、编辑器操作、开启时的“测试覆盖率”工具栏(通过 测试:测试覆盖率工具栏 命令)或直接使用 测试:按测试筛选覆盖率 命令中,都可以使用筛选按钮。

主题:Codesong (在 vscode.dev 上预览)

重做的内联失败消息

我们重做了测试失败消息,使其既更引人注目又更不突兀。这在繁忙的场景中特别有用,例如在 SCM 或 Copilot Edits 的 diff 中。选择失败消息仍然会打开一个窥视控件,显示失败的完整详细信息。

Image of new test error messages in the editor.

持续运行 UI 的改进

以前,持续测试运行的全局状态(通过“测试资源管理器”视图中的“眼睛”图标切换)会使用默认的运行配置集来开启或关闭持续运行。

我们重做了持续运行 UI,使其包含一个下拉菜单,可以按配置单独开启或关闭持续运行。选择指示器会切换上次使用的运行配置集的状态(开启或关闭)。

语言

TypeScript 5.7

我们的 JavaScript 和 TypeScript 支持现在使用 TypeScript 5.7。此主要更新包括多项语言和工具改进,以及重要的错误修复和性能优化。

您可以在 TypeScript 博客上阅读有关 TypeScript 5.7 版本的所有信息。我们在以下部分中还包含了一些工具亮点。

粘贴时带上 JavaScript 和 TypeScript 的导入

厌倦了在文件之间移动代码后不得不添加导入?试试适用于 TypeScript 5.7+ 的“粘贴时带导入”功能。现在,无论何时您在 JavaScript 或 TypeScript 文件之间复制和粘贴代码,VS Code 都可以为粘贴的代码添加导入。

请注意,不仅添加了导入,甚至为粘贴的代码中使用的本地变量添加了一个新的导出!

虽然我们认为此功能可以节省大量时间,但我们也担心会干扰您现有的工作流程。因此,默认情况下,我们保持复制和粘贴始终只插入粘贴的文本。如果存在一个粘贴时带导入的编辑选项,您就会看到粘贴控件,通过它可以选择粘贴时带导入的编辑。

Paste control that shows options to insert plain text or paste with imports.

如果您偏好始终粘贴时带导入,您可以使用新的 editor.pasteAs.preferences 设置

"editor.pasteAs.preferences": [
    "text.updateImports"
]

如果存在编辑选项,这将始终尝试粘贴时带导入。

您也可以设置快捷键以便在可用时进行粘贴时带导入

{
  "key": "ctrl+shift+v",
  "command": "editor.action.pasteAs",
  "args": {
    "preferences": ["text.updateImports"]
  }
}

如果您愿意,甚至可以反过来,将粘贴时带导入设为默认行为,并添加快捷键以粘贴纯文本

"editor.pasteAs.preferences": [
    "text.updateImports"
]
{
  "key": "ctrl+shift+v",
  "command": "editor.action.pasteAs",
  "args": {
    "preferences": ["text.plain"]
  }
}

最后,如果您想完全禁用粘贴时带导入,可以使用 typescript.updateImportsOnPaste.enabledjavascript.updateImportsOnPaste.enabled

远程开发

远程开发扩展包允许您将开发容器 (Dev Container)、通过 SSH 连接的远程机器或远程隧道 (Remote Tunnels),或者适用于 Linux 的 Windows 子系统 (WSL) 作为全功能的开发环境使用。

亮点包括

  • remote-ssh Copilot 聊天参与者
  • 增强的会话日志记录

您可以在远程开发发行说明中了解更多有关这些功能的信息。

企业支持

配置允许的扩展

现在,您可以使用 extensions.allowed 设置控制可以在 VS Code 中安装哪些扩展。此设置允许您按发布者、特定扩展和版本指定允许或阻止的扩展。如果某个扩展或版本被阻止,即使已安装,它也会被禁用。您可以指定以下类型的扩展选择器

  • 允许或阻止来自发布者的所有扩展
  • 允许或阻止特定扩展
  • 允许特定扩展版本
  • 允许特定扩展版本和平台
  • 仅允许扩展的稳定版本
  • 仅允许来自发布者的稳定扩展版本

以下 JSON 片段展示了不同设置值的示例

"extensions.allowed": {
    // Allow all extensions from the 'microsoft' publisher. If the key does not have a '.', it means it is a publisher ID.
    "microsoft": true,

    // Allow all extensions from the 'github' publisher
    "github": true,

    // Allow prettier extension
    "esbenp.prettier-vscode": true,

    // Do not allow docker extension
    "ms-azuretools.vscode-docker": false,

    // Allow only version 3.0.0 of the eslint extension
    "dbaeumer.vscode-eslint": ["3.0.0"],

    // Allow multiple versions of the figma extension
    "figma.figma-vscode-extension": ["3.0.0", "4.2.3", "4.1.2"],

    // Allow version 5.0.0 of the rust extension on Windows and macOS
    "rust-lang.rust-analyzer": ["5.0.0@win32-x64", "5.0.0@darwin-x64"],

    // Allow only stable versions of the GitHub Pull Requests extension
    "github.vscode-pull-request-github": "stable",

    // Allow only stable versions from redhat publisher
    "redhat": "stable"
}

通过发布者 ID 指定发布者。如果一个键不包含句点 (.),则将其视为发布者 ID。如果一个键包含句点,则将其视为扩展 ID。目前不支持使用通配符。

您可以使用microsoft作为发布者 ID 来指代 Microsoft 发布的所有扩展,即使它们可能具有不同的发布者 ID。

不支持版本范围。如果要允许一个扩展的多个版本,必须单独指定每个版本。要按平台进一步限制版本,请使用@符号指定平台。例如,"rust-lang.rust-analyzer": ["5.0.0@win32-x64", "5.0.0@darwin-x64"]。更多详细信息,请参阅企业文档

管理员还可以通过 Windows 上的组策略配置此设置。有关更多信息,请参阅企业文档中的Windows 组策略部分。

使用预安装的扩展程序设置 VS Code

您可以为 VS Code 设置一组预安装的扩展(引导)。此功能在您准备虚拟机镜像、虚拟机或云工作站时非常有用,这些环境会预安装 VS Code,并且特定扩展会立即可供用户使用。

注意:目前仅在 Windows 上支持预安装扩展。

请按照以下步骤引导扩展

  1. 在 VS Code 安装目录中创建一个名为 bootstrap\extensions 的文件夹。

  2. 下载要预安装扩展的VSIX 文件,并将其放入 bootstrap\extensions 文件夹中。

  3. 当用户首次启动 VS Code 时,bootstrap\extensions 文件夹中的所有扩展将在后台静默安装。

用户仍然可以卸载预安装的扩展。卸载扩展后重新启动 VS Code 不会重新安装该扩展。

对扩展的贡献

Python

Python 环境扩展

在此版本中,我们推出了 Python 环境扩展,现已在 Marketplace 上提供预览版。

此扩展简化了 Python 环境管理,提供了一个 UI 来创建、删除和管理环境,以及用于安装和卸载包的包管理功能。

它通过各种 API 设计用于与您偏好的环境管理器无缝集成,默认支持全局 Python 解释器、venv 和 Conda。开发人员可以构建扩展,以添加对其喜欢的 Python 环境管理器的支持,并与我们的扩展 UI 集成,从而增强功能和用户体验。

您可以在 Marketplace 中下载 Python 环境扩展,并将其与 Python 扩展的预发布版本一起使用。

Python 测试增强功能

  • pytest 的 --rootdir 参数现在根据您的工作区中是否存在 python.testing.cwd 设置动态调整。
  • 现在,重新启动测试调试会话只会重新运行指定的测试。
  • 已更新覆盖率支持以处理 NoSource 异常。
  • 支持 pytest-describe 插件,并在 UI 中进行测试检测和执行。
  • Testing Rewrite 现在利用 FIFO 而非 UDS 进行进程间通信,允许用户在其自己的测试设计中利用 pytest_socket 等 pytest 插件。
  • 重写接近默认状态:此版本解决了测试重写中的最后一个已知问题,除非出现更多问题,否则重写实验将在 2025 年初关闭并将重写设置为默认。

Python REPL 增强功能

  • 向 Native REPL 智能发送后焦点留在编辑器上
  • 重新加载后 Native REPL 处理得到改进
  • 修复 VS Code 终端中 Python 3.13 的缩进错误问题

Pylance “full” 语言服务器模式

python.analysis.languageServerMode 设置现在还支持 full 模式,使您能够利用 Pylance 的完整功能范围和最全面的 IntelliSense 体验。值得注意的是,这会以牺牲性能为代价,因为它可能导致 Pylance 占用大量资源,特别是在大型代码库中。

根据 python.analysis.languageServerMode 设置是 lightdefault 还是 full,它现在会更改以下设置的默认值

设置 light default full
python.analysis.exclude ["**"] [] []
python.analysis.useLibraryCodeForTypes false true true
python.analysis.enablePytestSupport false true true
python.analysis.indexing false true true
python.analysis.autoImportCompletions false false true
python.analysis.showOnlyDirectDependenciesInAutoImport false false true
python.analysis.packageIndexDepths [ { "name": "sklearn", "depth": 2 }, { "name": "matplotlib", "depth": 2 }, { "name": "scipy", "depth": 2 }, { "name": "django", "depth": 2 }, { "name": "flask", "depth": 2 }, { "name": "fastapi", "depth": 2 } ] [ { "name": "sklearn", "depth": 2 }, { "name": "matplotlib", "depth": 2 }, { "name": "scipy", "depth": 2 }, { "name": "django", "depth": 2 }, { "name": "flask", "depth": 2 }, { "name": "fastapi", "depth": 2 } ] { "name": "", "depth": 4, "includeAllSymbols": true }
python.analysis.regenerateStdLibIndices false false true
python.analysis.userFileIndexingLimit 2000 2000 -1
python.analysis.includeAliasesFromUserFiles false false true
python.analysis.functionReturnTypes false false true
python.analysis.pytestParameters false false true
python.analysis.supportRestructuredText false false true
python.analysis.supportDocstringTemplate false false true

TypeScript

TypeScript 可展开悬停提示(实验性)

在这个里程碑中,我们实现了从 TS 服务器查看展开/收缩的信息。该扩展使用可展开悬停提示 API 在编辑器悬停提示中显示 +- 标记,以显示更多或更少的信息。

可以使用 typescript.experimental.expandableHover 启用此实验性设置。此设置要生效,您的 TypeScript 版本必须是 5.8 或更高。您可以使用 TypeScript: Select TypeScript Version... 命令更改 TypeScript 版本。

Microsoft Account 现在使用 MSAL(在 Windows 上支持 WAM)

为了确保 Microsoft 身份验证有一个强大的安全基线,我们在 Microsoft Account 扩展中采用了Microsoft 身份验证库 (Microsoft Authentication Library)

这项工作的突出功能之一是 WAM (Web Account Manager... 也称为Broker) 集成。简单来说,我们现在不是通过浏览器进行 Microsoft 身份验证流程,而是直接与操作系统通信,这是获取 Microsoft 身份验证会话的推荐方式。此外,它速度更快,因为我们可以利用您已登录操作系统的账户。

An authentication popup that the OS shows over VS Code.

如果您在此新流程中看到任何问题,请告诉我们。如果您确实看到一个重大问题并需要恢复到旧的 Microsoft 身份验证行为,您可以使用 microsoft-authentication.implementation(将其设置为 classic 并重新启动 VS Code)进行操作,但请记住,此设置不会存在太久。因此,如果您在使用 MSAL 流程时遇到问题,请提交问题。

扩展创作

@vscode/chat-extension-utils

我们的聊天语言模型扩展 API 已可用数月,允许扩展作者与 GitHub Copilot 集成。但我们发现使用 LLM 并构建高质量的聊天扩展本身就非常复杂,特别是如果您想利用工具调用功能。

我们发布了一个 npm 包 @vscode/chat-extension-utils,旨在尽可能轻松地启动和运行聊天参与者。它接管了您原本需要自己完成的一些事情,这样您的聊天参与者只需几行代码即可实现。该包还包含一系列有用的高质量元素,可与@vscode/prompt-tsx一起使用。

您可以在chat-extension-utils 仓库中查看完整的文档,并在示例聊天扩展中看到它的实际应用。我们新的LanguageModelTool API 文档也描述了如何使用它。

可归因覆盖率 API

测试覆盖率 API 现在允许扩展按每个测试提供覆盖率信息。要实现此 API,请填充 FileCoverage 上的 includesTests?: TestItem[] 属性,以指示在该文件中执行了代码的测试,并实现 TestRunProfile.loadDetailedCoverageForTest 以提供语句和声明覆盖率。

请参阅上面的可归因覆盖率部分以获取用户看到的示例。

向 JavaScript 调试终端贡献

JavaScript 调试器现在有一个机制,允许其他扩展参与创建 JavaScript 调试终端。这使得框架或 Node.js 之外的运行时能够在熟悉的同一位置启用调试。有关更多信息,请参阅JavaScript 调试器文档

Node.js fetch API 的代理支持

全局 fetch 函数现在默认启用代理支持(http.fetchAdditionalSupport)。这类似于已经有代理支持的 https 模块。

预览功能

粘贴代码以附加聊天上下文

以前,您已经可以将文件作为上下文附加到 Copilot Chat。为了对上下文进行更精细的控制,您现在可以粘贴代码片段以将其作为上下文附加到聊天中。这将添加必要的文件信息和相应的行号。您只能粘贴来自当前工作区文件中的代码。

要尝试此功能,请复制一些代码并将其粘贴到内联聊天、快速聊天或聊天视图中。选择出现的粘贴控件,然后选择 Pasted Code Attachment. 另外,您也可以设置 editor.pasteAs.preferences 设置

"editor.pasteAs.preferences": [
    "chat.attach.text"
]

Attaching code as context in Copilot Chat using the paste control.

更多 shell 的终端补全

我们在之前的迭代中为 pwsh 添加了实验性终端补全支持。在此版本中,我们开始着手将其扩展到其他 shell。目前主要针对 bashzsh,但由于这种新方法由扩展主机 API 提供支持,我们计划为大多数 shell 提供通用支持。

您可以通过设置 terminal.integrated.suggest.enabledterminal.integrated.suggest.enableExtensionCompletions 来试用当前的正在进行的工作。目前仅支持 cdcodecode-insiders 参数。

The command  is typed on the terminal, which shows suggestions. Then  is typed and options are provided,  is selected. Completions are requested with ctrl+space and all locales are shown.  is typed and the list is filtered to  and .

提议的 API

Quick Pick 上提议的值选择 API

对于 InputBox,您已经能够设置“值选择”,这使得您可以以编程方式选择部分或全部输入内容。在此里程碑中,我们在 QuickPick 中添加了一个提议的值选择 API。

以下是可能的样子示例

const qp = vscode.window.createQuickPick();
qp.value = '12345678';
qp.valueSelection = [4, 6];
qp.items = [
  { label: '12345678', description: 'desc 1' },
  { label: '12345678', description: 'desc 2' },
  { label: '12345678', description: 'desc 3' }
];
qp.show();

A couple of characters are selected in the quick pick's input box.

试用valueSelectionInQuickPick 提议,并通过此 GitHub 问题告诉我们您的想法!

提议的本地窗口句柄 API

在此里程碑中,我们添加了一个新的提议 API,用于检索焦点窗口的本地窗口句柄。本地窗口句柄是一个操作系统概念,它本质上提供了一个指向特定窗口的指针。如果您正在与本地代码交互并且需要(例如)在窗口顶部渲染本地对话框,这将非常有用。

declare module 'vscode' {
  export namespace window {
    /**
     * Retrieves the native window handle of the current active window.
     * This will be updated when the active window changes.
     */
    export const nativeHandle: Uint8Array | undefined;
  }
}

这是专为 Microsoft 身份验证采用 MSAL 而添加的,以便我们可以将本地句柄传递给操作系统,以便它可以在 VS Code 上方渲染身份验证对话框。

如果您有使用案例或对nativeWindowHandle 提议有反馈,请通过此 GitHub 问题告诉我们您的想法!

工程改进

通过 vscode-unpkg 服务优化扩展更新

为了减轻 Marketplace 基础设施的负载,VS Code 现在使用新添加的 vscode-unpkg 服务的端点来检查扩展更新。该服务实现了具有 10 分钟 TTL 的服务器端缓存,这显著减少了对 Marketplace 的直接请求数量。此优化由 extensions.gallery.useUnpkgResourceApi 设置控制(默认启用)。

如果您发现扩展更新有问题,可以使用 extensions.gallery.useUnpkgResourceApi 禁用此功能,并恢复到直接的 Marketplace 版本检查。

编辑器中 GPU 加速的基础工作

我们很高兴地宣布,我们已经开始着手在编辑器中启用 GPU 加速,类似于终端。这项工作的目标是通过主要降低输入延迟和提高滚动性能来改善整体编码体验。

这仍处于早期阶段,尚未准备好进行测试,但我们想分享一些关于已取得进展的详细信息

  • GPU 渲染器在后台使用 WebGPU。
  • 我们目前更注重功能对等和正确性,而非性能。
  • 启用 GPU 加速时,存在一种回退机制,允许在未完全支持时将行“回退”到 DOM 渲染。这意味着我们可以早期进行自我托管,目前不兼容的行将使用 DOM 方法显示。目前回退的一些示例:超过 200 个字符的行,带有某些 Monaco 装饰(例如,淡化未使用的变量)的行,换行的行等等。
  • Monaco 的内联装饰允许对包含字符的实际元素进行样式设置,这对该功能提出了巨大挑战,因为它们是使用 CSS 进行样式设置的。我们用来支持大多数内联装饰而不会破坏或更改 API 的方法是检测附加到这些装饰的 CSS,然后支持一部分常见的 CSS 属性,如果不支持所有样式则回退。

这是该功能实际应用时的截图。注意,在装订线中的黄线告诉我们哪些行正在使用回退渲染。此特定案例由于 dontShow 参数带有内联装饰(因为它未使用)而使用回退渲染。

GPU rendering looks mostly the same as DOM rendering currently, a yellow line appears for lines rendered via the DOM

跟踪这项工作的 issue 是#221145,该 issue 会频繁更新并提供更多关于进展的详细信息。

macOS 10.15 的 EOL 警告

VS Code 桌面版将在接下来的几个里程碑中更新到Electron 33。随着 Electron 33 的更新,VS Code 桌面版将不再运行在 macOS Catalina 上。在此里程碑中,我们为受影响平台的用户添加了弃用通知,以帮助他们准备迁移。如果您是上述操作系统版本的用户,请查看我们的常见问题解答以获取更多信息。

重要修复

  • 233915 通过在“扩展”视图中扩展的上下文菜单中使用复制链接操作来与他人共享扩展。
  • 231542 经常无法保存文件或文件数据因错误 EBUSY 而被擦除
  • 233304 onDidChangeCheckboxState 在 1.95 中损坏
  • 232263 优化树视图,使跨进程调用得以批量处理
  • 156723 在使用 wayland 时拖放支持得到修复

感谢

最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢

问题跟踪

对我们的问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-emmet-helper 的贡献

vscode-eslint 的贡献

vscode-extension-samples 的贡献

vscode-extension-telemetry 的贡献

vscode-hexeditor 的贡献

vscode-json-languageservice 的贡献

vscode-jupyter 的贡献

vscode-mypy 的贡献

vscode-python-debugger 的贡献

vscode-python-tools-extension-template 的贡献

vscode-test-web 的贡献

inno-updater 的贡献

language-server-protocol 的贡献