February 2020 (version 1.43)

更新1.43.1 :此更新解决了这些问题 .

更新1.43.2 :此更新解决了这些问题 .

下载:Windows: 用户 系统 | Mac | Linux: snap deb rpm tarball


欢迎使用2020年2月发布的Visual Studio Code. 我们希望您喜欢此版本中的许多更新,其中一些重要的重点包括:

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

有问必答:想要尽快尝试新功能吗? 您可以下载每晚的Insiders内部版本,并在可用时立即尝试最新更新. 有关最新的Visual Studio Code新闻,更新和内容,请在Twitter @code上关注我们!

Workbench

Search Editors

Insiders上经过几次迭代稳定之后,我们将提供搜索编辑器,使您可以在全尺寸编辑器中查看工作区搜索结果,并带有语法突出显示和周围环境的可选行. 一段时间以来,这一直是非常需要的功能 .

以下是搜索" SearchEditor"一词的上下文匹配前后的两行文字:

Search Editor 主题: 淡紫色 ,字体: Hasklig

在"搜索编辑器"中,可以使用" 转到定义"操作将结果导航到,例如使用F12打开当前编辑器组中的源位置,或使用⌘KF12 (Windows,Linux Ctrl + K F12在编辑器中打开位置.去旁边. 此外,双击可以选择打开源位置,该位置可以使用search.searchEditor.doubleClickBehaviour设置进行配置.

Search Editor definition reveals

您可以使用搜索编辑器打开新的搜索编辑器:打开新搜索编辑器命令,或使用"搜索"视图顶部的" 打开新搜索编辑器"按钮. 或者,您可以将现有结果从"搜索"视图复制到搜索编辑器, 并在结果树的顶部添加" 在编辑器中打开"链接,或者使用" 搜索编辑器:在编辑器中打开结果"命令.

注意 :您可以尝试试验性的Search Editor:Apply Changes扩展,以将您在Search Editor中所做的编辑同步回源文件:

Search Editor: Apply Changes extension

Draggable sash corners

您是否知道可以通过抓住和拖动两个正交的窗框之间的交点来同时调整它们的大小? 这已经适用于编辑器窗框,现在也可以在编辑器和视图之间的边缘使用:

Draggable sash corners

主题: GitHub Sharp ,字体: Fira Code

Notarized macOS builds

Apple现在已对macOS的Visual Studio Code进行了公证,因此您不再应该获得以下对话框:

macOS missing notarization warning

阅读调查问题Apple的开发人员文档以了解更多详细信息.

Progress notifications

从此版本开始,指示长时间运行的操作的行为会略有不同:

  • 它们不再提供通用的" 关闭"按钮,因为它给人错误的印象,表明该操作是否被取消. 您仍然可以按Esc键隐藏通知.
  • 只要在操作仍在进行时隐藏通知,通知就会在状态栏中指示其操作进度.

以后的更改可帮助您知道在取消通知之后,某个操作正在后台继续运行(例如长时间运行的保存操作).

在选择取消按钮之前,该操作仍在运行:

Progress Notification

主题: 德古拉官员 ,字体: 费拉密码

Untitled editors

新设置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>

Welcome views

欢迎视图是工作台的新增功能,无论何时没有任何有意义的内容要显示,该视图都允许视图为用户创建启动体验,以便用户创建内容或配置VS Code. 一些视图已经采用了这种基础结构,例如文件资源管理器,该文件管理器将提供打开文件夹或克隆Git信息库的基础.

File Explorer Welcome view

Theme: GitHub Sharp

Source Control Welcome view

由于有了新的"欢迎"视图基础结构,"源代码管理"视图现在可以在某些情况下提供更好的体验,否则在某些情况下它将显示为空. 例如,当未检测到安装时,它现在可以指导用户打开文件夹或克隆存储库或安装Git.

Source Control Welcome view

Theme: GitHub Sharp

Editor

Minimap size

有一个新设置editor.minimap.size ,它控制小地图如何使用垂直空间:

  • 设置为proportional (默认)时,每行都会在小地图中获得一定量的垂直空间,具体取决于editor.minimap.scale . 例如,在配置为1 (默认值)的高DPI监视器上,每行在小图中的像素为4 px. 因此,对于100行的文件,小地图中渲染的行的高度为400像素,对于1000行的文件,高度为4000像素. 这意味着对于大文件,小地图也会随着当前文件的滚动而滚动.
  • 设置为fit ,小地图的高度将被限制为永远不会大于编辑器的高度. 因此,如果文件有很多行,则将对其进行采样,并且仅在微型图中呈现一个子集,因此无需滚动微型图.
  • 设置为fill ,小地图的高度始终是编辑器的高度. 对于大文件,这也可以通过对行进行采样来实现,但对于小文件,这可以通过为每行保留更多垂直空间(拉伸行)来实现.

在这里,大小从proportional更改为fit ,然后在较小的文件中从fit更改为fill

Minimap size

Minimap background and slider colors

现在有用于自定义小地图及其滑块的新颜色. 新颜色之一是minimap.background ,当颜色定义为透明(降低#RRGGBBAA Alpha通道)时,该小地图将透明显示:

Transparent minimap

{
  "workbench.colorCustomizations": {
    "minimap.background": "#00000055"
  }
}

Column Selection mode

有一个新的全局切换,可通过" 选择" >" 列选择模式"菜单项访问. 进入此模式后,如状态栏中所示,鼠标手势和箭头键将创建一个列选择:

Column selection

您也可以从状态栏禁用列选择模式.

Render whitespace on selection

editor.renderWhitespace设置的默认值已从none更改为selection . 现在,默认情况下,空白字符将呈现在突出显示的文本上.

这里,制表符和空格字符显示在所选区域中:

Render whitespace characters on selection

现在,可以对" 转到定义"鼠标手势的行为进行更多控制. 默认情况下, "通过鼠标转到定义"将打开一个单独的编辑器,但新设置的editor.definitionLinkOpensInPeektrue ,该手势将在" Peek"视图中打开.

Definition with mouse in Peek

Unfold anywhere on a folded line

新增了一个编辑器设置:行尾点击后展开editor.unfoldOnClickAfterEndOfLine ),它控制着当您单击折叠线右侧(在... )的空白区域时发生的情况. 设置为true ,您可以在折行上的文本之后单击任意位置,而不必担心精确选择椭圆( ... ). 默认情况下,此选项处于关闭状态.

folded line with ellipses

Undo textual edits across multiple files

现在,撤消影响多个文件的重命名或代码操作时,VS Code现在允许您撤消所有受影响文件中的更改.

撤消跨文件编辑时将出现提示:

Undo across files prompt

注意 :尚不支持文件操作,例如重命名文件. 例如,跨文件撤消尚不支持在Java中重命名类名(文件名也被重命名).

Multiple rulers with different colors

现有的editor.rulers设置已扩展为允许定义具有自定义颜色的标尺. 在以下屏幕截图中,第80列有一个洋红色标尺,第90列有一个红色标尺:

Colored rulers

{
  "editor.rulers": [
    { "column": 80, "color": "#ff00ff" },
    { "column": 90, "color": "#ff0000" }
  ]
}

Editor top and bottom padding

现在可以使用editor.padding.topeditor.padding.bottom在编辑器的顶部或底部保留空白(像素数).

这是顶部填充为50像素的编辑器:

editor.padding.top set to 50 pixels

{
  "editor.padding.top": 50
}

Scrolling predominant axis

当尝试使用现代触摸板垂直滚动时,通常还会发生文件水平滚动的情况. 现在有一个新设置editor.scrollPredominantAxis (默认设置为true),它阻止"对角线"滚动. 这会强制滚动手势为垂直或水平(基于最高绝对滚动增量),但绝不会是对角线.

Shift+Insert on Linux

在1.42中,将Shift+Insert修改为从选择剪贴板粘贴. 我们收到了很多反馈,认为这破坏了现有的肌肉记忆,因此我们决定回滚并像以前一样从常规剪贴板粘贴Shift+Insert .

Accessibility

Linux screen reader support

在社区的帮助下,我们一直在努力使Orca屏幕阅读器在Linux上可访问VS Code. Orca和Chromium仍在积极地致力于屏幕阅读器支持,因此,要使此功能正常运行,需要做一些事情:

  • 确保在母版之外使用最新版本的Orca. 可以在问题#91063中找到说明.
  • 确保在VS Code中设置为"editor.accessibilitySupport": "on" . 您可以使用设置或运行" 显示辅助功能帮助"命令并按Ctrl + E打开"屏幕阅读器优化"模式来执行此操作.

启用该设置后,VS Code应该可以与Orca屏幕阅读器一起使用.

Languages

TypeScript 3.8.3

VS Code现在捆绑了TypeScript 3.8.3. 此重大更新带来了对新语言功能的支持,包括ECMAScript私有字段顶级await表达式和ns *语法的export * ,以及许多工具功能和改进. 此更新还修复了许多重要的错误.

您可以在TypeScript博客上阅读有关TypeScript 3.8的更多信息.

Convert to template string refactoring

您可以使用针对JavaScript和TypeScript的新的转换为模板字符串重构功能,将字符串串联快速转换为模板字符串

Converting string concatenation to a template string

Call hierarchy support for JavaScript and TypeScript

TypeScript 3.8在JavaScript和TypeScript中带来了呼叫层次结构支持.

Viewing incoming calls using call hierarchy in a TypeScript file

IntelliSense现在为http和https链接呈现JS Doc @link内联标签 . 在下面的示例图像中,请注意如何在悬停中呈现lightbulb menu@link

A hover with a rendered @link JSDoc tag

URL的@link对于JavaScript和TypeScript均有效,并且在悬停,建议详细信息和签名帮助中均显示为可单击的链接.

TypeScript semantic highlighting

默认情况下,TypeScript和JavaScript的语义突出显示功能处于打开状态. 语义突出显示由TypeScript语言服务器提供,它是基于TextMate语法的语法突出显示的基础. 默认语法(TextMate)突出显示器将许多标记分类为variables ,现在将这些标记解析为名称空间,类,参数等.

Semantic highlighting is controlled by the following setting:

"editor.semanticHighlighting.enabled": true

JSON schemas

现在,将文件名与架构相关联时,您现在还可以使用排除模式. 排除模式以"!"开头. 为了匹配,至少一个模式需要匹配,最后一个匹配模式不能是排除模式.

  "json.schemas": [
    {
      "fileMatch": [
        "/receipts/*.json",
        "!/receipts/*.excluded.json"
      ],
      "url": "./receipts.schema.json"
    }
  ]

Debugging

"Run" more prominent in the UI

用户研究表明,新用户很难找到如何在VS Code中运行其程序的方法. 原因之一是现有的"调试"功能与"运行"程序无关. 因此,我们使"运行"在用户界面中更加突出.

  • 主菜单" 调试"已变为" 运行"菜单.
  • 运行和调试视图已变为运行视图,并且相应的活动栏图标现在显示带有小" bug"装饰的大"播放"图标.

Run and Debug Activity Bar icon

Debug Console grouping

VS Code调试控制台现在支持输出分组 . 调试扩展可以指示何时应在公共父项下将调试控制台输出分组在一起. 目前,只有Mock Debug扩展实现输出分组,但是不久之后将出现其他调试扩展-最著名的是JavaScript调试器.

Debug Console grouping

Disable Debug Console history suggestions

You can now turn off history suggestions in the Debug Console via the new debug.console.historySuggestions setting. By default, history suggestions are on.

Integrated Terminal

Unicode 11 support

现在,终端中字符的宽度默认为Unicode 11宽度. 对于大多数人来说,这意味着表情符号将正确显示为宽字符.

Emojis are correctly wide characters

Better Alt+Click to navigate prompt support

终端具有一项功能,可让您Alt+Click某个单元格,光标将导航到该单元格. 从历史上看,在shell提示下,即使包装了它,它也只能在一行上起作用. 对此进行了改进,可以在完整的包装线上使用.

Alt+Click can move across wrapped lines Theme: Sapphire

请注意,这可能无法在Windows上正常运行,但是对ConPTY的最新更改将在将来改善这一点.

Tasks

Task Quick Pick updates

执行" 运行任务"命令时显示的任务"快速选择"已更新,以向您显示哪些任务提供程序仍在运行. 如果您不需要该提供程序提供的任务,则" 停止检测"按钮将立即向您显示到目前为止已检测到的任务,因此您不必等待任何缓慢的任务提供程序.

Tasks Stop Detecting Theme: One Dark Pro, Font: Fira Code

Task instance limit

任务"runOptions"现在包括一个"instanceLimit" ,它指定了允许的任务实例数. 默认的"instanceLimit"为1.

promptString password input

"promptString"用户输入类型可以具有"password": true ,这将导致下拉输入框使输入的内容像密码一样模糊.

Preview features

预览功能尚未准备发布,但足以使用. 我们欢迎您在开发过程中提早提供反馈.

Settings Sync

最近几个月,我们一直在努力支持跨计算机同步VS Code设置,扩展名和键盘快捷键(流行功能请求#2743 ). 在这个里程碑中,我们很高兴地宣布,此功能已准备好在我们的下一个1.44.0 Insider版本中进行预览. 现在,您可以在所有计算机上的所有VS Code安装中同步首选项. 您还可以轻松地按照自己的喜好在新机器上引导VS Code.

以下视频演示了在新计算机上本地应用扩展名和设置:

Bootstrap VS Code using Settings Sync

当前,设置,键盘快捷键,扩展名和显示语言已同步,但我们计划添加更多功能. 您可以查看建议的设置同步功能列表.

默认情况下,机器设置(具有machinemachine-overridable范围的machine-overridable )不同步. 您也可以从"设置"编辑器或使用设置sync.ignoredSettings在此列表中添加或删除设置.

Ignored settings 主题:GitHub Sharp

默认情况下,键盘快捷方式是按平台同步的. 如果您的键盘快捷键与平台无关,则可以通过禁用设置sync.keybindingsPerPlatform来跨平台同步它们.

所有内置和已安装的扩展都与它们的全局启用状态同步. 您可以从扩展视图或使用设置sync.ignoredExtensions跳过同步扩展.

Ignored extensions 主题:GitHub Sharp

设置同步支持在同步时检测设置和键绑定中的冲突. 使用差异编辑器显示冲突,左侧是传入(远程)更改,右侧是本地更改. 您可以通过在右侧编辑器中进行编辑来解决冲突,并使用编辑器中提供的操作合并更改.

在这里,可以通过" 接受远程"操作选择远程colorTheme设置值:

Settings Sync handling conflicts 主题:GitHub Sharp,GitHub Sharp Dark

设置同步活动可以在日志(同步)输出视图中进行监视. 在同步期间更改它们时,所有本地首选项都会在磁盘上备份最近30天. 您可以使用命令" 同步:打开本地备份文件夹"转到备份位置并检索旧的首选项.

Settings Sync log 主题:GitHub Sharp

您可以随时在当前VS Code实例或所有VS Code安装上关闭同步. 选择禁用所有同步时,您的数据将从云中删除.

Turn off Settings Sync

注意: "设置同步"使用Microsoft帐户存储您的VS Code首选项进行同步,因此您需要一个帐户才能使用此功能. 有关更多信息,请参阅" 设置同步"文档 .

Timeline view

在此迭代中,我们继续在新的"时间轴"视图上取得进展. 现在,在Insiders版中默认启用该功能,并且可以通过以下设置在Stable上启用:

"timeline.showView": true

在"时间轴"视图下方显示文件的Git提交历史记录:

Timeline view

Theme: Dark Amethyst

现在,我们已经添加了页面调度支持(通过上面显示的" 加载更多"操作),并在右侧添加了一个相对时间戳. 扩展程序还可以将菜单项添加到"时间线"视图以及各个时间线项目中. 在上面的屏幕截图中,内置的Git扩展正在贡献命令Copy Commit IDCopy Commit Message .

New JavaScript debugger

本月,我们继续在新的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设置debug.javascript.suggestPrettyPrintingfalse .

支持Microsoft Edge和WebView2

We now support launching the new Microsoft Edge browser, just change your debug type from chrome or pwa-chrome to pwa-msedge to try it out. It supports all the same configuration settings as chrome does.

随之而来的是桌面Windows应用程序中对WebView2控件的支持. 查看我们的webview演示以了解如何进行设置.

Image showing the debugger paused at a breakpoint for code running in a native window's WebView.

远程调试

现在,您可以在新的调试器中从远程工作区(例如Visual Studio CodespacesRemote SSH)调试浏览器源代码. 要进行此设置,请端口转发您的Web服务器(或使用简单的静态Web服务器 ),然后创建一个指向该转发端口的chromepwa-msedge启动配置.

例如:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-msedge",
      "request": "launch",
      "name": "Debug my App",
      "url": "http://localhost:5000" // <- debug an app forwarded on port 5000
    }
  ]
}

