尝试以扩展 VS Code 中的代理模式!

2022 年 2 月(版本 1.65)

更新 1.65.1:此更新解决了这些安全问题

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

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


欢迎阅读 Visual Studio Code 2022 年 2 月版发布说明。

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

工作台

新的编辑器历史记录导航

VS Code 中的编辑器历史记录导航功能驱动着一些常用命令,例如后退前进。随着时间的推移,积累了许多功能请求,旨在改进此功能并增加更多功能。此里程碑的编辑器历史记录导航已从头重写,以解决其中大多数请求。

感知编辑器组的导航

在编辑器历史记录中导航时,现在会考虑编辑器组。在编辑器历史记录中向后和向前导航将激活并聚焦于与之前完全相同的编辑器组中的编辑器。当一个编辑器组被移除时,所有相关的历史记录条目都会被丢弃。

在下面的短视频中,第一次后退将光标放置在新编辑器组中,然后第二次后退导航返回到原始编辑器组。

主题:GitHub Light

将导航范围限定到编辑器组或编辑器的新设置

新设置 workbench.editor.navigationScope 使得可以将编辑器历史记录导航范围限定为仅活动编辑器组,甚至是活动编辑器。支持的值包括

  • default: 编辑器导航在所有打开的编辑器组和编辑器中均有效。
  • editorGroup: 编辑器导航仅限于活动编辑器组中打开的编辑器。
  • editor: 编辑器导航仅限于活动编辑器。

如果将范围配置为 editorGroupeditor,则每个编辑器组或编辑器都将拥有自己的导航堆栈,可以单独导航。

笔记本支持

现在,您可以在任何笔记本中已选择的单元格之间进行导航。导航功能在编辑器之间工作,就像您可以在文本编辑器中在光标位置之间导航一样。

主题:GitHub Light

用于导航编辑或导航位置的新命令

默认情况下,每当您在编辑器之间导航时,以及在编辑器内部导航时(例如,切换笔记本单元格或更改文本编辑器中的选择时),都会添加编辑器导航位置。如果您觉得记录的位置过多,则已添加新命令,可将位置减少到以下任一类型:

  • 导航位置 - 例如,使用转到定义时。
  • 编辑位置 - 每当编辑器发生更改时。例如,在文本编辑器中键入时。

您可以将您喜欢的键盘快捷键分配给这些命令,以相应地更改您的导航方式。

编辑位置命令

  • workbench.action.navigateForwardInEditLocations - 在编辑位置中向前。
  • workbench.action.navigateBackInEditLocations - 在编辑位置中向后。
  • workbench.action.navigatePreviousInEditLocations - 在编辑位置中转到上一个。
  • workbench.action.navigateToLastEditLocation - 转到最后编辑位置(此命令之前已存在)。

导航位置命令

  • workbench.action.navigateForwardInNavigationLocations - 在导航位置中向前。
  • workbench.action.navigateBackInNavigationLocations - 在导航位置中向后。
  • workbench.action.navigatePreviousInNavigationLocations - 在导航位置中转到上一个。
  • workbench.action.navigateToLastNavigationLocation' - 转到最后导航位置。

已添加关联的上下文键,以使分配键盘快捷键更加强大。

编辑位置的上下文键

  • canNavigateBackInEditLocations - 是否可以在编辑位置中向后导航。
  • canNavigateForwardInEditLocations - 是否可以在编辑位置中向前导航。
  • canNavigateToLastEditLocation - 是否可以转到最后编辑位置。

导航位置的上下文键

  • canNavigateBackInNavigationLocations - 是否可以在导航位置中向后导航。
  • canNavigateForwardInNavigationLocations - 是否可以在导航位置中向前导航。
  • canNavigateToLastNavigationLocation - 是否可以转到最后导航位置。

新的布局控制选项

上一个里程碑,我们在标题栏中引入了实验性的布局控件(通过将 workbench.experimental.layoutControl.enabled 设置为 true 来启用)。我们收到了反馈,虽然控件中的操作很有用,但它们需要过多的点击。因此,我们正在添加几个 UI 选项,供大家使用 workbench.experimental.layoutControl.type 设置进行尝试。此设置具有以下选项

  • menu: 具有单个按钮打开菜单的先前行为(默认)。
  • toggles: 一个新选项,显示三个按钮来切换面板、侧边栏和侧面面板。
  • both: 一个新选项,显示切换按钮,然后是菜单按钮,这仍然允许您相当快速地访问自定义布局快速选择。

