2018年11月(版本1.30)

更新 1.30.2: 此次更新解决了这些问题

更新 1.30.1: 此次更新解决了这些问题

下载:Windows:x64 | Mac:Intel | Linux 64位:deb rpm tarball | 32位:deb rpm tarball


欢迎来到2018年11月发布的Visual Studio Code。此版本中有许多重要的更新,我们希望您会喜欢,一些关键的亮点包括:

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

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

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

内部人员:想要尽快看到新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。要获取最新的Visual Studio Code新闻、更新和内容,请在Twitter上关注我们@code

工作台

多行搜索输入

上个月,我们增加了对多行搜索的支持。这个月我们改进了搜索的用户体验,使其更易于使用。现在,您可以使用多行文本进行搜索,而无需编写正则表达式。在搜索框中输入Shift+Enter以插入新行,搜索框将扩展以显示您的完整多行查询。您还可以将编辑器中的多行选择复制并粘贴到搜索框中。

多行搜索输入

默认情况下在Linux上的自定义标题和菜单栏

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

Linux上的自定义标题和菜单栏

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

滚动菜单

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

滚动菜单

菜单栏溢出菜单

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

菜单栏溢出

移动的设置编辑器操作

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

设置编辑器操作

参考文献视图

参考文献视图已经优化,不再是一个预览功能。现在有两个命令:

  • 查找所有引用 打开引用视图。
  • Peek References 在Peek视图中打开引用。

引用视图在启动时是隐藏的,但一旦使用后就会保持可见。如果所有搜索结果都被清除,它会显示之前搜索的历史记录。

引用视图

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

编辑器

代码片段注释变量

有一些新的代码片段变量可以插入行或块注释,尊重当前语言。对于块注释使用BLOCK_COMMENT_STARTBLOCK_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(默认)、pushsync

语言

TypeScript 3.2

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

改进的JavaScript和TypeScript回调显示

JavaScript 和 TypeScript 的匿名回调在 Outline 视图、面包屑视图和文档符号列表中以前都被标记为 。这使得无法分辨你真正想要的是哪个函数:

VS Code 1.29 在 Outline 视图中显示条目

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

VS Code 1.30 带有更有帮助的标签

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

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

使用解构重命名

添加缺失的新JS/TS快速修复

在实例化类时忘记了new吗?TypeScript 3.2 带来了一个新的快速修复来帮助解决这个问题:

添加缺失的'new'快速修复

此快速修复适用于TypeScript和类型检查的JavaScript

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

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

路径智能感知中的图标

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

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

JSDoc语法高亮

这种内联高亮更好地匹配了VS Code的Markdown渲染,用于悬停和IntelliSense文档的JSDoc。

调试

简化的初始调试配置

在这个里程碑中,我们研究了如何简化我们最受欢迎的调试扩展生成的launch.json文件。我们的目标是让用户更容易启动和配置调试。这意味着隐藏不必要的启动配置属性,并在生成初始launch.json时使用快速选择UI以改善用户交互。有关此工作的更多详细信息可以在issue #62851中找到。

调试控制台可以被删除

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

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

我们已经改进并推广了launch.json变量提示用户输入的概念。您可以在任务部分找到详细信息。

从进程资源管理器调试

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

下面你可以看到如何附加到从集成终端启动的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 已经支持在 tasks.jsonlaunch.json 中通过 ${variableName} 语法进行变量替换

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

在这个里程碑中,用户输入变量已经得到了泛化和改进,现在它们可用于launch.json tasks.json。这项工作还将命令语法引入了tasks.json

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

使用 Angular CLI 的示例:

任务输入

以下是支持的属性列表:

  • 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 在已安装的扩展上提供了一个安装其他版本的操作,该操作会显示可用版本的下拉列表。

降级扩展

无响应的扩展主机

VS Code 在单独的 Node.js 进程中运行扩展——扩展主机。这将扩展代码与 VS Code 本身隔离开来,但不会将不同的扩展彼此隔离。由于 JavaScript 的单线程特性,扩展可能会有意或无意地独占扩展主机线程,阻塞所有其他扩展,并使操作显得无响应。

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

识别出的慢速扩展

作为用户,请注意状态栏中的铃铛图标,因为通知很小。作为扩展作者,如果您遇到无响应的问题,请查看此指南,它解释了发生了什么以及如何打开附加到问题的CPU配置文件。

预览功能

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

HTML 自定义标签 / 属性支持

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

HTML自定义标签和属性

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

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

扩展的网络代理支持

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

HTTP代理支持

将其设置为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的实际操作:

上述签名帮助提供者的实际操作

配置贡献的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扩展与TypeScript服务器插件同步VS Code设置,或动态更改插件的行为。查看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)。

用于控制调试适配器创建的最终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:。如果省略调试类型,则扩展将针对所有调试类型激活。

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

调试适配器协议

新增 shellProcessId 属性用于 runInTerminal 响应

如果调试适配器需要在终端中运行目标,它可以使用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来支持智能选择功能。今天,当您运行扩展选择缩小选择命令时,选择范围是基于一个弱启发式算法计算的。虽然我们正在努力改进该启发式算法,但我们也希望让扩展作者参与进来。因此,我们添加了一个提议的API,用于SelectionRangeProvider

工程

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个文件进行了严格空值检查,并将继续这项工作,直到整个代码库都被覆盖。

您可以跟踪此工程进度并了解更多关于该过程的信息issue #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 的贡献:

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.
  • Chinese Simplified: 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.
  • 中文繁体: 林温妮, 谢杜兰, 邱汉斯, 刘艾伦.
  • 印度尼西亚语: 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.