启动调试会话时,将在计算机上打开浏览器,您可以像通常从VS Code中进行调试一样进行调试.

More views are movable

在最新版本中,VS Code仅使您可以将视图重新定位到面板. 在此版本中,这种体验已扩展到更多视图. 现在,您可以移动视图,例如"调试/运行"视图或新的"时间轴"视图. 您也可以在边栏中将视图移动到其他视图中. 例如,也许您想将" 打开编辑器"视图移到"源代码管理"视图中. 您可以通过将视图拖放到活动栏或面板中的所需位置来完成所有这些操作.

下面的动画突出显示了将" 打开编辑器"视图移动到另一个视图,然后再移动到"面板":

Moving views around

主题: Horizo​​n Bright ,字体: Cascadia Code

我们还引入了一个新命令,可使用键盘简化移动视图: 视图:移动焦点视图workbench.action.moveFocusedView ).

这是一项预览功能,因此,如果您进入无法修复的状态,则会有一条命令将所有视图重置为其原始位置: 视图:重置视图位置workbench.action.resetViewLocations ).

Contributions to extensions

Remote Development

远程开发扩展继续进行工作,该扩展使您可以将容器,远程计算机或Windows Linux子系统 (WSL)用作功能全面的开发环境.

1.43中的功能重点包括:

  • 通过应用程序链接打开远程工作区.
  • 远程-SSH:支持Windows和macOS SSH主机.
  • 远程-SSH:默认情况下,连接共享处于打开状态.
  • 远程-WSL: 在WSL 2博客文章中查看最新的《 使用Docker》 .