下图显示了将 layoutControl.type 设置为 both 以显示三个切换按钮以及菜单下拉列表。

Layout control with type set to both to show toggle buttons and menu dropdown

浅色高对比度主题

已添加新的浅色高对比度主题,以提高编辑器的易读性。

VS Code using Light High Contrast theme

音频提示

此版本新增了音频提示,包括警告、行内建议和调试器断点命中的音频提示。声音已调整,并且通用设置 audioCues.enabled 已弃用,取而代之的是各个 audioCues.* 设置

A screenshot of all available audio cue enablement settings

除了 lineHasWarning 之外的所有音频提示都默认对屏幕阅读器用户启用(设置值为 auto)。

新的音频提示命令帮助: 列出音频提示列出了所有可用的音频提示,让您在列表中移动时听到每个音频提示,并查看当前启用了哪些提示。

Audio cue help command dropdown with the warning and breakpoint audio cues enabled

拖放“问题”和“搜索”结果

现在,您可以将“问题”、“搜索”或“引用”结果拖放到编辑器中,打开文件并显示结果位置。如果您想启动一个新的编辑器组或将结果放入现有编辑器组中,这会很有用。

设置编辑器分屏视图

设置编辑器现在使用可调整的分屏视图将目录与设置列表分开。

改进的自动语言检测

当新设置 workbench.editor.historyBasedLanguageDetection 启用时,无标题编辑器将使用改进的自动语言检测算法,该算法会考虑您的编辑器历史记录和当前工作区的内容。新算法所需的文本输入比以前少得多,即可提供检测结果。

以下是跨 JavaScript、TypeScript、Markdown、Python、PHP 和 C++ 使用此功能的示例(支持更多语言)

主题:GitHub Light + HC 自定义

改进的语言扩展推荐

语言功能扩展推荐现在在推荐时会考虑 Marketplace 中的其他著名语言扩展。例如,如果您已安装 Apache NetBeans Java 扩展,VS Code 则不会推荐 Java 扩展包

扩展树悬停的键盘快捷键

您可以使用键盘快捷键 Ctrl/Cmd+K, Ctrl/Cmd+I 在扩展贡献的自定义树视图中触发悬停显示。

编辑器

使用代码片段环绕

