欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Visual Studio 代码 2022 年 2 月

最编程 2024-04-30 08:33:41
...

2022年2月(1.65版)

更新1.65.1。该更新解决了这些安全问题

更新1.65.2。该更新解决了这些问题

下载。Windows。用户 系统 ARM| Mac:Universal 64 bit Arm64| Linux:deb rpm tarball ARM snap


欢迎来到Visual Studio Code的2022年2月版。

  • 新的编辑器历史导航--范围为返回/前进历史到编辑器组或单个编辑器。
  • 浅色高对比度主题- 浅色主题,增强了VS Code编辑器的可见性。
  • 新的音频提示- 为警告、内联建议和断点命中提供音频提示。
  • 拖放问题和搜索结果- 将结果拖到新的或现有的编辑器组。
  • 源控制差异编辑器管理- 在Git操作后自动关闭差异编辑器。
  • 调试器懒惰变量评估- 懒惰评估JavaScript/TypeScript属性获取器。
  • 预览。终端外壳集成- 重新运行终端命令,命令状态装饰。
  • VS Code for the Web- 重新打开最近的本地文件和文件夹,改进Git集成。

如果你想在线阅读这些发布说明,请到code.visualstudio.com上的更新

工作台

新的编辑器历史导航

VS Code中的编辑器历史导航功能推动了一些流行的命令,如Go BackGo Forward。随着时间的推移,大量的功能请求积累起来,以改善这一功能,同时也增加了更多的功能。这个里程碑式的编辑器历史导航是从头开始重写的,以解决大部分的要求。

编辑器组感知导航

现在在编辑器历史中导航时,会考虑到编辑器组。在编辑历史中向前和向后导航将激活和关注那些编辑组中的编辑,就像它们原来一样。当一个编辑组被删除时,所有相关的历史条目都被丢弃。

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

Editor history keeps track of appropriate editor group

主题。GitHub Light

将导航范围扩大到编辑组或编辑器的新设置

一个新的设置workbench.editor.navigationScope ,可以将编辑历史导航的范围限定在活动的编辑组或甚至编辑器。支持的值是。

  • default:编辑器导航适用于所有打开的编辑器组和编辑器。
  • editorGroup:编辑器导航只限于活动编辑组的已打开的编辑器。
  • editor:编辑器导航只限于活动的编辑器。

如果你把范围配置为editorGroupeditor ,每个编辑器组或编辑器将有他们自己的导航栈,可以单独进行导航。

笔记本支持

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

Navigation across notebook cells

主题。GitHub Light

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

默认情况下,每当你跨编辑器导航时,以及在编辑器内导航时(例如,在文本编辑器中切换笔记本单元或改变选择),都会添加编辑器导航位置。如果你觉得被记录的位置太多,已经添加了新的命令,将位置减少到其中之一。

  • 导航位置 - 例如,当使用**"转到定义 "**时。
  • 编辑位置--每当编辑器被改变时。例如,在一个文本编辑器中输入时。

你可以给这些命令指定你喜欢的键位,以相应地改变你的导航。

编辑位置的命令。

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

导航位置的命令。

  • workbench.action.navigateForwardInNavigationLocations - 在导航位置向前走。
  • workbench.action.navigateBackInNavigationLocations - Go back in navigation locations.
  • 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 )。

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

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

拖放问题和搜索结果

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

Drag and Drop problem result into the editor

设置编辑器分割视图

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

Settings editor adjustable split view

改进的自动语言检测

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

下面是一个跨越JavaScript、TypeScript、Markdown、Python、PHP和C++(支持更多语言)的使用实例。

Using automatic language detection for several programming languages

主题。GitHub Light + HC定制

改进的语言扩展建议

语言功能扩展推荐现在在推荐时考虑到了市场中其他突出的语言扩展。例如,如果你安装了Apache NetBeans Java扩展,VS Code就不会推荐Java扩展包

扩展树悬停的键盘快捷方式

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

编辑

用片段包围

有一个新的命令可以用一个片段包围当前的选择。选择一些文本,从命令选项板(⇧ ⌘P(Windows, LinuxCtrl+Shift+P))调用Surround With Snippet命令,并从下拉菜单中选择一个片段。

