现已推出!阅读 10 月份的新功能和修复。

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 月版。此版本包含一些重大更新,我们希望您会喜欢,其中一些主要亮点包括

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

发行说明按与 VS Code 重点领域相关的以下部分进行排列。以下是一些进一步的更新

  • 工作台 - 菜单滚动和改进的溢出处理,一键打开 settings.json。
  • 语言 - JS/TS 重命名现在可以处理解构,添加缺少的 “new” 快速修复。
  • 调试 - 删除调试控制台,直接从 VS Code 进程资源管理器进行调试。
  • 任务 - 清除任务终端,为任务变量提供用户输入,重新运行上次任务命令。
  • 扩展开发 - 转到定义支持,新的签名帮助上下文。

内部人员:想尽快看到新功能?您可以下载夜间 内部人员 版本,并尝试最新的更新,只要它们可用即可。对于最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code

工作台

多行搜索输入

上个月,我们添加了对多行搜索的支持。本月,我们改进了搜索 UX,使其更易于使用。现在,您可以在无需编写正则表达式的情况下使用多行文本进行搜索。在搜索框中键入 Shift+Enter 以插入换行符,搜索框会扩展以显示完整的多行查询。您还可以将从编辑器中复制的多行选择粘贴到搜索框中。

multiline search input

Linux 上的自定义标题栏和菜单栏(默认)

在多个版本中,我们一直在通过自定义标题栏和菜单栏改进 Windows 上菜单的可访问性和主题性。虽然它在 Linux 上是可选的,但在本版本中,它将默认启用。

Custom title and menu bar on Linux

要使用本机标题栏,您可以将 window.titleBarStyle 设置为 native

滚动菜单

启用自定义菜单栏后,菜单将被限制在 VS Code 窗口内呈现。以前,菜单可能会被窗口边界截断。现在,通过在需要时使上下文菜单可滚动,已解决了这个问题。

Scrolling menus

菜单栏溢出菜单

当窗口宽度不足以容纳菜单栏和窗口标题时,菜单栏也会有一个新的溢出菜单(...)。

Menu bar overflow

移动了设置编辑器操作

设置编辑器操作(打开 settings.json显示已修改的设置等)已从设置编辑器内的 ... 菜单移动到编辑器标题栏。这使它们与其他编辑器类型一致,而且 打开 settings.json 现在只需单击带花括号 {} 的按钮即可。键盘快捷键编辑器也进行了同样的更改。

settings editor actions

引用视图

引用视图已得到完善,不再是预览功能。现在有两个命令

  • 查找所有引用,打开引用视图。
  • 预览引用,在预览视图中打开引用。

引用视图在启动时处于隐藏状态,但在使用后会保持可见。如果所有搜索结果都被清除,则会显示以前搜索的历史记录。

References View

现在视图顶部有一个结果摘要,还有一个上下文菜单用于清除和复制结果。修复了许多错误,整体稳定性得到了提高。

编辑器

代码段注释变量

有一些新的代码段变量可以插入行注释或块注释,并尊重当前语言。对块注释使用 BLOCK_COMMENT_STARTBLOCK_COMMENT_END,否则使用 LINE_COMMENT

以下代码段在 JavaScript 文件中插入 /* Hello World */,在 HTML 文件中插入 <!-- Hello World -->

{
  "hello": {
    "scope": "javascript,html",
    "prefix": "hello",
    "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
  }
}

声明与定义

到目前为止,VS Code 提供了用于显示符号定义的命令,例如 转到定义预览定义。这没有考虑到某些语言在符号的 声明定义 之间进行了比其他语言更严格的区分。我们已修复了这个问题,现在有 转到声明预览声明 命令用于显示符号的声明。

Go to Declaration

语言功能(如 转到声明)所需的数据由扩展计算,并且有一个新的 API,您可以在 扩展开发 部分阅读有关该 API 的信息。

平滑的游标动画

有一个新的设置 editor.cursorSmoothCaretAnimation,它将在每次移动游标时启用过渡动画。

Git 集成

更改默认单击操作

您现在可以更改单击源代码管理视图中的文件时的默认操作。默认情况下,VS Code 将打开差异视图,但通过将 git.openDiffOnClick 设置为 false,文件将在常规编辑器中打开。