有一个新命令可以使用代码片段环绕当前选定内容。选择一些文本,从命令面板调用使用代码片段环绕命令(⇧⌘P(Windows、Linux Ctrl+Shift+P),然后从下拉列表中选择一个代码片段。

在下面的短视频中,一个选定的方法被一个 try/catch 代码片段环绕。

任何使用 TM_SELECTED_TEXTSELECTION 变量的适用代码片段都将在使用代码片段环绕快速选择下拉列表中提供。还包括自定义用户或项目代码片段。

可访问的行内提示

行内提示在源代码中显示额外信息,例如变量的推断类型。对于屏幕阅读器用户,有一个新命令可以帮助实现此功能。从命令面板选择读取带有行内提示的行,编辑器将读取当前行并穿插其提示。

上下文 Unicode 高亮显示

为了减少误报,如果周围字符在视觉上表示非 ASCII 脚本,则不再突出显示模糊和不可见的 Unicode 字符。因此,在受信任的工作区中,仅突出显示不可见或可能与 ASCII 字符混淆的字符。例外情况是那些包含在非 ASCII 字符单词中的字符,其中至少有一个字符不会与 ASCII 字符混淆。

之前,您可能会在常量字符串中看到多个误报

Screenshot of text with many false positives and one true positive

之后,只有易混淆的字符被高亮显示

Screenshot of text with only one true positive

终端

多行粘贴警告

现在,当在终端中粘贴多行且 shell 不支持多行时,默认会显示一个对话框。此警告会显示在括号粘贴模式和 PowerShell 中,当我们直接将 Ctrl+V 交给 shell 处理时。对话框上有一个不再询问我复选框,可以轻松禁用此功能。

本版本对终端链接的实现进行了大规模重构。这简化并改进了该功能的可维护性,同时也带来了

  • 链接高亮再次工作。
  • 已解析链接的缓存,减少了某些链接显示的延迟。
  • 工作区搜索链接现在由与已验证链接相同的代码处理,以提高一致性并改进行/列识别。
  • 多项 Bug 修复。

上一版本引入的打开最后一个文件链接打开检测到的链接...命令现在排除了文件夹,这应该会使它们更有用。

源代码管理

差异编辑器管理

在此里程碑中,我们进行了一些更改,以帮助管理差异编辑器。命令面板中新增了一个命令Git: 关闭所有差异编辑器,可用于关闭所有打开的差异编辑器。此外,还有一个新设置 git.closeDiffOnOperation,用于在更改被暂存、提交、丢弃、暂存或取消暂存时自动关闭差异编辑器。

Git 命令输出日志记录

执行 Git 命令时,stderr 的内容会记录在Git 输出窗口中。有一个新设置 git.commandsToLog,用于指定一个 Git 命令列表,这些命令的 stdout 内容将记录在Git 输出窗口中。

调试

惰性变量

访问变量的值可能会产生副作用或代价高昂。VS Code 的通用调试器现在可以显示一个按钮,供用户按需获取变量值。这适用于支持新的“惰性”变量功能的调试扩展。目前,这仅由内置的 JavaScript 调试器实现了属性 getter,但我们预计其他调试器扩展也将很快跟进。

任务

新增了一个平台无关的 userHome 变量,您可以在任务中使用它。

{
  "label": "Test Home",
  "type": "shell",
  "command": "ls ${userHome}"
}

Notebook

内置输出渲染器更新

我们将文本、图像、HTML 和代码渲染器从 VS Code 核心移动到了内置输出渲染器扩展。通过此更改,VS Code 现在可以在这些输出类型上搜索文本。

在下面的短视频中,搜索 item 最初对代码单元格有 3 个结果,但可以筛选以同时包含单元格输出。

粘性滚动笔记本单元格按钮

现在,当向下滚动代码单元格时,运行按钮和单元格工具栏将固定在屏幕顶部。这使得在长代码单元格中工作时它们更易于访问。

主题:Dracula

语言

TypeScript 4.6

VS Code 现在附带 TypeScript 4.6。此更新带来了一些新的语言功能,以及工具改进和错误修复。您可以在TypeScript 博客上阅读有关 TypeScript 4.6 的更多信息。

JavaScript 文件中的语法错误报告

得益于 TypeScript 4.6,VS Code 现在会报告 JavaScript 文件中的一些常见语法错误。这包括解析错误,以及块级作用域变量的无效重新声明

Detecting a redeclaration of a const variable in a JavaScript file

以前,这些错误仅在您在 JavaScript 中启用语义检查时报告。

您可以通过设置以下项来禁用此错误报告

"javascript.validate.enable": false

更多 JS/TS 设置可以按语言配置

现在,更多的 JavaScript 和 TypeScript 设置可以配置为特定于语言的设置。例如,如果您想为 javascriptjavascriptreact 设置不同的配置,特定于语言的设置会很有用。

新启用的特定于语言的设置包括

  • javascript.preferences.quoteStyle, typescript.preferences.quoteStyle
  • javascript.preferences.importModuleSpecifier, typescript.preferences.importModuleSpecifier
  • javascript.preferences.importModuleSpecifierEnding, typescript.preferences.importModuleSpecifierEnding
  • javascript.preferences.jsxAttributeCompletionStyle, typescript.preferences.jsxAttributeCompletionStyle
  • javascript.preferences.renameShorthandProperties, typescript.preferences.renameShorthandProperties
  • javascript.preferences.useAliasesForRenames, typescript.preferences.useAliasesForRenames
  • javascript.suggest.enabled, typescript.suggest.enabled
  • javascript.suggest.completeJSDocs, typescript.suggest.completeJSDocs
  • javascript.suggest.jsdoc.generateReturns, typescript.suggest.jsdoc.generateReturns
  • javascript.autoClosingTags, typescript.autoClosingTags

新的 Lua 语法高亮文法

VS Code 具有一个新的、维护更好的 Lua 语法文法,用于 Lua 文件的语法高亮显示。新文法正在积极维护中,修复了旧文法中存在的问题,并支持更新的 Lua 标记。

Web 版 VS Code

重新打开本地文件和文件夹

当您使用支持Web 文件系统访问 API 的浏览器访问 vscode.devinsiders.vscode.dev 时,最近打开的本地文件和文件夹列表现在可用。选择本地文件将在编辑器中打开它,选择本地文件夹将更新文件资源管理器以显示其内容。在内容显示之前,浏览器可能会要求您确认本地文件访问。

远程仓库

GitHub 仓库

在此里程碑中,当在 vscode.devgithub.dev 上编辑 GitHub 仓库时,合并冲突解决方案得到了改进。现在,您的编辑器中有了合并冲突装饰,并提供了接受当前更改接受传入更改同时接受两者的选项。

源代码管理视图中还为包含合并冲突的文件提供了暂存更改操作。

此外,现在您可以在 vscode.devgithub.dev 上的 GitHub 仓库中轻松暂存和取消暂存特定文件夹下的所有更改。为此,请右键单击源代码管理视图并选择以树形视图显示

主题:One Monokai

工作区搜索和查找所有引用现在默认会下载并索引仓库的完整副本,而不是像以前那样默认提供部分结果。

有几个设置可以配置此索引功能

  • remoteHub.indexing.verboseDownloadNotification - 控制下载通知是显示为弹出窗口(默认)还是在状态栏中。
  • remoteHub.indexing.maxIndexSize - 控制要下载的索引的大小限制。如果超出此限制,下载将被取消,并提供部分结果。您可以将此设置留空,以便从不下载仓库并始终使用部分结果。

Azure Repos

在此里程碑中,我们将 Azure Repos 的支持从使用特定的 Azure DevOps 身份验证提供程序切换到使用通用的 Microsoft 身份验证提供程序(由设置同步使用)。当您访问 Azure Repo 时,系统将再次提示您登录,但您的所有已保存更改都将持久化。

对扩展的贡献

十六进制编辑器数据检查器改进

以前,十六进制编辑器扩展总是将其数据检查器显示在侧边栏中,并且每当显示十六进制编辑器时都会显示它。然而,一些用户发现这很烦人,并且它与调试器的内存检查器集成导致了特别具有干扰性的体验。现在,数据检查器将显示在被检查字节的右侧。如果编辑器太窄,数据检查器将改为显示在悬停小部件中。

Image showing the Data Inspector to the right side of the hex bytes

主题:Codesong

这可以通过 hexeditor.inspectorType 设置进行配置,该设置可以取以下三个值之一

  • aside - 将数据检查器显示在旁边。
  • hover - 仅在悬停时显示数据检查器,无论编辑器宽度如何。
  • sidebar - 像以前一样在侧边栏中显示数据检查器。

GitHub 拉取请求和议题

关于 GitHub 拉取请求和问题扩展的工作仍在继续,该扩展允许您处理、创建和管理拉取请求和问题。查看该扩展 0.38.0 版本的更新日志以了解亮点。

预览功能

终端 Shell 集成

终端中的外壳集成最初是在上一个版本中引入的,本月已获得许多改进。提醒一下,此功能允许 VS Code 对终端中发生的事情获得更多见解,这在以前很大程度上是未知的。该功能仍被认为是实验性的,您可以通过 terminal.integrated.shellIntegration.enabled 设置选择启用。

此版本最大的变化是,通过外壳集成检测到的命令现在在左侧的“gutter”中具有装饰。命令装饰在视觉上分隔了缓冲区,并提供了访问使用外壳集成功能的信息和操作。有三种类型的命令装饰:错误、成功和默认,由命令的退出代码决定。

A command succeeds and a success decoration is placed to the left of the prompt. A command fails and an error decoration is placed to the left of the prompt. A placeholder decoration is to the left of no-op commands and the current command before it's been executed.

单击装饰会在菜单中显示特定于该命令的操作,目前包括重新运行命令复制输出

Command decoration context menu showing Re-run Command and Copy Output actions

将鼠标悬停在装饰上会显示有关命令的信息,例如自运行以来的时间以及相关的退出代码。

Command decoration hover displaying Show Command Actions option and information that the command executed 3 minutes ago and returned failed exit code 127

可以通过将 terminal.integrated.shellIntegration.decorationsEnabled 设置为 false 来禁用装饰。可以通过 terminal.integrated.shellIntegration.decorationIcon* 设置配置单个图标,并且这些新的主题键设置颜色

  • terminalCommandDecoration.successBackground
  • terminalCommandDecoration.errorBackground
  • terminalCommandDecoration.defaultBackground

以下是其他主要更改

  • 启用设置已重命名为 terminal.integrated.shellIntegration.enabled
  • 在所有受支持的 shell 中启用 shell 集成的机制现在更加可靠。
  • 现在,在使用远程连接窗口(SSH、WSL、容器)时,Shell 集成应该可以工作。
  • 行延续(例如,$PS2)现在应该在所有受支持的 shell 上工作。
  • 现在,“跳过”的命令会特别标记。例如,在使用 Ctrl+C 或运行空命令之后。
  • 运行最近命令转到最近目录命令现在在会话之间存储历史记录。历史记录存储可以通过 terminal.integrated.shellIntegration.history 设置进行配置。

ESLint

ESLint 扩展初步支持包含可用 ESLint 验证的单元格的笔记本文档。此支持仅在扩展的预发布版本中可用。

扩展创作

语言状态项

我们已最终确定了语言状态项的 API。此 API 显示活动编辑器的特定于语言的信息。这可以是有关项目或工具集版本的通用信息,也可以显示错误和警告。

JSON language status item linking to schema used for validation

该 API 类似于状态栏 API,可以通过 vscode.languages.createLanguageStatusItem(...) 访问。语言状态项应使用文档选择器创建,以便 VS Code 可以在活动编辑器更改时显示和隐藏它。

行内提示

行内提示提供程序 API 现已最终确定。它允许在源代码中嵌入额外信息。下图显示了 TypeScript 如何为推断类型添加行内提示。

TypeScript inferred variable type  shown as inlay hint

该 API 围绕 InlayHintsProvider 构建。它提供 InlayHint 对象,这些对象具有一些有趣的特性

  • 行内提示可以有工具提示和命令。
  • 提示的标签可以由多个部分组成,每个部分也可以有工具提示和命令。
  • 标签部分还可以具有关联的源位置,从而为此部分启用转到定义等语言功能。

状态栏焦点边框

通过向状态栏和状态栏项添加焦点边框,我们使状态栏导航更加容易和可访问。

主题作者可以通过配置两个新的主题颜色来自定义边框颜色

  • statusBar.focusBorder: 状态栏获得焦点时整个状态栏的边框颜色。
  • statusBarItem.focusBorder: 状态栏项获得焦点时状态栏项的边框颜色。

测试刷新操作和 sortText

我们已经最终确定了我们的提案,以向 TestController 接口添加一个标准刷新处理程序。如果扩展为此属性分配一个方法,VS Code 将在测试资源管理器视图中显示一个“刷新”图标。

此外,TestItem 现在可以具有一个 sortText 属性,该属性控制文件中没有特定位置的项的排序顺序。

注释时间戳

注释 API 现在允许您为每个 Comment 添加 timestamp。此时间戳显示在注释小部件和注释视图中。默认情况下,时间戳显示为相对时间(例如,“2 周前”),但用户设置 comments.useRelativeTime 可用于显示精确时间。时间戳的悬停始终是精确时间。

vscode-test 包重命名为 @vscode/test-electron

vscode-test 包已重命名为 @vscode/test-electron。如果扩展作者在其扩展的 package.json 文件 devDependencies 中包含该包,则应更新该条目。@vscode/test-electron 包有助于运行 VS Code 扩展的集成测试。您可以在 vscode-test 仓库了解更多信息。

更新的 codicons

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

  • arrow-circle-down
  • arrow-circle-left
  • arrow-circle-right
  • arrow-circle-up
  • error-small
  • indent
  • layout-activitybar-left
  • layout-activitybar-right
  • layout-centered
  • layout-menubar
  • layout-panel-center
  • layout-panel-justify
  • layout-panel-left
  • layout-panel-right
  • layout-panel
  • layout-sidebar-left
  • layout-sidebar-right
  • layout-statusbar
  • layout
  • newline
  • record-small
  • target

Preview of updated icons

图标贡献点现已最终确定

图标贡献点允许扩展通过 ID 定义新图标,以及默认图标。然后,该图标 ID 可以由扩展(或依赖于该扩展的任何其他扩展)在任何可以使用 ThemeIcon(`new ThemeIcon("iconId")`)、Markdown 字符串(`$(iconId)`)以及某些贡献点中作为图标使用。

产品图标主题可以重新定义图标(如果它们知道图标 ID)。

"contributes": {
  "icons": {
    "distro-ubuntu": {
      "description": "Ubuntu icon",
      "default": {
        "fontPath": "./distroicons.woff",
        "fontCharacter": "\\E001"
      }
    },
    "distro-fedora": {
      "description": "Ubuntu icon",
      "default": {
        "fontPath": "./distroicons.woff",
        "fontCharacter": "\\E002"
      }
    }
  }
}

在上面的示例中,一个扩展定义了两个新的图标 ID distro-ubuntudistro-fedora,以及默认图标定义。这些图标在给定字体字符的图标字体中定义。

文件图标主题:支持文件关联中的文件夹名称

文件图标主题中,folderNamesfolderNamesExpandedfileNamesfileExtensions 中的关联现在也可以包含文件夹名称

  "fileNames": {
    "system/win.ini": "_win_ini_file"
  },

system/win.ini 表示该关联直接匹配 system 文件夹中名为 win.ini 的文件。

  "fileExtensions": {
    "system/ini": "_ini_file"
  },

system/ini 表示该关联直接匹配 system 文件夹中名为 *.ini 的文件。

  "folderNames": {
    ".vscode/extensions": "_vscode_folder"
  },

在 Web 版 VS Code 中使用 Codespaces 运行远程安装的 Web 扩展

Web 版 VS Code 结合 Codespaces 现在支持在 Web 扩展主机中运行远程安装的Web 扩展。例如,如果您在 GitHub Codespace 中安装了 Vim 扩展(通过 devcontainer.json 文件中的配置),那么当您在浏览器中打开 Codespace 时,Vim 将加载到 Web 扩展主机中。请阅读我们的扩展主机文档以获取更多信息。

注意:目前存在此类扩展加载 Web Worker 的已知限制。有关详细信息,请参阅此问题

调试器扩展创作

支持“重要”输出事件

最近,调试适配器协议Output 事件添加了一个 important 类别。此类别标记了应该突出显示且不应被用户忽视的事件。VS Code 现在将显示一个带有 important 类别的消息通知弹出窗口。这些消息也将继续记录到调试控制台。

支持“惰性”变量

某些变量是动态的,需要执行代码才能获取其值。调试适配器可能不希望自动检索它们的完整值,因为这样做可能会产生副作用或代价高昂。

一些调试适配器通过将“开销大的变量”表示为占位符对象来解决此问题,用户需要明确“展开”该对象才能获取值。VS Code 的内置 js-debug 对 JS/TS getter 使用了此方法

class Person {
  name = 'Danny';
  get email(): string {
    return 'foo@example.bar';
  }
  get address(): Address {
    return new Address();
  }
}
class Address {
  street = 'Main Street';
  city = 'Zurich';
}

以下截屏视频显示,中间对象使得难以理解有效的数据结构

在此版本中,我们改进了 VS Code,以紧凑的形式渲染中间对象,并带有一个(...)按钮,用于请求完整值。

调试适配器可以通过添加带有 lazy 属性的 VariablePresentationHint 来请求变量的这种新显示样式(请参阅 DAP 新增内容)。如果客户端不支持 lazy 标志,则变量将像以前一样显示。

语言服务器协议

语言服务器协议的下一个版本,连同相应的 npm 模块,已经发布。新版本包含以下更改

  • LSP 类型转换为 VS Code 类型以及反向转换现在是完全异步的。此更改避免了大型数据流的转换,这可能会阻塞扩展主机。请注意,这是库中的一个破坏性 API 更改(更多信息请参见README.md)。它不影响协议本身的向后兼容性。
  • 笔记本文档的提议实现得到了增强。它现在具有完整的中间件和提供程序支持。

调试适配器协议

调试适配器协议中添加了几个新属性。

  • 新的布尔属性 lazy 已添加到 VariablePresentationHint 中。客户端可以使用此可选标志以支持特定手势来获取其值的 UI 来呈现变量。
  • 新的可选字符串属性 detail 已添加到 CompletionItem 中。通过此人类可读的字符串,客户端可以显示有关项的附加信息,例如类型或符号信息。请注意,此属性尚未被 VS Code 支持。

建议的扩展 API

每个里程碑都会带来新的提议 API,扩展作者可以尝试这些 API。一如既往,我们希望得到您的反馈。以下是尝试提议 API 的步骤

  1. 查找您要尝试的提议并将其名称添加到 package.json#enabledApiProposals
  2. 使用最新的vscode-dts并运行vscode-dts dev。它会将相应的d.ts文件下载到您的工作区中。
  3. 您现在可以根据该提议进行编程。

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

时间线项中的 Markdown 悬停

TimelineProvider 提供的项目现在可以在 detail 属性中支持 Markdown,该属性用于为其工具提示提供内容。

支持笔记本的文档选择器

vscode.DocumentSelector 类型允许您将转到定义等语言功能与特定文档关联起来。这驱动着 UI,并决定是否向相应的提供程序请求结果。我们添加了一个新的 API 提案,允许扩展也选择笔记本类型。例如,{ language: 'python', notebookType: 'jupyter-notebook'} 定位所有嵌入在 Jupyter 笔记本中的 python 文档。这是当前的提案 - 尝试一下并告诉我们您的想法。

带有自定义语言 ID 的输出通道

有些扩展能够在它们的输出通道中定义标记或语法着色和 CodeLens 功能,前提是它们本身是文本文档(只读)。由于所有输出通道共享相同的语言 ID,这些自定义设置可能会错误地应用于其他输出通道。有一个功能请求是创建具有自定义语言 ID 的输出通道,以便扩展作者可以按语言定义自定义设置。因此,在此里程碑中,我们引入了提案来创建带有自定义语言 ID 的输出通道。请尝试一下并给我们反馈。

MarkdownString.baseUri

MarkdownString 上提议的 baseUri 属性允许您指定一个基 URI,Markdown 中的相对链接和图像将相对于该基 URI 解析。此属性的行为与 HTML 中的 <base> 元素非常相似。

如果 baseUri/ 结尾,则它被视为目录,Markdown 中的相对路径将相对于该目录解析。

const md = new vscode.MarkdownString(`[link](./file.js)`);
md.baseUri = vscode.Uri.file('/path/to/dir/');
// Here 'link' in the rendered Markdown resolves to '/path/to/dir/file.js'

如果 baseUri 是文件,Markdown 中的相对路径将相对于该文件的父目录解析。

const md = new vscode.MarkdownString(`[link](./file.js)`);
md.baseUri = vscode.Uri.file('/path/to/otherFile.js');
// Here 'link' in the rendered Markdown resolves to '/path/to/file.js'

新文档

Java GUI 应用程序

新的Java GUI 应用程序主题解释了如何使用Java 扩展包在 VS Code 中开发 JavaFX、AWT 和 Swing 应用程序。

值得注意的修复

  • 107748 Voice over 未读出设置被忽略以进行同步
  • 123399 Emmet 在 jsx 和 html 文件中不会为标签 A 添加类。
  • 141680 在设置中搜索 @tags 速度慢
  • 141977 设置编辑器:文件夹操作项未正确处理 keyup 事件
  • 142040 改进支持预发布版本的扩展的“安装另一个版本”操作。
  • 142462 当写锁定未清除时,文件写入可能挂起
  • 142641 v1.64 中 ts-node 调试器无法正常工作

感谢

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

Web 扩展

支持将代码作为Web 扩展运行的扩展作者(以下列表为 2022 年 2 月 1 日至 2022 年 2 月 28 日之间)

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-languageserver-node 的贡献

debug-adapter-protocol 的贡献

language-server-protocol 的贡献

monaco-editor 的贡献