在下面的短视频中,一个被选中的方法被一个try/catch片段所包围。

Running the Surround With Snippet command, accepting the try/catch snippet

任何使用TM_SELECTED_TEXTSELECTION 变量的适用代码段都将在 "用代码段快速挑选 "下拉菜单中可用。自定义用户或项目片段也包括在内。

可访问的嵌体提示

镶嵌提示显示了源代码中的额外信息,如一个变量的推断类型。对于屏幕阅读器用户,有一个新的命令来帮助实现这一功能。从命令选项板中选择 "读取带有内嵌提示的行",编辑器将读取与提示交错的当前行。

上下文的Unicode高亮显示

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

之前你可以在const字符串中看到多个假阳性字符。

Screenshot of text with many false positives and one true positive

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

Screenshot of text with only one true positive

终端

多行粘贴警告

当在终端粘贴多行时,如果shell不支持多行,现在默认显示一个对话框。这个警告显示在括号内的粘贴模式和PowerShell中,当我们把Ctrl+V 直接交给shell。对话框上有一个不要再问我的复选框,可以轻松地禁用该功能。

终端链接的改进

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

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

打开文件链接命令的改进

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

源码控制

差异编辑器管理

这个里程碑我们做了一些改变,应该有助于管理差异编辑器。有一个新的命令Git:关闭所有差异编辑器 "的命令,可以用来关闭所有打开的差异编辑器。还有一个新的设置,git.closeDiffOnOperation ,当变化被隐藏、提交、丢弃、暂存或未暂存时,自动关闭差异编辑器。

Git 命令的输出记录

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

调试

懒惰的变量

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

Expanding lazy variables in the debugger

任务

有一个新的独立于平台的userHome 变量,你可以在任务中使用。

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

笔记本

内置输出渲染器更新

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

在下面的短视频中,搜索item ,最初有3个代码单元的结果,但可以过滤,也包括单元输出。

Search keyword 'item' in code cell then also in cell output

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

当向下滚动代码单元时,"运行"按钮和单元工具条现在会粘在屏幕的顶部。这使得它们在一个长的代码单元中工作时更容易接近。

Notebook cell button and toolbar remain visible during scrolling

主题。德古拉

语言

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标记。

网络版VS代码

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

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

Open recent folders in VS Code for the Web

远程存储库

GitHub 仓库

在这个里程碑中,当编辑vscode.devgithub.dev上的GitHub仓库时,合并冲突解决方案得到了改进。现在在你的编辑器里有合并冲突的装饰,可以选择接受当前更改接受来袭更改接受两个更改

Merge conflict decorations and selecting Accept Current Change

在源码控制视图中,对于包含合并冲突的文件,也有一个阶段性变化的操作。

Staging merge conflicts

此外,你现在可以在vscode.devgithub.dev上轻松地将GitHub仓库中某个特定文件夹下的所有修改分阶段或取消分阶段。要做到这一点,在源码控制视图上点击右键,选择以树形方式查看

Stage all changes under a folder after setting View as Tree

主题。一本万利

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

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

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

Azure Repos

在这个里程碑中,我们把对Azure Repos的支持从使用特定的Azure DevOps认证提供者转换为使用通用的微软认证提供者(由Settings Sync使用)。当你访问Azure Repo时,会提示你再次登录,但你所有保存的更改都会被持续保留。

对扩展的贡献

Hex Editor数据检查器的改进

以前,十六进制编辑器扩展总是在侧边栏中显示其数据检查器,并且每当显示十六进制编辑器时就会显示它。然而,一些用户发现这很烦人,这导致其整合调试器的内存检查器的体验特别混乱。现在,数据检查器将出现在被检查字节的右侧。如果编辑器太窄,数据检查器将显示在一个悬停小部件内,而不是。

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 设置选择加入。