您可以在" 远程开发"发行说明中了解新的扩展功能和错误修复.

Vetur

现在,Vue.js的Vetur扩展包括更好的模板插入自动完成功能. 您可以在0.24.0版本中找到更改日志.

Extension authoring

Debugger Extension API

调试欢迎视图

如" 欢迎视图内容API"部分中所述, debug视图现已打开,可用于"欢迎视图内容"贡献. 这些增加的内容可用于指导初学者使用简化运行或调试程序的特定功能.

为了使视图不会被太多的"欢迎视图内容"贡献所困扰,我们建议仅对当前的活动语言启用单独的贡献. 为方便debugStartLanguage ,我们引入了一个新的上下文键debugStartLanguage ,将其设置为使用调试器的最后一种活动编辑器语言.

例如,如果调试器针对Python,则只有在debugStartLanguage == "python" ,您才贡献"欢迎视图"内容. 如果调试器针对多种语言,则可以使用OR运算符( || )组合多种条件.

新的Debug Hover API

如今,VS Code的调试悬停使用基于正则表达式的启发式方法在VS Code调试器评估的鼠标下找到一个表达式,然后在悬停中显示结果. 由于正则表达式是不可配置的,因此并非所有语言都可以正确处理(或无法完全处理). 问题#84044#89603#89332描述了典型问题.

