2018 年 11 月 (版本 1.30)
更新 1.30.2:此更新解决了这些问题。
更新 1.30.1:此更新解决了这些问题。
下载:Windows:x64 | Mac:Intel | Linux 64 位:deb rpm tarball | 32 位:deb rpm tarball
欢迎使用 Visual Studio Code 2018 年 11 月版。此版本中有许多重大更新,我们希望您会喜欢,其中一些主要亮点包括:
- 多行搜索改进 - 无需使用正则表达式即可轻松创建多行搜索模式。
- Linux 上的自定义标题栏 - 自定义标题栏和菜单栏现在是 Linux 上的默认设置。
- 引用视图 - “查找所有引用”视图包括最近搜索的历史记录。
- 代码片段注释变量 - 代码片段变量根据语言插入正确的注释。
- JS/TS 回调显示 - 现在您可以查看匿名回调的上下文。
- JSDoc Markdown 高亮显示 - 包括 JSDoc 中 Markdown 代码块的语法高亮显示。
- 简化的初始调试配置 - 更好的默认值和用于初始启动配置的快速选择 UI。
- 打开文件夹时运行 - 配置任务以便在首次打开项目文件夹时运行。
- 选择扩展版本 - 安装 Marketplace 扩展的早期版本。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
发布说明按以下与 VS Code 重点领域相关的部分进行排列。以下是一些进一步的更新
- 工作台 - 菜单滚动和改进的溢出处理,一键打开 settings.json。
- 语言 - JS/TS 重命名现在处理解构,添加缺失的“new”快速修复。
- 调试 - 删除调试控制台,直接从 VS Code 进程资源管理器中调试。
- 任务 - 清除任务终端,任务变量的用户输入,重新运行上次任务命令。
- 扩展创作 - 转到声明支持,新的签名帮助上下文。
Insiders:想尽快看到新功能吗?您可以下载每夜更新的 Insiders 构建版本,并第一时间尝试最新的更新。有关最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code!
工作台
多行搜索输入
上个月,我们添加了对多行搜索的支持。本月我们改进了搜索 UX,使其更易于使用。现在,您无需编写正则表达式即可使用多行文本进行搜索。在搜索框中键入Shift+Enter
以插入换行符,搜索框将展开以显示您的完整多行查询。您还可以将编辑器中的多行选择复制并粘贴到搜索框中。
Linux 上默认的自定义标题栏和菜单栏
经过多次发布,我们一直在通过自定义标题栏和菜单栏改进 Windows 上菜单的可访问性和主题化。虽然它在 Linux 上是可选的,但在此版本中将默认启用。
要使用本机标题栏,您可以将window.titleBarStyle
设置为native
。
滚动菜单
启用自定义菜单栏后,菜单被限制在 VS Code 窗口内渲染。以前,菜单可能会被窗口边界截断。现在通过在需要时使上下文菜单可滚动来解决此问题。
菜单栏溢出菜单
当您的窗口宽度不足以同时容纳菜单栏和窗口标题时,菜单栏还会有一个新的溢出菜单 (...)。
移动的设置编辑器操作
设置编辑器操作(打开 settings.json、显示修改的设置等)已从设置编辑器内的...菜单移至编辑器标题栏。这使它们与其他编辑器类型保持一致,并且打开 settings.json现在只需单击带有大括号{}
按钮即可。键盘快捷方式编辑器也进行了相同的更改。
引用视图
“引用”视图已进行完善,不再是预览功能。现在有两个命令:
- 查找所有引用,它会打开“引用”视图。
- 速览引用,它会在“速览”视图中打开引用。
“引用”视图在启动时是隐藏的,但一旦使用过就会保持可见。如果清除所有搜索结果,它会显示以前搜索的历史记录。
现在视图顶部有一个结果摘要,以及一个用于清除和复制结果的上下文菜单。修复了许多错误,整体稳定性得到了改进。
编辑器
代码片段注释变量
有新的代码片段变量可插入行注释或块注释,并尊重当前语言。对于块注释使用BLOCK_COMMENT_START
和BLOCK_COMMENT_END
,否则使用LINE_COMMENT
。
下面的代码片段在 JavaScript 文件中插入/* Hello World */
,在 HTML 文件中插入。
{
"hello": {
"scope": "javascript,html",
"prefix": "hello",
"body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
}
}
声明与定义
到目前为止,VS Code 提供了用于显示符号定义的命令,例如转到定义和速览定义。这没有考虑到某些语言在声明和定义之间存在比其他语言更严格的区别。我们已经修复了这个问题,现在有转到声明和速览声明命令用于符号的声明。
诸如转到声明之类的语言功能所需的数据由扩展计算,并且有一个新的 API,您可以在扩展创作部分阅读相关内容。
平滑光标动画
有一个新设置editor.cursorSmoothCaretAnimation
,它会在光标移动时启用过渡动画。
Git 集成
更改默认点击操作
现在,您可以更改在“源代码管理”视图中单击文件时的默认操作。默认情况下,VS Code 将打开“差异”视图,但通过将git.openDiffOnClick
设置为false
,文件将在常规编辑器中打开。
提交时推送或同步
新设置git.postCommitCommand
允许您在提交后推送或同步您的存储库。可用值为none
(默认)、push
和sync
。
语言
TypeScript 3.2
VS Code 现在包含TypeScript 3.2.2。此版本带来了一些令人兴奋的新语言功能,包括bind
、call
和apply
的严格类型,以及BigInt 支持。TypeScript 更新还修复了一些重要错误,并包括新的工具功能和改进。
改进了 JavaScript 和 TypeScript 回调的显示
JavaScript 和 TypeScript 匿名回调以前在“大纲”视图、面包屑视图和文档符号列表中都被标记为
。这使得无法分辨您真正想要的是哪个函数。
借助 TypeScript 3.2+,VS Code 现在为回调函数显示更多上下文,以便您可以区分它们。
重命名正确处理 JS/TS 解构
重命名现在可以处理 JavaScript 和 TypeScript 解构,并在需要时引入别名。
添加缺失的 JS/TS 快速修复
实例化类时忘记了new
?TypeScript 3.2 带来了新的快速修复来帮助您。
此快速修复适用于 TypeScript 和类型检查的 JavaScript。
JS/TS 路径建议的文件图标
在VS Code 1.29 的工作基础上,IntelliSense 小部件现在显示 JavaScript 和 TypeScript 路径建议的文件图标。
JSDoc 注释中 Markdown 元素的高亮显示
JSDoc 块内的围栏代码块和其他 Markdown 元素现在已进行语法高亮显示。
这种内联高亮显示更好地匹配了 VS Code 对悬停和 IntelliSense 文档的 JSDoc Markdown 渲染。
调试
简化的初始调试配置
在这个里程碑中,我们着手简化为我们最流行的调试扩展生成的launch.json
文件。我们的目标是让用户更轻松地启动和配置调试。这意味着隐藏不必要的启动配置属性,并使用 Quick Pick UI 来实现更好的用户交互,同时生成初始launch.json
。有关此工作的更多详细信息可以在问题 #62851中找到。
调试控制台可以删除
从上一个里程碑开始,在调试多个调试会话时,我们显示多个调试控制台,每个会话一个。现在,当相应的会话不再活动时,可以通过清除该调试控制台的内容来删除这些控制台。我们没有添加用于管理调试控制台生命周期的显式命令,因为我们相信当前的方法会更直观且更易于使用。
改进了调试配置的用户输入变量
我们改进并推广了提示用户输入的launch.json
变量概念。您可以在任务部分找到详细信息。
从进程资源管理器进行调试
现在可以使用调试上下文菜单操作从 VS Code 进程资源管理器(开发人员:打开进程资源管理器)启动 Node.js 进程的调试。
下面您可以看到连接到从集成终端启动的 Node.js 进程。
Node/Chrome 调试
smartStep
现在默认启用
在几个版本之前,我们更改了smartStep
的行为以使其更有用。使用smartStep
可以带来更好的调试体验,尤其是对于 TypeScript,因此我们已将行为更改为始终开启。
localRoot
的自动默认值
在 Node.js 远程调试场景中,调试配置属性localRoot
现在自动默认为${workspaceFolder}
,只需要指定remoteRoot
。
任务
打开文件夹时运行
如果您有一个在打开文件夹时总是运行的任务,您可以通过配置其"runOn"
属性来配置它在该文件夹打开时自动运行。我们发现这对于确保没有人破坏 VS Code 存储库中的新严格空检查非常有用。通过添加"runOn": "folderOpen"
,所有允许任务自动运行的人在违反严格空检查时都会收到标记。
{
"type": "npm",
"script": "strict-null-check-watch",
"label": "TS - Strict Null Checks",
"isBackground": true,
"problemMatcher": {
"base": "$tsc-watch",
"owner": "typescript-strict-null",
"applyTo": "allDocuments"
},
"runOptions": {
"runOn": "folderOpen"
}
}
清除任务终端
要在执行任务之前清除终端,您可以通过将任务的presentation
选项配置为"clear": true
。
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"presentation": {
"clear": true
}
}
重新运行任务
现在可以使用任务:重新运行上次任务命令 (workbench.action.tasks.reRunTask
) 重新运行任务。默认情况下,重新运行任务将重新评估其运行变量,包括其输入。要使用在上次运行中已评估的变量,请配置"reevaluateOnRerun"
选项。
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"runOptions": {
"reevaluateOnRerun": false
}
}
改进了任务和调试配置的用户输入变量
长期以来,VS Code 一直通过${variableName}
语法支持tasks.json
和launch.json
中的变量替换。
对于launch.json
,甚至可以使用提示用户输入的变量(例如${command:pickNodeProcess}
,它会打开一个基于 Quick Pick 的进程选择器)。此功能不适用于tasks.json
,并且基于命令的变量也有其他限制(请参阅问题#9297、#9544和#30588)。
在这个里程碑中,用户输入变量已被泛化和改进,现在可用于launch.json
和tasks.json
。这项工作还将命令语法引入了tasks.json
。
对于用户输入变量,我们引入了一个新的变量类别input
,其语法为:${input:variableName}
。这个简单的语法不足以向用户呈现有意义的 UI,因此我们在launch.json
和tasks.json
中引入了一个新的inputs
部分,其中指定了额外的配置属性。
使用 Angular CLI 的示例
这是支持的属性列表:
id
- 使用这些属性的相应变量名。type
- 用户输入小部件的类型。在此版本中,支持promptString
(用于字符串 InputBox)和pickString
(用于字符串 Quick Pick)。description
- 向用户显示的描述性文本。default
- 如果用户只是按Enter,则使用的默认值。
第一个示例展示了如何在任务配置 (tasks.json
) 中使用用户输入变量。
{
"tasks": [
{
"label": "Echo input",
"type": "shell",
"command": "echo ${input:echoPrompt}"
}
],
"inputs": [
{
"id": "echoPrompt",
"description": "Please enter a value",
"default": "default echo text",
"type": "promptString"
}
]
}
另一个示例展示了一个用于在调试配置 (launch.json
) 中选择两个选项之间的用户输入变量。
{
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/${input:pickProgram}"
}
],
"inputs": [
{
"id": "pickProgram",
"description": "Select client or server",
"type": "pickString",
"options": ["client.js", "server.js"],
"default": "client.js"
}
]
}
我们计划将用户输入变量与现有的基于命令的变量结合起来,以便用户输入变量可以由扩展贡献。
扩展
安装以前的版本
如果当前版本存在问题,您现在可以回溯到扩展的早期版本。VS Code 在已安装的扩展上提供了一个安装另一个版本操作,该操作会显示一个可用版本的下拉列表。
无响应的扩展主机
VS Code 在一个单独的 Node.js 进程中运行扩展——扩展主机。这会将扩展代码与 VS Code 本身隔离,但不会将不同的扩展相互隔离。由于 JavaScript 的单线程性质,一个扩展可能会(无论是有意还是无意)垄断扩展主机线程,阻止所有其他扩展,并使操作显得无响应。
VS Code 现在会监视扩展主机,当它变得无响应时,VS Code 会开始分析扩展主机。当某个扩展被确定为无响应的原因时,会显示一个最小化的通知,鼓励用户提交问题。
作为用户,请留意状态栏中的铃铛图标,因为通知很小。作为扩展作者,如果您收到无响应问题,请查阅此指南,其中解释了发生了什么以及如何打开问题中附带的 CPU 配置文件。
预览功能
预览功能尚未准备好发布,但已足够实用。我们欢迎您在这些功能开发期间提供早期反馈。
HTML 自定义标签/属性支持
新的html.experimental.custom.tags
和html.experimental.custom.attributes
设置允许您指定 VS Code 在启动时加载的标签和属性列表。当您编辑 HTML 文件时,VS Code 将为这些标签和属性提供自动完成和悬停。这对于Web Components非常有效,例如:
您可以打开octref/web-components-examples存储库来测试此功能。此功能处于预览阶段,设置名称和 JSON 格式都可能更改。
如果您有反馈或功能请求,请在问题 #62976中跟进。
扩展的网络代理支持
有一个实验性设置Http: Proxy Support
用于为所有扩展启用网络代理支持。虽然我们仍在研究一些细节,但我们邀请您尝试一下,并告诉我们它是否适合您。(请注意,启用网络代理支持目前会破坏 GitHub Pull-Request 扩展的登录。)
对于大多数设置,将其设置为override
应该效果最佳,如果效果不好,请尝试on
进行比较。
扩展开发
转到声明
我们添加了一个DeclarationProvider
接口,扩展可以实现它来支持转到声明功能。声明提供程序应返回符号声明的位置。当为同一个文件注册多个提供程序时,它们的S结果将合并。
签名帮助上下文
SignatureHelpProviders 现在接受一个context
参数,该参数提供有关签名帮助如何触发的信息。上下文包括:
- 签名帮助如何触发(触发字符、命令或文档上下文更改)。
- 导致签名帮助触发的字符。
- 签名帮助在触发时是否已显示?
import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {
vscode.languages.registerSignatureHelpProvider(
'markdown',
new (class implements vscode.SignatureHelpProvider {
provideSignatureHelp(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.SignatureHelpContext
): vscode.ProviderResult<vscode.SignatureHelp> {
// Return fake signature help result
const sigHelp = new vscode.SignatureHelp();
sigHelp.activeParameter = 0;
sigHelp.activeSignature = 0;
sigHelp.signatures = [new vscode.SignatureInformation(getLabel(context))];
return sigHelp;
}
})(),
{
triggerCharacters: ['('],
retriggerCharacters: [',']
}
);
}
function getLabel(context: vscode.SignatureHelpContext): string {
const parts = [];
// How was signature help triggered
switch (context.triggerKind) {
case vscode.SignatureHelpTriggerKind.Invoke:
parts.push('invoke');
break;
case vscode.SignatureHelpTriggerKind.ContentChange:
parts.push('change');
break;
case vscode.SignatureHelpTriggerKind.TriggerCharacter:
parts.push('character');
break;
}
// The character (if any) that caused signature help to be triggered
if (context.triggerCharacter) {
parts.push(context.triggerCharacter);
}
// Was signature help already showing when it was triggered again?
if (context.isRetrigger) {
parts.push('retrigger');
}
return parts.join(' ');
}
此外,SignatureHelpProviders 现在可以使用一组不同的触发字符和重新触发字符进行注册。重新触发字符仅在签名帮助已显示时才触发签名帮助。
这是上面 SignatureHelpProvider 的实际操作
配置贡献的 TypeScript 服务器插件
扩展现在可以通过 VS Code 内置 TypeScript 扩展提供的 API 向贡献的 TypeScript 服务器插件发送配置数据。
// In your VS Code extension
export async function activate(context: vscode.ExtensionContext) {
// Get the TS extension
const tsExtension = vscode.extensions.gettsExtension(
'vscode.typescript-language-features'
);
if (!tsExtension) {
return;
}
await tsExtension.activate();
// Get the API from the TS extension
if (!tsExtension.exports || !tsExtension.exports.getAPI) {
return;
}
const api = tsExtension.exports.getAPI(0);
if (!api) {
return;
}
// Configure the 'my-typescript-plugin-id' plugin
api.configurePlugin('my-typescript-plugin-id', {
someValue: process.env['SOME_VALUE']
});
}
TypeScript 服务器插件通过onConfigurationChanged
方法接收配置数据。
// In your TypeScript plugin
import * as ts_module from 'typescript/lib/tsserverlibrary';
export = function init({ typescript }: { typescript: typeof ts_module }) {
return {
create(info: ts.server.PluginCreateInfo) {
// Create new language service
},
onConfigurationChanged(config: any) {
// Receive configuration changes sent from VS Code
}
};
};
此 API 允许 VS Code 扩展将 VS Code 设置与 TypeScript 服务器插件同步,或动态更改插件的行为。请查看TypeScript TSLint 插件和lit-html扩展,了解此 API 在实践中的使用方式。
自定义视图
用于向视图添加全部折叠操作的提议 API 现已稳定。
树项描述
您现在可以使用TreeItem
中的description
属性为树项添加描述。如果树项由资源支持,您还可以通过将description
设置为true
来让 VS Code 从资源派生描述。
/**
* A human readable string which is rendered less prominently.
* When `true`, it is derived from [resourceUri](#_TreeItem.resourceUri), and when `falsy`, it is not shown.
*/
description?: string | boolean;
调试 API
更丰富的 DebugSession
DebugSession
API 现在显示工作区文件夹和已解析的调试配置。已解析意味着所有变量都已替换,并且平台特定的属性部分已针对匹配的平台进行“展平”,并已为不匹配的平台删除。
断点的唯一 ID
Breakpoint
类现在显示一个唯一的 ID (id
),该 ID 在其整个生命周期内不会更改。
用于控制调试适配器创建的最终 API
在此里程碑中,我们已最终确定用于控制调试适配器创建的扩展 API。该 API 使用一个新的DebugAdapterDescriptorFactory
,必须使用vscode.debug.registerDebugAdapterDescriptorFactory
为特定调试类型注册。工厂有一个方法createDebugAdapterDescriptor
,VS Code 在需要调试适配器时调用该方法。由于调试会话作为参数传递(并且会话现在显示工作区文件夹和已解析的配置),因此在要求创建调试适配器时,实现可以访问完整的上下文。createDebugAdapterDescriptor
必须返回一个描述如何创建和/或连接到调试适配器的对象。
DebugAdapterExecutable
描述符使 VS Code 为每个会话将调试适配器作为外部进程启动,并通过 stdin/stdout 与其通信。选项属性包可以指定工作目录和环境变量。DebugAdapterServer
使 VS Code 连接到处理多个会话并通过套接字通信的服务器进程。
请注意:随着此 API 的最终确定,我们正在弃用旧的(提议的)APIDebugConfigurationProvider.debugAdapterExecutable
和非常旧的基于命令的方法(贡献点Debuggers
,属性:adapterExecutableCommand
)。请尽快放弃这些 API,因为我们计划在下一个版本中移除对它们的支持。
此代码片段展示了如何使用此 API 运行嵌入在其包含扩展中的调试适配器。
let server: Net.Server;
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable) {
// start server on launch of first debug session
if (!server) {
// start listening on a random port
server = Net.createServer(socket => {
const s = new MockDebugSession();
s.setRunAsServer(true);
s.start(<NodeJS.ReadableStream>socket, socket);
}).listen(0);
}
// make VS Code connect to debug server instead of launching debug adapter
return new DebugAdapterServer(server.address().port);
}
});
最终确定的调试适配器跟踪器 API
在此里程碑中,我们已最终确定用于跟踪 VS Code 和调试器扩展之间使用的调试适配器协议的扩展 API。该 API 使用新的DebugAdapterTrackerFactory
,必须使用vscode.debug.registerDebugAdapterTrackerFactory
为调试类型注册。工厂有一个方法createDebugAdapterTracker
,VS Code 在开始与调试适配器通信之前调用该方法。createDebugAdapterDescriptor
必须返回DebugAdapterTracker
的实现(或undefined
以防止跟踪)。
此代码片段展示了如何使用此 API 记录 Node.js 调试器的调试适配器协议。
vscode.debug.registerDebugAdapterTrackerFactory('node', {
createDebugAdapterTracker(session: DebugSession) {
return {
onWillReceiveMessage: m => console.log(`> ${JSON.stringify(m, undefined, 2)}`),
onDidSendMessage: m => console.log(`< ${JSON.stringify(m, undefined, 2)}`)
};
}
});
为了确保扩展在需要时激活,可以在package.json
中使用激活事件onDebugAdapterProtocolTracker:
。如果省略调试类型,则为所有调试类型激活扩展。
{
"activationEvents": ["onDebugAdapterProtocolTracker:node"]
}
调试适配器协议
runInTerminal
响应的新shellProcessId
属性
如果调试适配器需要在终端中运行目标,它可以使用 DAP runInTerminal
请求。此请求可以选择返回目标进程的processId
,但实际上没有前端实现能够提供此信息。因此,我们引入了一个新属性shellProcessId
,用于返回终端 shell 的进程 ID(这更容易确定)。
剪贴板
剪贴板 API 已最终确定,现在所有扩展都可以使用它。它允许扩展将字符串复制和粘贴到操作系统剪贴板。
完成项
当插入跨越多行的完成项时,VS Code 会调整缩进。这并非总是需要的,因此我们添加了vscode.CompletionItem.keepWhitespace
来控制此行为。
符号提供程序的标签
注册文档符号提供程序时,现在可以提供一个标签(DocumentSymbolProviderMetadata
)。当文档有多个符号提供程序时,此标签将显示在面包屑和“大纲”视图中。
提议的扩展 API
每个里程碑都附带新的提议 API,扩展作者可以试用它们。一如既往,我们渴望您的反馈。以下是试用提议 API 所需的操作:
- 您必须使用 Insiders 版本,因为提议的 API 经常更改。
- 您的扩展的
package.json
文件中必须包含以下行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目中。
请注意,您不能发布使用提议 API 的扩展。我们很可能会在下一个版本中进行破坏性更改,我们绝不希望破坏现有扩展。
自定义视图支持消息文本
树视图消息
您现在可以使用TreeView
中的message
属性在树视图中设置消息。
/**
* An optional human-readable message that will be rendered in the view.
*/
message?: string | MarkdownString;
智能选择和扩展
我们添加了一个提议的 API 来支持智能选择功能。今天,当您运行展开选择或收缩选择命令时,选择范围是根据弱启发式算法计算的。虽然我们正在努力改进该启发式算法,但我们也希望扩展作者参与进来。因此,我们添加了一个用于SelectionRangeProvider
的提议 API。
工程
移除 WinJS-Promise
当 VS Code 刚开始时,JavaScript 还不像今天这样。例如,当时没有原生 Promise,团队决定使用WinJS.Promise
。快进到今天,情况有所不同:原生 Promise 是真实的,而WinJS.Promise
已过时。
因此,我们正在逐步摆脱WinJS.Promise
。由于 API 和运行时行为的差异,这不是一项容易的任务。我们从大约 10000 个对WinJS.Promise
的引用开始,现在已减少到 1471 个,其中约 500 个是实例化而不是纯类型注解。我们相信我们很快就会完成这段史诗般的旅程!
继续探索 Electron 3.0
在此里程碑中,我们继续探索将 Electron 3.0.0 打包到 VS Code 中。这是一个主要的 Electron 版本,附带 Chrome 66 和 Node.js 10.x(与我们当前使用 Chrome 61 和 Node.js 8.x 的版本相比,这是一个巨大的飞跃)。我们计划在 12 月向 Insiders 用户推出更新,以收集更多反馈。如果您有兴趣提供帮助,请务必安装 VS Code Insiders。
社区问题跟踪
社区长期以来一直定期帮助我们进行问题跟踪。由于我们看到越来越多的问题被提出(目前平均每天 70 个),我们已经开始邀请最活跃的社区成员为他们正在处理的问题添加特定标签。由于 GitHub 没有细粒度权限,我们正在使用我们的问题机器人来识别某些评论并为它们添加标签。请参阅下面的感谢部分以了解致谢。
严格空检查
我们对VS Code 主要代码库进行严格空检查的工作仍在继续。我们现在正在对大约 800 个文件进行严格空检查,并将继续这项工作,直到覆盖整个代码库。
您可以在问题 #60565中跟踪这项工程工作并了解更多有关该过程的信息。
对扩展的贡献
我们的团队维护或贡献了许多 VS Code 扩展。本月最值得注意的是
GitHub 拉取请求
在此里程碑中,我们致力于改进GitHub Pull Requests扩展。
以下是一些新功能
- 直接从您的本地分支创建拉取请求。
- 在已检出的拉取请求上建议一系列源代码更改。
- 在拉取请求描述页面上查看状态检查信息。
您可以在vscode-pull-request-github releases上阅读扩展的完整发布说明。
值得注意的修复
- 37929: 创建调试环境下拉菜单时不激活调试器
- 60187: 调试器不会在 jest 测试中命中断点
- 61590: 使设置和键绑定编辑器在显示编辑器操作时保持一致
- 62370: 改进编辑器中的诊断悬停
- 62500: 将“运行到光标”添加到命令面板
- 62778: 居中布局不恢复大小
- 63618: 调试 Electron 2.0.13 64 位失败,错误“无法连接到运行时进程,超时 10000 毫秒”。但在 Electron 32 位上成功。
感谢
最后但同样重要的是,衷心感谢!以下帮助使 VS Code 变得更好的各位:
对我们问题跟踪的贡献
对 vscode
的贡献
- Adrien Becchis (@AdrieanKhisbe): 语法注入 - 考虑更广泛的范围PR #50534
- David Bailey (@davidbailey00): 从 URL 处理程序桌面文件移除 StartupWMClassPR #63750
- Anuj (@desaianuj): representation 而不是 presentationPR #63477
- Donald Pipowitch (@donaldpipowitch): 添加 .hintrc 并将 .babelrc 移动到 jsonc 语法PR #63759
- Eric Amodio (@eamodio)
- Alexandr Fadeev (@fadeevab): 根据最新语法更新 makefile 颜色化测试PR #61961
- Guillaume Poussel (@gpoussel): 修复 #62278: IPv6 链接支持PR #62293
- Aleksandr Filatov (@greybax): 修复问题 #46816PR #60404
- Napoleon Oikonomou (@iamnapo): 如果存在,则显示 README 而不是欢迎页面PR #60061
- Raul Humberto Lopez Lopez (@iBlackShadow): 当搜索由选项更改触发时,向搜索历史添加条目PR #61993
- Andrii Dieiev (@IllusionMH): 控制搜索结果中操作对齐的选项PR #63457
- joan xie (@infinnie): 菜单水平对齐PR #61454
- Matt Q (@irrationalRock): 修复 #34345 - 添加了将多个光标添加到文件末尾/文件顶部的命令PR #50312
- Jeffrey (@JeffreyCA)
- @jokurz: 将 ksh 脚本自动检测为 shellscriptPR #62838
- karan verma (@karanisverma): 修复: #55946 添加了注释代码片段变量PR #63572
- Krish De Souza (@Kedstar99): 修复 updateService.linux.ts 中的 checkForSnapUpdate 以正确识别 snap 版本PR #63716
- Benjamin Lannon (@lannonbr): 添加了将扩展信息输出到剪贴板的功能PR #56514
- Luo Wenqing (@laphets): 修复启用 autoNavigateNextConflict 时最后的合并冲突警告PR #62788
- Matthew Leon (@leonm1): 修复 #62785 调试控制台 copyAll 中的空行PR #62823
- Bruno Logerfo (@Logerfo): keyboardMapperTestUtils 的严格空检查PR #63027
- Mathias Rasmussen (@mathiasvr): 修复 #60002 撤销上次提交:保留暂存文件PR #60104
- Matt Crupi (@mmcru): 修复 #63295: 在 Linux 保存错误消息中引用 SudoPR #63394
- Philip Arola (@philiparola): 在设置屏幕中将“overwrite”更改为“override”PR #61926
- Samuel Toriel (@riltsken): [修复] #27649 将 intellisense 文档小部件固定到顶部PR #62115
- Ryan Scott (@rscott): 添加 Git:Fetch (prune)PR #59735
- Prabhanjan S Koushik (@skprabhanjan)
- SlaneR (@slaner): 修复注释中的拼写错误PR #62117
- Thomas Struller-Baumann (@Thomas-S-B): 移除了不必要的类型转换PR #63947
- Alexander (@usernamehw)
- Konrad Borowski (@xfix): 修复快照加载器中的意外穿透PR #62294
- Yisrael Veller (@YisraelV)
对 vscode-vsce
的贡献
- Nikolay Kondratyev (@kondratyev-nv): 修复特定版本的发布PR #307
对 vscode-eslint
的贡献
对 language-server-protocol
的贡献
- Jan Keromnes (@jankeromnes): 小改进:拼写错误、语法、措辞。PR #579
- Adolfo Ochagavía (@aochagavia): 修复规范中的拼写错误PR #597
对 vscode-languageserver-node
的贡献
- Remy Suen (@rcjsuen): 提供带有 DefinitionLink 的符号元数据PR #415
- Guillaume Martres (@smarter): 将 asVersionedTextDocumentIdentifier 添加到 Converter 接口PR #421
对 vscode-html-languageservice
的贡献
对 vscode-generator-code
的贡献
- Graham Bartley (@grabartley): 不再在不创建 git 存储库时创建 git 相关文件PR #141
对 debug-adapter-protocol
的贡献
- Danny Tuppeny (@DanTup): 修复 Dart 插件链接PR #16
对 vscode-chrome-debug-core
的贡献
- @digeff: 不发送存储源的 src 更改事件PR #378
- Shennie Yao (@Shenniey)
对 vscode-chrome-debug
的贡献
- Shennie Yao (@Shenniey): 添加 chrome 命令行开关的运行时参数遥测PR #749
- Leslie Leigh (@shrinktofit): 修复 targetTypes 选项PR #760
对vscode-azure-account
的贡献
- Yujin Hong (@yujhongmicrosoft): 添加对主权登录的支持PR #79
- Zhe Li (@Sneezry): 修复 Azure 中国登录问题PR #104
- Mateus Amin (@MateusAmin): 更新 README 与设置PR #107
对 vscode-recipes
的贡献
- Damon Jablons (@blackrobot): 清理 Python 食谱的 Markdown 格式PR #172
- Vinícius Salomão (@vizeke): 使用 vscode 运行和调试 PHPPR #169
对 localization
的贡献
Transifex VS Code 项目团队有近 1400 名成员,每月约有 100 名活跃贡献者。我们感谢您的贡献,无论是提供新翻译、对翻译投票还是提出流程改进建议。
以下是此版本的贡献者快照。有关项目(包括贡献者名单)的详细信息,请访问项目网站:https://aka.ms/vscodeloc。
- 保加利亚语:Любомир Василев。
- 加泰罗尼亚语: Adolfo Jayme-Barrientos, Enric Soler Rastrollo (MaDDoGo), Oriol Torrillas。
- 捷克语: Vít Staniček, Ondra Kalousek, Kryštof Černý。
- 丹麦语: Johan Fagerberg。
- 芬兰语: Feetu Nyrhinen, Jussi Palo, Ahto Simakuutio。
- 法语: Antoine Griffard, Thierry DEMAN-BARCELO, Adrien Clerbois。
- 德语: Carsten Kneip。
- 希腊语: George Xenakis, Christos Koutsiaris, dimipapaioan。
- 印地语: Anand Chalakkal Jose Mohan, Kiren Paul, Ashwini Gupta, amgusain, Pointless Banter, Shaswat Rungta, Adnan Shaikh, Shashida Nand Jha。
- 匈牙利语: Tar Dániel.
- 简体中文: feiyun0112 feiyun0112, Tingting Yi, XIANG ZUO, Tony Xia, G.Y. Z, Dave Young, Jessica Zhang, 驰 雷, Liam Kennedy, bh wu, WangCG duoduobear, ziqiang sun, 正元 刘, 越 郑, peng wei, xiong Fu, 吉姆 舒, 瑜 周, 仁松 陈, Jiang LI。
- 繁体中文: Winnie Lin , Duran Hsieh, Hans Chiu, Alan Liu。
- 印尼语: Laurensius Dede Suhardiman, Wildan Mubarok, Joshua Siagian, Rizki A. Wibowo。
- 日语: Satoshi Kajiura, Shunya Tajima, Yuichi Nukiyama, Yoshihisa Ozaki, dkp sk, Hiroyuki Mori。
- 卡纳达语: Sanjay !, Sushmit Patil。
- 马拉雅拉姆语: Kiren Paul, Anand Chalakkal Jose Mohan。
- 挪威语: Espen Klein Nilsen, Ivar L, Simen Dæhlin, Daniel Bjørnbakk。
- 波兰语: Artur。
- 葡萄牙语(巴西): Danilo Dantas, Thiago Custodio, Vinicius Ribeiro, Lucas Santos, Gabriel Henrique Oliveira de Mello。
- 罗马尼亚语: Szauka。
- 俄语: Mikhail Zabaluev, Acupofspirt, Ilya Umnov。
- 僧伽罗语: Anand Chalakkal Jose Mohan。
- 西班牙语: Jorge Serrano Pérez, Alejandro Medina, Alberto Poblacion, Carlos Longarela, Carlos Mendible, Guillermo Callaghan, Alfonso Jesus Flores Alvarado, Andy Gonzalez。
- 泰米尔语: Vijay Nirmal, Avinash, Jeyanthinath Muthuram, Narayanan Singaram。
- 泰卢固语: Raja Tirumala Rao Guna。
- 土耳其语: Eyüp DALAN, Mustafa Turhan, Türker YILDIRIM。
- 越南语: Nguyễn Nhật Tân。