这个版本最大的变化是,通过shell集成检测到的命令现在在左边的 "沟槽 "中具有装饰。命令装饰在视觉上打破了缓冲区,并提供了对使用shell集成功能的信息和操作的访问。有三种类型的命令装饰:错误、成功和默认,由命令的退出代码决定。

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.decorationsEnabledfalse 来禁用。单个图标可以通过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 对象,它有几个有趣的特点。

  • 一个inlay提示可以有一个工具提示和一个命令。
  • 一个提示的标签可以由多个部分组成,这些部分同样可以有一个工具提示和命令。
  • 标签部分也可以有一个相关的源位置,使语言功能,如转到这个部分的定义

状态栏焦点边框

我们通过给状态栏和状态栏项目添加焦点边框,使状态栏的导航更容易、更方便。

Animation showing Status bar focus borders as the user tabs thought Status bar items

主题作者可以通过配置两种新的主题颜色来定制边框的颜色。

  • 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资源库中了解更多。

更新的代码集

以下新图标被添加到我们的代码库中。

  • 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定义一个新的图标,以及一个默认图标。new ThemeIcon("iconId")然后,该图标ID可以被扩展(或任何依赖该扩展的其他扩展)在任何地方使用,ThemeIcon ,在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"
      }
    }
  }
}

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

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

文件图标主题中,folderNames,folderNamesExpanded,fileNames, 和fileExtensions 中的关联现在也可以包含一个文件夹名称。

  "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"
  },

在VS Code for the Web中用代码空间运行远程安装的网络扩展程序

VS Code for the Web with Codespaces现在支持在网络扩展主机中运行远程安装的网络扩展。例如,如果你在GitHub代码空间中安装了Vim扩展(通过devcontainer.json 文件中的配置),那么当你在浏览器中打开代码空间时,Vim将在网络扩展主机中加载。请阅读我们的扩展主机文档以了解更多信息。

**注意:**目前关于通过这样的扩展加载网络工作者有已知的限制。请参阅问题以了解更多细节。

调试器扩展编写

对 "重要 "输出事件的支持

最近,调试适配器协议为Output 事件增加了一个important 类别。这个类别标志着应该突出的、不被用户忽视的事件。VS Code现在会对带有important 类别的消息显示一个通知弹窗。它们也会被记录到调试控制台。

支持 "懒惰 "变量

有些变量是动态的,需要执行代码来获取值。调试适配器可能不想自动检索它们的完整值,因为这样做可能会有副作用或很昂贵。

一些调试适配器解决了这个问题,将 "昂贵的变量 "表示为一个占位符对象,用户需要明确地 "扩展 "以获取其值。VS Code内置的js-debug对JS/TS获取器使用了这种方法。

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

下面的截屏显示,中间对象使人难以理解有效的数据结构。

Reviewing property getter values without lazy evaluation

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

Reviewing property getter values with lazy evaluation triggerd by '(...)' button

调试适配器可以通过添加一个带有lazy 属性的VariablePresentationHint ,为一个变量请求这种新的表现风格(见DAP添加)。如果客户端不支持lazy 标志,该变量将像以前一样显示。

语言服务器协议

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

  • LSP类型转换为VS代码类型,反之亦然,现在是完全异步的。这一变化避免了大数据流的转换,因为大数据流会阻塞扩展主机。请注意,这是一个在库中的破坏性API变化(更多信息见README.md)。它并不影响协议本身的向后兼容性。
  • 笔记本文档的拟议实现得到了增强。它现在有完整的中间件和提供者支持。

调试适配器协议

有几个新的属性被添加到调试适配器协议中。

  • 新的布尔属性lazy 被添加到VariablePresentationHint 。 客户端可以使用可选的标志,用支持特定手势的用户界面来显示变量,以获取其值。
  • 新的可选的字符串属性detail 被添加到CompletionItem 。通过这个人类可读的字符串,客户端可以显示关于项目的额外信息,如类型或符号信息。请注意,这个属性还不被VS Code支持。

建议的扩展API

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

  1. 找到一个你想尝试的建议,并将其名称添加到package.json#enabledApiProposals
  2. 使用最新的vscode-dts并运行vscode-dts dev 。它将下载相应的d.ts 文件到你的工作区。
  3. 你现在可以对该提案进行编程。