在这个里程碑中,我们引入了新的扩展API,以控制调试悬停的行为.

可以为语言注册EvaluatableExpressionProvider ,以在鼠标下提供VS Code调试器将针对活动调试会话进行评估的表达式.

这是来自Mock调试示例的简单示例,该示例显示了基于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不再转义或引用从调试扩展或调试适配器收到的任何空格. 例如,在DAP变量中或作为DAP输出事件接收的所有字符串都将按原样显示在UI中,而无需进行修改.

这意味着现在可以由调试扩展或调试适配器来决定在将数据发送到VS Code之前是否需要转义空白. 可以在问题#73845中找到更多详细信息.

CodeAction.disabled

使用CodeAction.disabled属性,扩展现在可以告诉VS Code为什么用户当前的选择无法使用给定的CodeAction . 这对于重构尤其有用.

这是在我们的代码操作示例扩展中使用.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;
  }
}

如果用户尝试通过键绑定应用禁用的代码操作,则VS Code将向用户显示.disabled错误消息:

Showing the '.disabled' error in the editor

另外,为了帮助发现,禁用的代码操作在" 重构"和" 源操作"上下文菜单中以淡入淡出的形式显示:

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;
  };
}

Workspace Edit Metadata

我们已经完成了WorkspaceEditEntryMetadata API. 它使扩展作者可以对工作区编辑的更改进行分类,特别是如果需要在应用更改之前对其进行审核时.