提交时推送或同步

一个新的设置 git.postCommitCommand 允许您在提交后推送或同步您的存储库。可用的值是 none(默认)、pushsync

语言

TypeScript 3.2

VS Code 现在包含 TypeScript 3.2.2。此版本带来了一些令人兴奋的新语言功能,包括 bindcallapply 的严格类型检查 以及 BigInt 支持。TypeScript 更新还修复了一些重要的错误,并包含新的工具功能和改进

改进 JavaScript 和 TypeScript 回调的显示

以前,JavaScript 和 TypeScript 匿名回调在概述视图、面包屑视图和文档符号列表中都标记为 <function>。这使得无法区分您真正要找的是哪个函数

VS Code 1.29 with  entries in the Outline view

使用 TypeScript 3.2+,VS Code 现在显示更多回调函数的上下文,以便您能够将它们区分开来

VS Code 1.30 with much more helpful labels

重命名可以正确处理 JS/TS 解构

重命名现在可以处理 JavaScript 和 TypeScript 解构,并在需要时引入别名

Rename with destructuring

添加缺少的 new JS/TS 快速修复

在实例化类时忘记了 new?TypeScript 3.2 提供了一个新的快速修复来帮助您

The add missing 'new' quick fix

此快速修复在 TypeScript 和 类型检查的 JavaScript 中均有效。

JS/TS 路径建议的文件图标

基于 VS Code 1.29 中的工作,IntelliSense 小部件现在显示 JavaScript 和 TypeScript 路径建议的文件图标

Icons in path IntelliSense

JSDoc 注释中 Markdown 元素的高亮显示

JSDoc 块内的围栏代码块和其他 Markdown 元素现在将进行语法高亮显示

JSDoc Syntax highlighting

此内联高亮显示更符合 VS Code 对 JSDoc 的 Markdown 呈现,用于悬停和 IntelliSense 文档。

调试

简化的初始调试配置

在本里程碑中,我们研究了如何简化我们最流行的调试扩展生成的 launch.json 文件。我们的目标是让用户更容易启动和配置调试。这意味着隐藏不必要的启动配置属性,并使用快速选择 UI 在生成初始 launch.json 时提供更好的用户交互。有关此工作努力的更多详细信息,请参阅 问题 #62851

可以删除调试控制台

从上个里程碑开始,在调试多个调试会话时,我们会显示多个调试控制台,每个会话一个。现在,当相应的会话不再处于活动状态时,可以通过清除该调试控制台的内容来删除这些控制台。我们没有为管理调试控制台的生命周期添加显式命令,因为我们认为当前方法将更直观且更易于使用。

为调试配置改进了用户输入变量

我们改进了并概括了 launch.json 变量的概念,这些变量会提示用户输入。您可以在 任务 部分找到详细信息。

从进程资源管理器进行调试

现在可以使用 调试 上下文菜单操作从 VS Code 进程资源管理器(开发者:打开进程资源管理器)启动 Node.js 进程的调试。

下面您可以看到如何附加到从集成终端启动的 Node.js 进程。

debugging a Node.js process started from the terminal

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

清除任务终端

要清除终端然后执行任务,您可以使用 "clear": true 配置任务的 presentation 选项。