你不能发布一个使用提议的API的扩展。在下一个版本中可能会有破坏性的变化,我们不想破坏现有的扩展。

时间轴项目中的Markdown悬停

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

笔记本感知的文档选择器

vscode.DocumentSelector 类型允许你将语言功能(如转到定义)与特定的文档相关联。这驱动了用户界面,也决定了是否询问相应的提供者的结果。我们增加了一个新的API建议,允许扩展也选择笔记本类型。例如,{ language: 'python', notebookType: 'jupyter-notebook'} ,目标是所有嵌入Jupyter笔记本中的Python文档。这是目前的建议--试一试,让我们知道你的想法。

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

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

MarkdownString.baseUri

MarkdownString 上提议的baseUri 属性可以让你指定一个基础URI,在Markdown中的相对链接和图片都是相对于这个URI来解决的。这个属性的行为很像HTML中的 元素

如果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语音播报没有读取设置忽略同步的内容
  • 123399Emmet不在jsx和html文件中添加带有标签A的类。
  • 141680在设置中搜索@标签的速度很慢
  • 141977设置编辑器。文件夹动作项不能正确处理按键
  • 142040改进对支持预发布的扩展的安装另一版本动作。
  • 142462当写锁没有被清除时,文件的写入会挂起。
  • 142641ts-node debugger在v1.64中不能正常工作。

谢谢你

最后但肯定不是最不重要的,要向 谢谢你向VS代码的贡献者们致敬。

网络扩展

扩展作者启用作为网络扩展运行代码的扩展(下面的列表是2022年2月1日至2022年2月28日之间)。

  • Var Style(allen)
  • helloworld-web-sample(Andrey Belym)
  • asciidoctor.asciidoctor-vscode(asciidoctor)
  • Gitignore Adder(beatrix)
  • gkauthentication-test(BranchCreation SLU)
  • Racket帮助器(Calvin-LL)
  • PHP工具(DEVSENSE)
  • Naninovel(Elringus)
  • Pitoco 扩展(Feodrippe)
  • feodrippe.feodrippe-helloworld-minimal-sample-test-web(Feodrippe)
  • Simple React Snippets for Typescript(Giovanni Fu Lin)
  • GitKraken认证(GitKraken)
  • groog(groogle)
  • ModalKeys(haberdashPI)
  • VDM VSCode(Jonas Rask)
  • cis-algorithm(kimjihu)
  • Markdown (Pandoc Flavored)(Kolen Cheung)
  • zyname - 这是用来测试的,很快就会被删除(leodevbro)
  • 片断复制(Lukas Spieß)
  • PHP导入检查器(Marabesi)
  • VSCode语言JSONata(Markus Gutbrod)
  • Babel JavaScript(Michael McDermott)
  • 创建项目(Public Theta)
  • 动态主题(Rody Davis)
  • 路由器生成器(RodyDavis)
  • Chimera主题(roydukkey)
  • Qiita Markdown预览(Ryoji Kato)
  • Kestrel(SenseTime)
  • 测试令牌(sevillal)
  • Sourcegraph(Sourcegraph)
  • Rewrap(stkb)
  • wav-preview(sukumo28)
  • Pandoc(TANIGUCHI Masaya)
  • Hex Viewer(Tao Cumplido)
  • Time Link Bundle (Web版)(Time Link)
  • DCC Websocket(virgilsisoe)
  • VSC+(Vrej)

问题跟踪

对我们的问题跟踪的贡献。

  • John Murray (@gjsjohnmurray)
  • Andrii Dieiev (@IllusionMH)
  • ArturoDent (@ArturoDent)
  • Simon Chan (@yume-chan)

拉动请求