Debug Adapter Protocol

Support grouping in output events

可选的group属性已添加到output事件中,以保持通过对相关消息进行分组来组织输出日志. group可能值是startstartCollapsed以打开展开或折叠的组,并以end关闭组.

注意:从此版本开始,VS Code支持此DAP增强功能.

Allow cursor placement via completion items

可选的selectionStartselectionLength属性已添加到完成项. 使用这些属性,可以在插入完成文本之后控制客户的当前选择(或插入位置).

注意: VS Code尚不支持此DAP增强功能. 计划在下一个版本中发布.

Proposal: Progress events

我们在将进度事件添加到"调试适配器协议"的提案中取得了一些进展. 如果您有兴趣,可以参与有关此DAP功能请求的讨论.

Language Server Protocol

语言服务器协议的版本3.16开始工作.

建议在新版本中包括对以下内容的支持:

  • 插入/替换完成项目的编辑.
  • 诊断的结构代码(例如,链接支持).
  • 标签支持符号信息和文档符号.

Proposed extension APIs

每个里程碑都随附了新提议的API,扩展作者可以尝试一下. 一如既往,我们热切希望收到您的反馈. 您必须尝试以下提议的API:

  • 您必须使用Insiders,因为建议的API经常更改.
  • 您的扩展程序的package.json文件中必须包含以下行: "enableProposedApi": true .
  • 将最新版本的vscode.proposed.d.ts文件复制到项目的源位置.