{
  "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.jsonlaunch.json 中进行 变量替换

对于 launch.json,甚至可以使用提示用户输入的变量(例如 ${command:pickNodeProcess},它会打开一个基于进程选择器的快速选择器)。此功能在 tasks.json 中不可用,并且基于命令的变量也存在其他限制(请参见问题 #9297#9544#30588)。

在这个里程碑中,用户输入变量已经得到推广和改进,现在可以在 launch.json tasks.json 中使用。这项工作也把命令语法带到了 tasks.json 中。

对于用户输入变量,我们引入了一个新的变量类别 input,它会导致以下语法:${input:variableName}。这种简单的语法不足以向用户展示有意义的 UI,因此我们在 launch.jsontasks.json 中引入了新的 inputs 部分,其中指定了其他配置属性。

使用 Angular CLI 的示例

Tasks input

以下是支持的属性列表。

  • id - 这些属性使用的相应变量名称。
  • type - 用户输入小部件的类型。在本版本中,支持 promptString(用于字符串输入框)和 pickString(用于字符串快速选择器)。
  • 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 在已安装的扩展上提供了一个 **安装另一个版本** 操作,它会显示一个可用版本的下拉菜单。

Downgrade Extension

无响应的扩展主机

VS Code 在一个单独的 Node.js 进程(扩展主机)中运行扩展。这将扩展代码与 VS Code 本身隔离开,但不会将不同的扩展彼此隔离开。由于 JavaScript 的单线程性质,一个扩展可以(有意或无意地)独占扩展主机线程,阻止所有其他扩展,并使操作看起来无响应。

VS Code 现在会监控扩展主机,当它变得无响应时,VS Code 会开始分析扩展主机。当发现一个扩展是导致无响应的原因时,会显示一个最小化的通知,鼓励用户提交问题。

Slow Extension Identified

作为 **用户**,请留意状态栏中的铃铛图标,因为该通知很小。作为 **扩展作者**,如果您收到无响应问题,请查看此 指南,其中解释了发生了什么以及如何打开附加到该问题的 CPU 分析器。

预览功能

预览功能尚未准备好发布,但已经足够功能齐全可以使用。欢迎您在开发过程中提供早期反馈。

HTML 自定义标签/属性支持

新的 html.experimental.custom.tagshtml.experimental.custom.attributes 设置允许您指定 VS Code 在启动时加载的标签和属性列表。当您编辑 HTML 文件时,VS Code 会为这些标签和属性提供自动完成和悬停。这对 Web Components 非常有用,例如

HTML custom tags and attributes

您可以打开 octref/web-components-examples 存储库来测试此功能。此功能处于 **预览阶段,设置名称和 JSON 格式可能会发生变化**。

如果您有反馈或功能请求,请在问题 #62976 中跟进。

扩展的网络代理支持

有一个实验性设置 Http: Proxy Support 用于为所有扩展启用网络代理支持。虽然我们仍在处理一些细节,但我们邀请您尝试一下,并 告诉我们它是否对您有效。(请注意,启用网络代理支持目前会 破坏 GitHub Pull-Request 扩展的登录。)

HTTP Proxy Support

将其设置为 override 对于大多数设置来说应该是最好的,尝试 on 进行比较,当它不能正常工作时。

扩展开发

转到声明

我们添加了一个 DeclarationProvider 接口,扩展可以实现它来支持 **转到声明** 功能。声明提供者应返回表示符号声明的位置。当多个提供者为同一个文件注册时,它们的結果将合并。

签名帮助上下文

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 的实际操作。

The above signature help provider in action

配置贡献的 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;

Tree Item Description

调试 API

更丰富的 DebugSession

DebugSession API 现在显示了工作区文件夹和 **已解析的** 调试配置。已解析意味着所有变量都已替换,并且特定于平台的属性部分已针对匹配的平台“扁平化”,并针对不匹配的平台删除。

断点的唯一 ID

Breakpoint 类现在显示了一个不会在整个生命周期内改变的唯一 ID (id)。

用于控制调试适配器创建的最终 API

在这个里程碑中,我们已经完成了用于控制调试适配器创建的扩展 API。API 使用一个新的 DebugAdapterDescriptorFactory,它必须使用 vscode.debug.registerDebugAdapterDescriptorFactory 为特定的调试类型注册。该工厂有一个名为 createDebugAdapterDescriptor 的单一方法,该方法会在 VS Code 需要调试适配器时被调用。由于调试会话被传递为参数(并且会话现在显示了工作区文件夹和已解析的配置),因此实现可以在被要求创建调试适配器时访问完整的上下文。createDebugAdapterDescriptor 必须返回一个对象,该对象描述 VS Code 如何创建和/或连接到调试适配器。

  • DebugAdapterExecutable 描述符使 VS Code 每会话将调试适配器作为外部进程启动,并通过 stdin/stdout 与其通信。一个选项属性包可以指定工作目录和环境变量。
  • DebugAdapterServer 使 VS Code 连接到一个服务器进程,该进程处理多个会话并通过套接字进行通信。

请注意:随着此 API 的最终确定,我们弃用了旧的(提议的)API DebugConfigurationProvider.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:<debug type>。如果省略调试类型,则扩展将为所有调试类型激活。

{
  "activationEvents": ["onDebugAdapterProtocolTracker:node"]
}

调试适配器协议

runInTerminal 响应的新 shellProcessId 属性

如果调试适配器需要在终端中运行目标,它可以使用 DAP runInTerminal 请求。此请求可以选择返回目标进程的 processId,但实际上没有前端实现能够提供此信息。出于这个原因,我们为返回终端 shell 的进程 ID(它更容易确定)引入了新的属性 shellProcessId

剪贴板

剪贴板 API 已经完成,现在可以被所有扩展使用。它允许扩展将字符串复制和粘贴到操作系统剪贴板。

完成项

当插入跨越多行的完成项时,VS Code 会调整缩进。这并不总是想要的,因此我们添加了 vscode.CompletionItem.keepWhitespace 来控制此行为。

符号提供者的标签

注册文档符号提供者时,现在可以提供标签(DocumentSymbolProviderMetadata)。当文档具有多个符号提供者时,此标签将显示在面包屑和概述视图中。

提议的扩展 API

每个里程碑都伴随着新的提议 API,扩展作者可以尝试它们。与往常一样,我们热衷于您的反馈。这是您尝试提议的 API 所需的操作

  • 您必须使用 Insider 版本,因为提议的 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;

Tree View Message

智能选择和扩展

我们添加了一个提议的 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 月份将更新推送到我们的 Insider 用户,以收集更多反馈。如果您有兴趣帮助,请确保安装 VS Code Insider 版本

社区问题跟踪

长期以来,社区一直帮助我们定期进行问题跟踪。随着我们看到越来越多的问题被提交(目前平均每天 70 个问题),我们已经开始邀请最活跃的社区成员 添加特定标签 到他们正在处理的问题中。由于 GitHub 没有细粒度的权限,我们使用我们的问题机器人来接收某些评论并为他们添加标签。请参阅下面的 感谢 部分以了解致谢。

严格的空值检查

我们继续进行 对主要 VS Code 代码库进行严格的空值检查。我们现在对大约 800 个文件进行了严格的空值检查,并将继续进行此项工作,直到覆盖整个代码库。

您可以跟踪这项工程工作并了解有关流程的更多信息 问题 #60565

对扩展的贡献

我们的团队维护或贡献了多个 VS Code 扩展。本月最值得注意的是

GitHub 拉取请求

在本里程碑中,我们致力于改进 GitHub 拉取请求 扩展。

以下是其中一些新功能

  • 直接从您的本地分支创建拉取请求。
  • 在签出的拉取请求上建议一系列源代码更改。
  • 在拉取请求描述页面上查看状态检查信息。

您可以在 vscode-pull-request-github 版本 中阅读扩展的完整发布说明。

值得注意的修复

  • 37929: 创建调试环境下拉菜单时不要激活调试器
  • 60187: 调试器不会在 jest 测试中命中断点
  • 61590: 使设置和键盘快捷键编辑器在显示编辑器操作方面保持一致
  • 62370: 改进编辑器中的诊断悬停
  • 62500: 将“运行到光标”添加到命令面板
  • 62778: 居中布局不会恢复大小
  • 63618: 调试 Electron 2.0.13 64 位失败,出现错误“无法连接到运行时进程,在 10000 毫秒后超时”。但在 Electron 32 位上成功

感谢

最后但并非最不重要的一点是,衷心感谢以下人员,他们帮助使 VS Code 变得更好

对我们的问题跟踪的贡献

vscode 的贡献

vscode-vsce 的贡献

vscode-eslint 的贡献

language-server-protocol 的贡献

vscode-languageserver-node 的贡献

vscode-html-languageservice 的贡献

vscode-generator-code 的贡献

debug-adapter-protocol 的贡献

vscode-chrome-debug-core 的贡献

vscode-chrome-debug 的贡献

vscode-azure-account 的贡献

vscode-recipes 的贡献

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, Yi Tingting, 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.