vscode 的贡献。

  • @aminya (Amin Yahyaabadi): 修复:简化tasks/common中的regex表达式PR #142899
  • @Balastrong (Leonardo)
    • 增加了过载计数器工具提示的不透明度PR #141828
    • 修复了元素检测,必要时在解码前后检查片段PR #141848
  • @BMBurstein (Baruch):正确描述了支架导向设置PR #143722
  • @Bruce-Hopkins(布鲁斯-霍普金斯)。添加用户主页变量PR #141902
  • @caioagiani (Caio Agiani):修复错别字PR #141959
  • @CGNonofr (Loïc Mangeonjean)
    • 在所有语言功能注册函数中用languageSelector替换languageId PR#143610
    • 允许getWorker函数返回一个承诺PR #143611
  • @ChaseKnowlden:更新Lua语法PR #142107
  • @divinity76:似乎root需要--no-sandboxPR #137125
  • @efcoyote(土狼):更新到最新的seti-ui版本PR #141931
  • @enticies (enticies)。修复错误信息的错字PR #142054
  • @g-plane (Pig Fang):在默认的文件嵌套模式中添加 "pnpm-lock.yaml"PR #142375
  • @gjsjohnmurray (John Murray)
    • 在window.createOutputChannel API中添加可选的languageId (#_19561)PR #140876
    • 修复testing.openTesting 设置文本(#_142306)PR #142314
  • @haykam821:防止图片预览透明背景受缩放影响PR #141667
  • @heartacker:添加数学片段PR #142697
  • @icepaq (Anton):在WebviewPanel上的自动完成激活事件PR #141752
  • @jeanp413 (Jean Pierre)
    • 修复WebviewElement::streamToBufferPR #142288
    • 修复在扩展视图中通过ID查询扩展时总是在扩展编辑器中显示稳定版本PR #143481
  • @JJRcop(Jonathan Rubenstein)。在支持的版本中添加VS 2022PR #142667
  • @LuanVSO (Luan Vitor Simião Oliveira)
    • 修复psreadline在shell集成中不工作PR #142211
    • 修复shellintegration.ps1PR #142217
  • @michaelkuhn(迈克尔-库恩)。修复一些Solarized颜色PR #142670
  • @neeleshb (Neelesh Bodas):修复 "转到前一个问题 "的不正确标签PR #143823
  • @satokaz (Kazuyuki Sato):解码Markdown路径IntelliSense中的标题建议PR #142392
  • @sndst00m (m.u.n.i.n):在文件图标主题中添加可选的目录语法PR #140079
  • @stefanhaller(Stefan Haller)。修复#142028PR#142930
  • @surajteggi:修复错别字PR #142185
  • @thebinarysearchtree (Andrew Jones): 修复缩进PR #141997
  • @weartist(韩)。在VSCode终端实现多行粘贴警告,修复#122683PR #141822
  • @y-tsutsu (y-tsutsu)
    • 命令调色板中同时显示翻译的名称和原始名称。PR #142524
    • 修复行动类别PR #142911
  • @Yash621 (Yash Goel): 固定设置同步有重复登录PR #142340
  • @zardoy(Vitaly)。解决tsconfig.extends的正确链接路径问题PR #141062

贡献给vscode-css-languageservice:

  • @romainmenke (罗曼-门克)
    • 增加对hwb()颜色函数的支持PR #262
    • 修复:has, :not, :is和:where的特殊性PR #263

vscode-languageserver-node 的贡献。

  • @dsherret (David Sherret): 壮举:当childProcess.spoon失败时,更多的描述性错误PR #888

debug-adapter-protocol 的贡献。

  • @apupier (Aurélien Pupier):为Apache Camel添加调试适配器PR #245
  • @eshelyaron (Eshel Yaron):在adapters.md中增加SWI-Prolog DAP的实现PR #248
  • @hyangah(Hyang-Ah Hana Kim)。更新sdks.md *包括go-dapPR #241
  • @lukaszsamson (Lukasz Samson):添加Elixir DAP实现的链接PR #243
  • @Ricbet (约翰):将OpenSumi添加到实施工具中PR #247

language-server-protocol 的贡献。

  • @zwpaper (Wei Zhang): 使用语言ID以保持一致性PR #1409

monaco-editor 的贡献。

  • @Dan1ve (Daniel Veihelmann):让Vite示例代码与Firefox兼容PR #2991
  • @philipturner (Philip Turner):为Swift添加@noDerivative 修改器PR #2957

推荐阅读