请注意,您无法发布使用建议的API的扩展. 在下一发行版中可能会有重大更改,我们永远也不想破坏现有的扩展.

Custom Editor API

在此迭代中,我们继续研究自定义编辑器API提案 . 显着的变化包括:

  • Renaming API methods to be shorter and more consistent.
  • 通过引入CustomTextEditorProvider简化文本文件的定制编辑器的创建. 这个自定义编辑器使用VS Code的常规TextDocument作为其数据模型,因此您不必自己执行savebackup和其他操作. 这也使在资源的自定义编辑器和同一资源的文本编辑器之间进行实时同步变得容易.
  • 介绍CustomDocument来存储二进制CustomEditor使用的模型. 每个资源只有一个CustomDocument ,但是用户可以在该资源上打开多个自定义编辑器.

请继续测试并分享有关我们的自定义编辑器API提案的反馈. 尽管API的细节可能仍会更改,但我们认为当前的提案反映了我们希望尽快完成的建议.

CodeActionProviderMetadata.documentation

我们已经修订了先前的建议 ,该建议关于标准化扩展如何为其代码操作贡献文档. 使用更新后的提案,现在可以使用CodeActionProviderMetadata类型的documentation属性来提供documentation .

For example, here's how our built-in JavaScript and TypeScript extension contributes documentation:

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")
        }
      }
    ]
  };
  ...
}

每当用户请求重构时,文档就会在"主要代码操作"列表之后呈现:

The JS/TS Code Action documentation entry

问题#86788跟踪提案的状态.

Welcome View Content API

