2020 年 2 月(1.43 版本)
1.43.1 更新:此更新解决了这些问题。
1.43.2 更新:此更新解决了这些问题。
下载:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 Visual Studio Code 的 2020 年 2 月版本。此版本包含许多更新,我们希望您会喜欢。一些主要亮点包括
- 搜索编辑器 - 在全尺寸编辑器中搜索和保存全局搜索结果,并提供语法高亮和可选的周围上下文行。
- 可拖动的窗格角 - 通过拖动窗格角轻松更改编辑器布局。
- Linux 屏幕阅读器支持 - VS Code 现在支持 Orca 屏幕阅读器。
- 迷你地图大小选项 - 用于调整迷你地图垂直布局的新选项。
- 列选择模式 - 列模式切换可以让您快速选择文本块。
- 在选择时显示空格 - 仅在选定文本中渲染空格字符。
- 转换为模板字符串 - 将连接转换为 JavaScript/TypeScript 模板字符串。
- JS/TS 调用层次结构视图 - 查看所有对函数的调用或来自函数的调用,并深入了解调用者的调用者。
- 远程开发 - 支持 Windows 和 macOS SSH 主机,以及 SSH 连接共享。
- 设置同步预览 - 设置同步可以让您在多台机器之间共享设置和键绑定。
如果您想在线阅读这些发行说明,请访问 更新 页面,该页面位于 code.visualstudio.com。
内部人员:想要尽快尝试新功能?您可以下载夜间版内部人员 版本,并在新功能可用时立即进行尝试。同时,要获取最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code!
工作台
搜索编辑器
在经过多次迭代稳定 内部人员 版本之后,我们发布了搜索编辑器,它允许您在全尺寸编辑器中查看工作区搜索结果,并提供语法高亮和可选的周围上下文行。这是一个长期以来备受期待的功能。
以下是在文本中搜索 "SearchEditor" 的示例,其中包含匹配项前后两行的文本作为上下文
主题:A Touch of Lilac,字体:Hasklig
在搜索编辑器中,可以使用 "转到定义" 操作(如 F12 在当前编辑器组中打开源位置,或 ⌘K F12(Windows、Linux Ctrl+K F12))打开侧边编辑器中的位置来导航到结果。此外,双击可以打开源位置(可选),这可以通过 search.searchEditor.doubleClickBehaviour
设置进行配置。
您可以使用 "搜索编辑器:打开新搜索编辑器" 命令或使用搜索视图顶部的 "打开新搜索编辑器" 按钮打开一个新的搜索编辑器。或者,您可以将现有结果从搜索视图复制到搜索编辑器,方法是在结果树顶部使用 "在编辑器中打开" 链接,或使用 "搜索编辑器:在编辑器中打开结果" 命令。
注意:您可以尝试使用实验性的 搜索编辑器:应用更改 扩展,将您在搜索编辑器中所做的编辑同步回源文件
可拖动的窗格角
您是否知道可以通过抓取并拖动两个正交窗格之间的交点来同时调整两个正交窗格的大小?这在编辑器窗格中已经可以实现,现在它也可以在编辑器和视图之间的边缘实现。
主题:GitHub Sharp,字体:Fira Code
公证的 macOS 版本
Visual Studio Code for macOS 现在已获得 Apple 公证,因此您应该不再收到以下对话框
阅读调查问题 和 Apple 的开发者文档,以了解更多详细信息。
进度通知
从本版本开始,指示长时间运行操作的通知的行为略有不同
- 它们不再提供通用的 "关闭" 按钮,因为它会让人误以为操作已取消或未取消。您仍然可以按 Esc 键来隐藏通知。
- 当通知隐藏而操作仍在进行时,这些通知会在状态栏中指示操作的进度。
后面的更改可以帮助您了解在您关闭通知后,操作仍在后台继续运行(例如长时间运行的保存操作)。
下面操作仍在运行,直到选择 "取消" 按钮
主题:Dracula Official,字体:Fira Code
无标题编辑器
新的设置 workbench.editor.untitled.labelFormat
允许您控制无标题编辑器是否应使用文件内容作为标题。可能的取值为 "content" 或 "name"。将 'workbench.editor.untitled.labelFormat': 'name'
配置为以前的行为,其中无标题编辑器将具有简短的标题,例如 "无标题-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>
欢迎视图
欢迎视图是工作台中的一个新增功能,它允许视图为用户创建入门体验,以创建内容或配置 VS Code,无论何时没有有意义的内容要显示。一些视图已经采用了这种基础架构,例如文件资源管理器,它会提供打开文件夹或克隆 Git 存储库的选项,以帮助您入门。
主题:GitHub Sharp
源代码管理欢迎视图
得益于新的欢迎视图基础架构,源代码管理视图现在可以在某些情况下提供更好的体验,否则它将显示为空白。例如,它现在可以指导用户打开文件夹或克隆存储库,或者在未检测到安装的情况下安装 Git。
主题:GitHub Sharp
编辑器
迷你地图大小
有一个新的设置 editor.minimap.size
,它控制迷你地图如何使用垂直空间
- 当设置为 "proportional"(默认值)时,每行在迷你地图中都会获得一定量的垂直空间,具体取决于
editor.minimap.scale
。例如,在高 DPI 显示器上,当配置的比例设置为 "1"(默认值)时,每行在迷你地图中会获得 4 个像素。因此,对于一个包含 100 行的文件,迷你地图中渲染的行的高度为 400 个像素,对于一个包含 1000 行的文件,其高度为 4000 个像素。这意味着对于大型文件,迷你地图也会滚动,就像当前文件滚动一样。 - 当设置为 "fit" 时,迷你地图的高度被限制为绝不超过编辑器的高度。因此,如果文件包含许多行,它们将被采样,并且只有部分行会被渲染在迷你地图中,因此迷你地图不需要滚动。
- 当设置为 "fill" 时,迷你地图的高度始终与编辑器的高度相同。对于大型文件,这也是通过采样行来实现的,但对于小型文件,这是通过为每行保留更多垂直空间(拉伸行)来实现的。
这里将大小从 "proportional" 更改为 "fit",然后在较小的文件中,从 "fit" 更改为 "fill"
迷你地图背景和滑块颜色
现在有了新的颜色,用于自定义迷你地图及其滑块。其中一个新的颜色是 minimap.background
,当颜色定义为透明(降低 #RRGGBBAA Alpha 通道)时,迷你地图将以透明方式渲染
{
"workbench.colorCustomizations": {
"minimap.background": "#00000055"
}
}
列选择模式
有一个新的全局切换按钮,可以通过 "选择" > "列选择模式" 菜单项访问。进入此模式后,状态栏中将显示提示,鼠标手势和箭头键将创建列选择
您也可以从状态栏中禁用列选择模式。
在选择时渲染空格
editor.renderWhitespace
设置的默认值已从 "none" 更改为 "selection"。现在默认情况下,空格字符会在突出显示的文本中渲染。
这里显示了在选定区域中显示的制表符和空格空格字符
Peek 中的定义链接
现在可以更好地控制 "转到定义" 鼠标手势的行为。默认情况下,通过鼠标 "转到定义" 会打开一个单独的编辑器,但使用新的设置 editor.definitionLinkOpensInPeek
为 "true" 时,手势将在 Peek 视图中打开。
在折叠行上的任何位置展开
新增了一个设置 **编辑器:在行尾点击后展开**(editor.unfoldOnClickAfterEndOfLine
),用于控制在折叠行的右侧空白处(...
之后)点击时会发生什么。如果设置为 true
,您可以在折叠行上的文本之后任何位置点击,而无需担心精确地选择省略号(...
)。默认情况下,此选项处于关闭状态。
撤销跨多个文件的文本编辑
在撤销重命名或影响多个文件的代码操作时,VS Code 现在允许您撤销对所有受影响文件的更改。
撤销跨文件编辑时将显示提示。
注意:文件操作(如重命名文件)尚未得到支持。例如,在 Java 中重命名类名(其中文件名也会被重命名)目前还不支持跨文件撤销。
具有不同颜色的多个标尺
现有的 editor.rulers
设置已扩展为允许定义具有自定义颜色的标尺。在以下屏幕截图中,有一个品红色的标尺位于第 80 列,一个红色的标尺位于第 90 列。
{
"editor.rulers": [
{ "column": 80, "color": "#ff00ff" },
{ "column": 90, "color": "#ff0000" }
]
}
编辑器顶部和底部填充
现在可以使用 editor.padding.top
和 editor.padding.bottom
在编辑器的顶部或底部保留空白(像素数)。
以下是带有 50 像素顶部填充的编辑器。
{
"editor.padding.top": 50
}
滚动主轴
使用现代触控板垂直滚动时,文件经常也会水平滚动。现在有一个新的设置 editor.scrollPredominantAxis
(默认设置为 true),它会阻止“对角线”滚动。这会强制滚动手势为垂直或水平(根据最高绝对滚动增量),但永远不会是对角线。
Linux 上的 Shift+Insert
在 1.42 中,Shift+Insert
被修改为从选择剪贴板粘贴。我们收到了很多反馈,说这破坏了现有的肌肉记忆,因此我们决定回滚并让 Shift+Insert
从常规剪贴板粘贴,就像以前一样。
辅助功能
Linux 屏幕阅读器支持
在社区的帮助下,我们一直在努力使 VS Code 在 Linux 上与 Orca 屏幕阅读器一起使用。Orca 和 Chromium 仍在积极开发屏幕阅读器支持,因此需要做几件事才能让它完全正常工作。
- 确保使用最新的 Orca 版本(来自 master 分支)。说明可以在 问题 #91063 中找到。
- 确保在 VS Code 中设置了
"editor.accessibilitySupport": "on"
。您可以使用设置来完成此操作,也可以运行 **显示辅助功能帮助** 命令并按 Ctrl+E 打开屏幕阅读器优化模式。
启用该设置后,VS Code 应该可以与 Orca 屏幕阅读器一起使用。
语言
TypeScript 3.8.3
VS Code 现在捆绑了 TypeScript 3.8.3。此 重大更新 带来了对新语言特性的支持,包括 ECMAScript 私有字段、顶层 await 表达式和 export * as ns 语法,以及许多工具功能和改进。此更新还修复了许多重要的错误。
您可以在 TypeScript 博客 上阅读有关 TypeScript 3.8 的更多信息。
转换为模板字符串重构
您可以使用新的 **转换为模板字符串** 重构来快速将 JavaScript 和 TypeScript 中的字符串连接转换为 模板字符串。
对 JavaScript 和 TypeScript 的调用层次结构支持
TypeScript 3.8 在 JavaScript 和 TypeScript 中带来了 调用层次结构 支持。
支持 http(s) @link JSDoc 内联标签
IntelliSense 现在为 http 和 https 链接渲染 JS Doc @link 内联标签。在下面的示例图像中,请注意 lightbulb menu
的 @link
如何在悬停中渲染。
@link
到 URL 对 JavaScript 和 TypeScript 都适用,并在悬停、建议详细信息和签名帮助中以可点击的链接的形式渲染。
TypeScript 语义突出显示
语义突出显示现在是 TypeScript 和 JavaScript 的默认设置。语义突出显示由 TypeScript 语言服务器提供,并基于 TextMate 语法构建在语法突出显示之上。默认语法(TextMate)突出显示器将许多标记分类为 variables
,这些标记现在已解析为命名空间、类、参数等。
语义突出显示由以下设置控制
"editor.semanticHighlighting.enabled": true
JSON 架构
将文件名与架构关联时,现在也可以使用排除模式。排除模式以 '!' 开头。要匹配,至少需要一个模式匹配,并且最后一个匹配的模式不能是排除模式。
"json.schemas": [
{
"fileMatch": [
"/receipts/*.json",
"!/receipts/*.excluded.json"
],
"url": "./receipts.schema.json"
}
]
调试
“运行”在 UI 中更加突出
用户研究表明,新用户很难找到如何在 VS Code 中运行他们的程序。其中一个原因是现有的“调试”功能不是他们与“运行”程序相关的功能。因此,我们正在使“运行”在 UI 中更加突出。
- 主菜单 **调试** 已变为 **运行** 菜单。
- **运行和调试** 视图已变为 **运行** 视图,相应的活动栏图标现在显示了一个带有小型“错误”装饰的大型“播放”图标。
调试控制台分组
VS Code 调试控制台现在支持 **输出分组**。调试扩展可以指示何时应将调试控制台输出分组在一起,归属于一个共同的父级。目前,只有 Mock 调试扩展实现了输出分组,但很快其他调试扩展也将效仿——最值得注意的是 JavaScript 调试器。
禁用调试控制台历史记录建议
您现在可以通过新的 debug.console.historySuggestions
设置关闭调试控制台中的历史记录建议。默认情况下,历史记录建议处于开启状态。
集成终端
Unicode 11 支持
终端中字符的宽度现在默认设置为 Unicode 11 宽度。这对大多数人来说意味着表情符号将正确显示为宽字符。
更好的 Alt+Click 导航提示支持
终端有一个功能,可以让你在单元格上 Alt+Click
,然后光标会移动到该单元格。在 shell 的提示符中,以前这只能在一行上工作,即使它被换行。这已经得到改进,可以作用于完整的换行行。
主题:Sapphire
请注意,这在 Windows 上可能还不能正常工作,但 对 ConPTY 的最新更改 应该在未来改进这一点。
任务
任务快速选择更新
在执行 **运行任务** 命令时显示的任务快速选择已更新,以显示哪些任务提供者仍在运行。如果您不需要该提供者的任务,则 **停止检测** 按钮会立即显示到目前为止已检测到的任务,因此您不必等待任何缓慢的任务提供者。
主题:One Dark Pro,字体:Fira Code
任务实例限制
任务 "runOptions"
现在包含一个 "instanceLimit"
,它指定了允许的任务实例数。默认 "instanceLimit"
为 1。
promptString 密码输入
"promptString"
用户输入类型可以具有 "password": true
,这将导致下拉输入框隐藏输入的内容,就像密码一样。
预览功能
预览功能尚未准备好发布,但功能已经足够可以使用。我们欢迎您在开发过程中提供早期反馈。
设置同步
在过去几个月里,我们一直在努力支持在机器之间同步 VS Code 设置、扩展和键盘快捷键(流行的功能请求 #2743)。在本里程碑中,我们很高兴地宣布,从我们的下一个 1.44.0 Insider 版本开始,此功能已准备好进行预览。您现在可以在所有机器上的所有 VS Code 安装中同步您的首选项。您也可以在没有太多努力的情况下,在全新机器上使用您的个人首选项引导 VS Code。
以下视频演示了在新的机器上本地应用扩展和设置。
目前,设置、键盘快捷键、扩展和显示语言是同步的,但我们计划添加更多内容。您可以查看我们列出的拟议的 设置同步功能。
机器设置(使用 machine
或 machine-overridable
范围)默认情况下不会同步。您也可以在设置编辑器中或使用 sync.ignoredSettings
设置在此列表中添加或删除设置。
主题:GitHub Sharp
键盘快捷键默认情况下在每个平台上同步。如果您的键盘快捷键与平台无关,您可以通过禁用 sync.keybindingsPerPlatform
设置来在跨平台之间同步它们。
所有内置和已安装的扩展程序都会与其全局启用状态一起同步。您可以跳过同步扩展程序,方法是通过扩展程序视图或使用 sync.ignoredExtensions
设置。
主题:GitHub Sharp
设置同步支持在同步时检测设置和键盘快捷键中的冲突。使用差异编辑器显示冲突,其中传入(远程)更改位于左侧,本地更改位于右侧。您可以通过在右侧编辑器中进行编辑来解决冲突,并使用编辑器中提供的操作合并更改。
这里,使用 **接受远程** 操作选择远程 colorTheme
设置值。
主题:GitHub Sharp,GitHub Sharp Dark
可以在 **日志(同步)** 输出视图中监控设置同步活动。所有本地首选项在同步期间更改时,都会在磁盘上备份过去 30 天。您可以使用 **同步:打开本地备份文件夹** 命令转到备份位置并检索您的旧首选项。
主题:GitHub Sharp
您可以随时关闭同步,无论是在当前的 VS Code 实例上还是在所有 VS Code 安装上。当选择禁用所有同步时,您的数据将从云中删除。
注意:设置同步使用 Microsoft 帐户来存储您的 VS Code 首选项以进行同步,因此您需要一个帐户才能使用此功能。有关更多信息,请参阅 设置同步文档。
时间线视图
在此迭代中,我们继续在新的时间线视图方面取得进展。它现在默认在 Insiders 版本中启用,并且可以通过以下设置在稳定版本中启用。
"timeline.showView": true
下面,时间线视图显示了文件的 Git 提交历史记录。
我们现在添加了分页支持(通过上面显示的 **加载更多** 操作),并在右侧添加了相对时间戳。扩展程序还可以将菜单项添加到时间线视图以及各个时间线项。在上面的屏幕截图中,内置的 Git 扩展程序正在贡献命令 **复制提交 ID** 和 **复制提交消息**。
新的 JavaScript 调试器
本月,我们继续在新的 JavaScript 调试器方面取得进展。它默认安装在 Insiders 中,也可以从 VS Code Stable 的市场中安装。通过启用debug.javascript.usePreview
设置,您可以使用现有的启动配置开始使用它。以下是本月添加的一些新功能
漂亮打印
主题:Earthsong,字体:Fira Code
调试器现在可以漂亮地打印文件,这在处理压缩源代码时特别有用。当您单步执行或打开看起来压缩的文件时,它将显示一个提示,您也可以通过调试:漂亮地打印以进行调试命令手动触发漂亮地打印。
您可以通过选择从不或将设置debug.javascript.suggestPrettyPrinting
更改为false
来关闭建议提示。
支持 Microsoft Edge 和 WebView2
我们现在支持启动新的 Microsoft Edge 浏览器,只需将您的调试类型从chrome
或pwa-chrome
更改为pwa-msedge
即可尝试。它支持与chrome
相同的配置设置。
随之而来的是对桌面 Windows 应用程序中的WebView2 控件的支持。查看我们的webview 演示了解如何设置它。
远程调试
您现在可以使用新的调试器从远程工作区(例如GitHub Codespaces 或 Remote SSH)调试浏览器源代码。要进行此设置,请将您的 Web 服务器端口转发(或使用简单的静态 Web 服务器),然后创建一个指向转发端口的chrome
或pwa-msedge
启动配置。
例如
{
"version": "0.2.0",
"configurations": [
{
"type": "pwa-msedge",
"request": "launch",
"name": "Debug my App",
"url": "https://127.0.0.1:5000" // <- debug an app forwarded on port 5000
}
]
}
当您启动调试会话时,将在您的机器上打开一个浏览器,您可以像通常从 VS Code 中调试一样进行调试。
更多视图可移动
在上次发布中,VS Code 只让您体验到将视图重新定位到面板。在此版本中,此体验已扩展到更多视图。您现在可以移动视图,例如调试/运行视图或新的时间线视图。您还可以将视图移动到侧边栏中的其他视图。例如,您可能希望将打开的编辑器视图移动到源代码管理视图。您可以在活动栏或面板中拖动视图并将其放到所需位置来执行所有这些操作。
下面的动画重点介绍了将打开的编辑器视图移动到另一个视图,然后移动到面板
主题:Horizon Bright,字体:Cascadia Code
我们还引入了新的命令,以便使用键盘更轻松地移动视图:视图:移动聚焦视图(workbench.action.moveFocusedView
)。
这是一个预览功能,因此如果您遇到无法修复的状态,可以使用命令将所有视图重置到其原始位置:视图:重置视图位置(workbench.action.resetViewLocations
)。
对扩展的贡献
远程开发
继续开发远程开发扩展,这些扩展使您能够使用容器、远程计算机或Windows 子系统 Linux(WSL)作为功能齐全的开发环境。
1.43 中的功能亮点包括
- 通过应用程序链接打开远程工作区。
- Remote - SSH:支持 Windows 和 macOS SSH 主机。
- Remote - SSH:默认情况下启用连接共享。
- WSL:查看最近的在 WSL 2 中使用 Docker 博客文章。
您可以在远程开发发行说明中了解有关新扩展功能和错误修复的信息。
Vetur
用于 Vue.js 的Vetur 扩展现在包含针对模板插值的更好的自动完成。您可以在0.24.0 版本中找到变更日志。
扩展编写
调试器扩展 API
调试欢迎视图
如欢迎视图内容 API部分所述,debug
视图现在对欢迎视图内容贡献开放。这些添加可用于指导初学者使用特定功能来简化运行或调试程序。
为了防止视图因过多的欢迎视图内容贡献而变得混乱,我们建议仅为当前活动语言启用各个贡献。为了便于此,我们引入了新的上下文键debugStartLanguage
,该键设置为最后使用的调试器的最后一个活动编辑器语言。
例如,如果您的调试器以 Python 为目标,则仅当debugStartLanguage == "python"
时,您才应提供欢迎视图内容。如果您的调试器以多种语言为目标,您可以使用 OR 运算符 (||
) 来组合多个条件。
新的调试悬停 API
今天,VS Code 的调试悬停使用基于正则表达式的启发式方法来查找鼠标下的表达式,VS Code 调试器会对其进行评估,然后在悬停中显示结果。由于正则表达式不可配置,因此并非所有语言都能得到正确处理(或者它们没有得到最大程度的处理)。问题#84044、#89603 和 #89332 描述了典型的問題。
在本里程碑中,我们引入了一个新的扩展 API 来控制调试悬停的行为。
可以为语言注册一个EvaluatableExpressionProvider
来提供鼠标下的表达式,VS Code 调试器将针对活动的调试会话对其进行评估。
以下来自Mock debug 样本的简单示例显示了基于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
错误消息
此外,为了帮助提高可发现性,禁用的代码操作在重构和源操作上下文菜单中以淡化方式显示
请注意,禁用的操作不会显示在顶级的灯泡菜单中。
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;
};
}
工作区编辑元数据
我们已完成WorkspaceEditEntryMetadata
API。它允许扩展作者对工作区编辑的更改进行分类,特别是如果更改需要在应用之前进行审查。
调试适配器协议
支持在输出事件中进行分组
为了通过将相关消息分组来使输出日志保持井井有条,在output
事件中添加了一个可选的group
属性。group
的可能值是start
和startCollapsed
,用于以展开或折叠的方式打开一个组,以及end
用于关闭一个组。
注意:从本版本开始,VS Code 支持此 DAP 增强功能。
允许通过完成项放置光标
在完成项中添加了可选的selectionStart
和selectionLength
属性。使用这些属性,可以在插入完成文本后控制客户端的当前选择(或插入符号位置)。
注意:VS Code 尚未支持此 DAP 增强功能。它计划在下个版本中发布。
提案:进度事件
我们已在将进度事件添加到调试适配器协议的提案方面取得了一些进展。如果您有兴趣,可以参与有关此DAP 功能请求的讨论。
语言服务器协议
已开始着手开发语言服务器协议的 3.16 版本。
新版本包含对以下内容的建议支持
- 用于完成项的插入/替换编辑。
- 诊断的结构化代码(例如链接支持)。
- 对符号信息和文档符号的标签支持。
建议的扩展 API
每个里程碑都包含新的提议 API,扩展作者可以试用它们。与往常一样,我们热切期待您的反馈。以下是如何试用提议的 API
- 您必须使用 Insiders,因为提议的 API 经常发生更改。
- 您的扩展的
package.json
文件中必须包含以下行:"enableProposedApi": true
。 - 将最新版本的vscode.proposed.d.ts文件复制到项目的源代码位置。
请注意,您无法发布使用建议 API 的扩展。下一个版本可能会出现重大更改,我们不希望破坏现有的扩展。
自定义编辑器 API
在本迭代中,我们继续致力于自定义编辑器 API 提案。值得注意的更改包括
- 将 API 方法重命名为更短、更一致的名称。
- 通过引入
CustomTextEditorProvider
,简化了为文本文件创建自定义编辑器。此自定义编辑器使用 VS Code 的普通TextDocument
作为其数据模型,因此您不必自己实现save
、backup
和其他操作。这也使得为资源的自定义编辑器与同一个资源的文本编辑器之间进行实时同步变得容易。 - 引入
CustomDocument
来存储二进制CustomEditor
所使用模型。每个资源对应一个CustomDocument
,但用户可以在该资源上打开多个自定义编辑器。
请继续测试并分享您对我们自定义编辑器 API 提案的反馈。尽管 API 的具体细节可能还会改变,但我们相信当前的提案反映了我们希望很快最终确定的内容。
CodeActionProviderMetadata.documentation
我们已经修改了我们之前的提案,该提案关于标准化扩展如何为其代码操作贡献文档。根据更新后的提案,现在使用CodeActionProviderMetadata
类型上的documentation
属性来提供文档。
例如,以下是如何使用我们的内置 JavaScript 和 TypeScript 扩展贡献文档
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")
}
}
]
};
...
}
每当用户请求重构时,文档将在主代码操作列表之后呈现
问题 #86788跟踪提案的状态。
欢迎查看内容 API
某些视图现在支持从扩展贡献的欢迎内容。有关更多信息,请参阅原始问题。
已经采用此 API 的视图有
explorer
- 文件资源管理器scm
- 源代码管理debug
- 运行/调试
例如,以下是在explorer
欢迎视图上,Git 扩展贡献的欢迎视图内容,用于克隆存储库
主题:GitHub Sharp
OpenDialogOptions 和 SaveDialogOptions 标题
OpenDialogOptions
和 SaveDialogOptions
都有一个建议的title
属性。是否显示title
取决于平台,但如果平台确实显示了title
,它将显示在保存或打开对话框的上方。例如,内置命令工作区:将工作区另存为...将标题设置为保存工作区。
工程
Electron 7.0 更新
在本里程碑中,我们完成了将 Electron 7 打包到 VS Code 中的探索工作。这是一个主要的 Electron 版本,并附带 Chromium 78.0.3904.130 和 Node.js 12.8.1。
对于 HDR 显示器
我们在问题 #88491中跟踪来自Windows用户的具有高动态范围 (HDR) 显示器的用户问题,其中 VS Code 看起来暗淡且无法使用。这是所有基于 Chromium 的应用程序在 78.0.3904.130 上的一个问题,该问题在 Chromium 81 的较新版本中已修复。一旦我们升级到 Electron 9,VS Code 就会获得此修复,并且存在技术原因导致无法将修复程序移植到 Chromium 78。
在此期间,我们为此问题提供了一个临时解决方法
- 打开命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))。
- 运行首选项:配置运行时参数命令。
- 此命令将打开一个
argv.json
文件来配置运行时参数。其中可能已经存在一些默认参数。 - 将
"disable-color-correct-rendering": true
编辑为"disable-color-correct-rendering": false
。 - 重新启动 VS Code。
注意:除非您遇到问题,否则请勿编辑此设置!
我们添加了此默认运行时参数,以便我们可以将 Chromium 的默认颜色校正覆盖到 sRGB,而是使用 macOS 上的显示颜色空间。这样做可以避免诸如问题 #84154之类的问题,但对 HDR 显示器无效。
"strict": true
当我们首次发布 VS Code 时,TypeScript 仍然是一种新兴且快速发展的语言,它缺少您今天可能认为理所当然的一些有用的类型安全检查,例如严格的空检查。在过去几年中,TypeScript 团队引入了一些选项,这些选项使 TypeScript 编译器更加“严格”。这些严格的选项可以捕获许多常见的编程错误,并消除整个类别的错误。严格模式的好处是有据可查的,我们一直希望为 VS Code 代码库启用严格模式。但是,考虑到这将需要修复构成 VS Code 核心代码库的大约 50 万行源代码中的数千个错误,因此这似乎是一项几乎不可能完成的任务。
尽管如此,严格模式的价值还是足够大,以至于我们决定值得为此努力,即使需要一段时间才能实现。因此,在过去两年中,我们一直在逐步更新我们的代码库以使其符合严格模式。我们直接在我们开发分支中逐步完成所有这些工作,以便每个与严格模式相关的修复都能使我们的代码库对每个人来说都更加安全。启用严格的空检查可能是这个过程中最复杂的部分,我们在一篇博文中记录了我们如何实现这一点。
在本迭代中,我们终于完成了启用最后一个严格模式选项:strictFunctionTypes
。完成此操作后,一个相当平淡的提交为我们的整个代码库启用了严格模式!
启用严格模式是一段漫长的旅程,VS Code 核心团队中的每个人以及许多社区成员都为此做出了贡献。但是,通过逐步完成这项工作,我们能够从第一天开始就从所有这些辛勤工作中获益。展望未来,严格模式应该鼓励最佳编码实践,使重构更安全,最终让我们更快地发布更少的错误!
改进 CI 构建性能
VS Code 使用Azure Pipelines 进行其持续集成构建,我们最近显著提高了构建性能。您可以在改进 CI 构建时间博文中详细了解此内容。
针对浏览器运行测试
在本里程碑中,我们通过利用Playwright 库,使所有测试(单元测试、集成测试、冒烟测试)都能够在浏览器中运行,这使我们在 Chrome、Firefox 和 Safari 等浏览器上获得了更广泛的覆盖率。您可以参考我们的VS Code 测试自述文件,了解如何运行这些测试。
值得注意的修复
- 61491:SCM:视图窗格应改进“无存储库”消息
- 74782:调查:macOS 公证
- 82828:autoReveal 突出显示文件所在位置的文件名,而不会总是将其移动到资源管理器中的中间位置
- 8641:macOS:允许鼠标按钮 4 和 5 导航历史记录
- 87767:VSCode 重新启动调试不再工作
- 88038:不要用自动执行的调试器命令污染 shell 历史记录
- 89230:当编辑器处于焦点时,会读取“分组”
- 89699:后退/前进:保留选择
- 89989:Web:允许将文件打开到新窗口
- 90075:资源管理器:支持悬挂符号链接
- 90240:禅模式关闭后行号不可见
- 90876:列表项应具有角色“listitem”
- 91166:当问题面板打开时,警报过于冗长。
- 91238:和弦在集成终端中不起作用
感谢
最后但并非最不重要的是,衷心感谢以下人员,他们的帮助使 VS Code 变得更好
对我们问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Alexander (@usernamehw)
- ArturoDent (@ArturoDent)
- Gama11 (@Gama11)
对vscode
的贡献
- @alpalla:修复了 #32264 - 允许 N 个相同任务的实例 PR #89872
- Baibhav Vatsa (@BaibhaVatsa):从 tsconfig.base.json 中删除了冗余标志 PR #91050
- Bailey Herbert (@baileyherbert)
- @bepvte:将“贡献”重命名为“功能贡献” PR #89842
- @bolinfest
- Brett Cannon (@brettcannon):修复命令文档中的复数 PR #89959
- Dor Mesica (@dormesica):修复在终端中运行活动文件未用引号括起来的问题 PR #90847
- Evan Krause (@evangrayk):修复非编辑器 webview 中的撤消/重做问题 PR #89961
- Ian MacFarlane (@eyeino): 在创建新的 Git 分支时,请明确语言 PR #90160
- John Murray (@gjsjohnmurray)
- lipgloss (@gloss-water): 主题:添加用于设置 minimap 不透明度的 workbench 配置选项 PR #58324
- Michael Gubik (@gubikmic): 仅滚动主要轴线(防止滚动偏移) PR #70047
- Gustavo Cassel (@GustavoASC)
- @Helloimbob: 自动检测 csh 脚本作为 shell 脚本 PR #90960
- Jean Pierre (@jeanp413)
- Jonas Littorin (@jlittorin): 为类型为 "promptString" 的输入变量添加了一个密码属性。 PR #90482
- John Blackbourn (@johnbillion): 将 .envrc 文件视为 Shell 脚本 PR #90825
- Josh Goldberg (@JoshuaKGoldberg): 文档排版错误:insertSpaces 缺少 ` PR #90374
- @LadyCailin: 当突出显示的行是作用域开始/结束时,向右缩进一个位置 PR #77762
- Maik Riechert (@letmaik): 文档:修复 package.json 字段名称 "extensionDependency" PR #90103
- Gordey (@lgordey): 设置 UI:为同步设置添加分隔符 PR #91461
- Alex SK (@lxsk): 修复 #21849:Minimap:显示完整文档 PR #74425
- Dan (@mallardduck): 添加对多个不同颜色的标尺的支持 PR #88453
- Rasmus (@neonsea): 避免使用调试器命令污染 shell 历史记录 PR #88041
- @nrayburn-tech
- Przemek Adamczewski (@padamczewski): 修复:多光标复制行 N 次 (#_40646) PR #52645
- Peter Shinners (@PeterShinners):
task.autoDetect
描述的语法修复 PR #90117 - PM Extra (@PMExtra): 修复 JsonValidation 的一个小错误 PR #91237
- Ron Buckton (@rbuckton): 修复越界错误,以改善 TS 调用层次结构中文件的显示 PR #89822
- Robert Rossmann (@robertrossmann): 将差异编辑器的可滚动视窗的样式设置为与任何其他滚动条相同 PR #89660
- Oğuzhan Eroğlu (@rohanrhu): 添加了记住 End 键状态行为的功能 PR #88664
- Michael Scovetta (@scovetta): 修复 #90555 (resetLocal() 没有任何作用) PR #90556
- Sergio Schvezov (@sergiusens): 快照修复 PR #91182
- Matthew Spencer (@sirmspencer): 添加了关闭侧边栏的新操作 PR #90404
- Konstantin Solomatov (@solomatov): 修复扩展伪终端中的链接处理 PR #88458
- 태재영 (@TroyTae): 支持使用三个点作为前置内容结束符 PR #90122
- Victor Gomes (@vhpgomes): smartSelect 修复 PR #90736
- Waldemar Kornewald (@wkornewald): 揭示更靠近顶部(居中主体,而不是签名) PR #80727
- @zhengjiaqi: 编辑器操作 run 支持参数 PR #87677
- Jiayue. Zhang (@zjysdhr): 修复 #88294 在提交接口中添加 commitData PR #89005
对 vscode-eslint
的贡献
- Yosuke Ota (@ota-meshi): 添加对新的 eslint 建议 API 的支持 PR #814
- Krasimir Nedelchev (@kaykayehnn): 修复错字 PR #900
对 language-server-protocol
的贡献
- Lars Hvam (@larshp) 规范 3.15,修复错字 PR #912
- Maxim Reznik (@reznikmm):
- 修复 specification-3-15.md 的 Markdown 格式 PR #913
- 删除 3.15 中多余的 foldingRangeProvider 定义 PR #914
- 删除 3.15 中多余的 ExecuteCommandOptions 定义 PR #915
- 在 3.15 的 Markdown 中将 ts 替换为 typescript PR #916
- 删除重复的 TextDocumentRegistrationOptions PR #917
- 向 3.15 添加与选择范围相关的功能 PR #918
- 向 3.15 添加 workspaceFolders/configuration/window PR #930
- Christian Tietze (@DivineDominion) 修复错字 PR #921
- Kun Ren (@renkun-ken) 修复错字 PR #922
对 vscode-js-debug
的贡献
- SantoJambit (@SantoJambit): 仅获取 codelens 的根级脚本属性 PR #351
对 vscode-languageserver-node
的贡献
- @Razzeee 修复错字 PR #574
- Remy Suen (@rcjsuen): 修复语义令牌文件的名称中的错字 PR #583
对 vscode-css-languageservice
的贡献
- Jorge del Casar (@jorgecasar): 添加对解析 SCSS 中 @apply 规则的支持 PR #194
- Denis Malinochkin (@mrmlnc): 能够将建议参与者用于 SCSS/Less 混合 PR #201
- Will Bender (@Ragnoroct): 修复规则集后 SCSS 自动完成 PR #188
对 vscode-vsce
的贡献
- Robert Holt (@rjmholt): 添加 --noGitHubIssueLinking 以在包步骤中停止问题链接扩展 PR #424
对 localization
的贡献
超过 800 名 云 + AI 本地化 社区成员正在使用 Microsoft 本地化社区平台 (MLCP),其中约 170 名积极贡献者参与了 Visual Studio Code。 我们感谢您的贡献,无论是提供新的翻译、投票翻译还是建议流程改进。
以下是 贡献者 的快照。 有关该项目(包括贡献者姓名列表)的详细信息,请访问该项目的网站:https://aka.ms/vscodeloc。
- 简体中文 (中国) 顾一之,易婷婷,董超,刘 justin,项斌,ick,paul cheung,陈世环,普鲁文,张锐,李志强,杨 Joel。
- 繁体中文 (台湾) 潘奕均,林高民。
- 丹麦语 (丹麦) Lasse Stilvang。
- 荷兰语 (荷兰) Koen Williame。
- 英语 (英国) Martin Littlecott,Henry Dearn,carlos baltazar。
- 芬兰语 (芬兰) Feetu Nyrhinen。
- 法语 (法国) Thierry DEMAN-BARCELÒ,Antoine Griffard,Rodolphe NOEL,Younes ZOBAIRI。
- 德语 (德国) Philip Kneifeld,Raphael Höser,nick rauch。
- 印地语 (印度) KRISHNA TANDON,Alish Vagadiya。
- 匈牙利语 (匈牙利) Levente Borbély。
- 印尼语 (印度尼西亚) Eriawan Kusumawardhono,Riwut Libinuko。
- 意大利语 (意大利) Luigi Bruno。
- 日语 (日本) 天明正一,牧野浩一。
- 韩语 (韩国) 강 성원,Hongju,관우 정。
- 拉脱维亚语 (拉脱维亚) Andris Vilde,Atis Straujums。
- 波兰语 (波兰) Makabeus Orban,Mariusz Wachowski。
- 葡萄牙语 (巴西) Marcondes Alexandre,Arthur Lima,Marcelo Fernandes,Roberto Fonseca,Yuri Dantas,Luiz Gustavo Nunes,Thiago Takehana。
- 葡萄牙语 (葡萄牙) Diogo Barros。
- 罗马尼亚语 (罗马尼亚) LaServici。
- 俄语 (俄罗斯) Andrey Veselov,Vadim Svitkin,Дмитрий Кирьянов。
- 西班牙语 (西班牙,国际排序) Ricardo Estrada Rdez,Alvaro Enrique Ruano。
- 泰米尔语 (印度) Vijay Rajasekar,Selvakumarasamy G,Pandidurai R。
- 土耳其语 (土耳其) Mehmet Yönügül。
- 越南语 (越南) 孝阮,黄万田,王。