某些视图现在支持由扩展贡献的欢迎内容. 有关更多信息,请参考原始发行 .

采用此API的视图是:

  • explorer管理器-文件资源管理器
  • scm源代码控制
  • debug -运行/调试

例如,这是来自Git扩展的"欢迎"视图内容贡献,用于在explorer欢迎"视图上克隆存储库:

Explorer Welcome view

Theme: GitHub Sharp

OpenDialogOptions and SaveDialogOptions title

OpenDialogOptionsSaveDialogOptions都有建议的title属性. 是否显示title取决于平台,但是如果平台确实显示title ,则显示在"保存"或"打开"对话框上方. 例如,内置命令Workspaces:Save Workspace As ...将标题设置为Save Workspace .

Engineering

Electron 7.0 Update

在这个里程碑中,我们完成了将Electron 7捆绑到VS Code中的探索. 这是Electron的主要发行版,随附Chromium 78.0.3904.130和Node.js 12.8.1.

对于HDR显示器

我们正在跟踪来自Windows用户的问题,该问题在问题#88491中具有高动态范围(HDR)显示,其中VS Code看起来很呆滞且无法使用. 这是所有在78.0.3904.130上基于Chromium的应用程序的问题,并且已在较新版本的Chromium 81中修复了该问题.一旦我们升级到Electron 9,VS Code将获得此修复程序,并且出于技术原因,该修复程序无法移植到Chromium 78.

同时,对于此问题,我们有一个临时的解决方法:

  • 打开命令面板( ⇧⌘P (Windows,Linux Ctrl + Shift + P ).
  • 运行" 首选项:配置运行时参数"命令.
  • 该命令将打开argv.json文件以配置运行时参数. 可能已经有一些默认参数了.
  • Edit "disable-color-correct-rendering": true to "disable-color-correct-rendering": false.
  • 重新启动VS Code.

注意:除非遇到问题,否则请勿编辑此设置!

我们添加了此默认运行时参数,以便我们可以将Chromium的默认颜色校正覆盖为sRGB,而在macOS上使用显示颜色空间. 这样做可以避免出现问题#84154,但不适用于HDR显示器.

"strict": true

当我们首次发布VS Code时,TypeScript仍然是一种新兴且发展迅速的语言,它缺少了一些您今天认为理所当然的有用的类型安全检查,例如严格的null检查 . 在过去的几年中,TypeScript团队引入了许多选项,这些选项使TypeScript编译器更加"严格". 这些严格的选项可以捕获许多常见的编程错误,并消除整个错误类别. 严格模式的好处已得到充分证明,我们长期以来一直希望为VS Code代码库启用严格模式. 但是,这样做似乎是几乎不可能完成的任务,因为这将需要修复构成核心VS Code代码库的大约一百万行源代码中的数千个错误.

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

这次迭代,我们最终完成了启用最后一个严格模式选项: strictFunctionTypes . 完成此操作后,就可以对整个代码库进行严格的提交,从而启用严格模式!

启用严格模式是一个漫长的旅程,VS Code核心团队的每个人和许多社区成员都为此做出了贡献. 但是,通过逐步进行这项工作,我们从第一天开始就可以从所有这些艰苦的工作中受益. 展望未来,严格模式应该鼓励编码最佳实践,使重构更安全,并最终使我们能够以更少的错误更快地交付产品!

Improved CI build performance

VS Code使用Azure Pipelines进行持续集成构建,我们最近极大地提高了构建性能. 您可以在Improving CI Build Times博客文章中了解有关此内容的更多信息.

Running tests against browsers

在这个里程碑中,我们利用Playwright库使所有测试(单元测试,集成测试,冒烟测试)能够在浏览器中运行,这使我们对Chrome,Firefox和Safari等浏览器的覆盖范围得以扩大. 您可以参考我们的VS Code Tests自述文件 ,了解如何运行这些测试.

Notable fixes

  • 61491 :SCM:Viewlet应该改进"无存储库"消息传递
  • 74782 :调查:macOS公证
  • 82828 :autoReveal高亮显示文件名,而不必始终将其移到资源管理器的中间
  • 8641 :macOS:允许鼠标按钮4和5导航历史记录
  • 87767 :VSCode重新启动调试不再起作用
  • 88038 :请勿使用自动执行的调试器命令来污染shell历史记录
  • 89230 :当焦点对准编辑器时,将读取"组"
  • 89699 :后退/前进:保留选择
  • 89989 :网站:允许在新窗口中打开文件
  • 90075: Explorer: Support dangling symbolic links
  • 90240 :Zen模式关闭后,行号不可见
  • 90876 :列表项应具有角色" listitem"
  • 91166: Alerts are too verbose when problems panel is open.
  • 91238 :和弦在集成终端中不起作用

Thank you

最后但同样重要的是,非常感谢! 致使VS Code变得更好的以下人员:

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

vscode贡献:

vscode-eslint贡献:

language-server-protocol贡献:

vscode-js-debug贡献:

vscode-languageserver-node贡献:

vscode-css-languageservice贡献:

vscode-vsce贡献:

localization贡献:

使用Microsoft Localization Community Platform(MLCP)的Cloud + AI Localization社区成员有800多个,Visual Studio Code的活跃参与者约170多个. 通过提供新的翻译,对翻译进行投票或建议改进流程,我们对您的贡献表示感谢.

这是贡献者的快照. 有关项目的详细信息(包括贡献者姓名列表),请访问项目站点, 网址https://aka.ms/vscodeloc .

  • Chinese (Simplified, China) Yizhi Gu, Tingting Yi, Charles Dong, Justin Liu, 斌 项, ick, paul cheung, CHEN Shihuan, 普鲁文, 张锐, Zhiqiang Li, Joel Yang.
  • Chinese (Traditional, Taiwan) Yi-Jyun Pan, 高民 林.
  • 丹麦(丹麦)拉瑟·史迪文( Lasse Stilvang).
  • 荷兰人(荷兰)科恩·威廉姆.
  • 英语(英国)马丁·利特科特,亨利·德恩,卡洛斯·巴尔塔扎.
  • 芬兰语(芬兰) Feetu Nyrhinen.
  • 法语(法国)蒂埃里·德曼 Thierry DEMAN-BARCEL),安东尼·格里费德(Antoine Griffard),鲁道夫·诺埃尔(Rodolphe NOEL),尤尼斯·佐伯里(Younes ZOBAIRI).
  • 德国(德国)菲利普·克尼费尔德,拉斐尔·霍塞尔,尼克·劳赫.
  • 印地语(印度)克里斯娜 KRISHNA TANDON),阿里什(Alish Vagadiya).
  • 匈牙利(匈牙利)莱文特·博贝利.
  • 印度尼西亚语(印度尼西亚) Eriawan Kusumawardhono,Riwut Libinuko.
  • 意大利(意大利)路易吉·布鲁诺.
  • 日语(日本) TENMYO Masakazu,牧野浩一.
  • 韩国(韩国)姜成元,洪州,关佑贞.
  • 拉脱维亚(拉脱维亚)安德里斯·维尔德(Atris Straujums).
  • 波兰文(波兰) Makabeus Orban, Mariusz Wachowski.
  • 葡萄牙语(巴西)马孔德斯亚历山大,亚瑟·利马,马塞洛·费尔南德斯,罗伯托·丰塞卡,尤里·丹塔斯,路易斯·古斯塔沃·努内斯,蒂亚戈·塔哈纳.
  • 葡萄牙语(葡萄牙) Diogo Barros.
  • 罗马尼亚语(罗马尼亚) LaServici.
  • 俄语(俄罗斯)安德烈·维斯洛夫,瓦迪姆·斯维特金,德米特里·基里亚诺夫.
  • 西班牙文(西班牙,国际排序) Ricardo Estrada Rdez,Alvaro Enrique Ruano.
  • 泰米尔(印度) Vijay Rajasekar,Selvakumarasamy G,Pandidurai R.
  • 土耳其语(土耳其)穆罕默德·约努古尔.
  • 越南文(Vietnam) Hieu Nguyen,Van-Tien Hoang,Vuong.