2021年9月(版本1.61)

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

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

下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


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

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

观看亮点,了解此版本中的新功能,在VS Code团队的发布派对上。您可以在我们的YouTube频道上找到活动录像

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

工作台

拆分编辑器而不创建新组

新增了一个命令在组中拆分 (⌘K ⇧⌘\ (Windows, Linux Ctrl+K Ctrl+Shift+\)),用于将编辑器拆分为两侧,而无需第二个编辑器组。这允许您在同一文件的两个编辑器中并排工作。您还可以通过切换布局按钮在垂直或水平拆分之间切换布局,如短视频所示。

有一个新的设置 workbench.editor.splitInGroupLayout,如果你更喜欢垂直或水平分割。

有新的命令可以通过键绑定使用此功能:

  • workbench.action.splitEditorInGroup
  • workbench.action.toggleSplitEditorInGroup
  • workbench.action.joinEditorInGroup
  • workbench.action.toggleSplitEditorInGroupLayout

并在两侧之间导航:

  • workbench.action.focusFirstSideEditor
  • workbench.action.focusSecondSideEditor
  • workbench.action.focusOtherSideEditor

新颜色 sideBySideEditor.border 设置边框颜色以分隔一侧与另一侧。

锁定的编辑器组

我们在上一个里程碑中引入了锁定编辑器组作为实验性新功能。在这个里程碑期间,设置体验得到了改进,允许您轻松选择一个在打开时应自动锁定组的编辑器:

锁定编辑器组设置

该设置现在称为workbench.editor.autoLockGroups。同样,与编辑器组锁定相关的命令已重命名,并且不再是实验性的:

  • workbench.action.lockEditorGroup
  • workbench.action.unlockEditorGroup
  • workbench.action.toggleEditorGroupLock

通过装饰指示已删除和只读的编辑器

打开的编辑器可以指示它们是否为只读状态,或者它们关联的资源是否已从磁盘中删除。这种指示是通过在编辑器标签后附加“deleted”和/或“readonly”来给出的,这需要相当多的空间。

VS Code 现在为此目的使用装饰:

  • 已删除资源的编辑器会显示为删除线并以红色显示。
  • 带有只读资源的编辑器会显示一个锁图标。

编辑器只读和删除装饰

将编辑器拆分到现有组中

当您将编辑器拆分到一侧时,VS Code 会打开一个新的编辑器组,即使一侧已经存在一个现有的组。然而,有时您可能希望将编辑器拆分为已经存在的组。

为了支持这一点,添加了新的命令:

  • workbench.action.splitEditorToPreviousGroup: 分割到前一个组。
  • workbench.action.splitEditorToNextGroup: 分割到下一个组。
  • workbench.action.splitEditorToAboveGroup: 将编辑器拆分到当前组的上方。
  • workbench.action.splitEditorToBelowGroup: 分割到当前组下方的组。
  • workbench.action.splitEditorToLeftGroup: 将编辑器拆分到当前组左侧的组中。
  • workbench.action.splitEditorToRightGroup: 将编辑器拆分到当前组右侧的组中。
  • workbench.action.splitEditorToFirstGroup: 分割到第一组。
  • workbench.action.splitEditorToLastGroup: 分割到最后一个组。

差异编辑器的较短标签

当你比较两个文件时,工作区相对文件夹路径被添加到文件名前,使得很难看到被比较文件的名称。

在此版本中,文件夹现在从标签中隐藏,除非两个文件名相同,这与普通编辑器标签的行为相匹配。

如果两个文件名相同,则会显示一个提示文件夹差异的描述:

差异编辑器比较两个文件

macOS: 文件菜单更改

在macOS上,如果您从文件菜单中选择打开...菜单项,您可以同时打开文件和文件夹。对于新用户来说,这可能会让人感到意外,人们尝试使用打开工作区命令来打开一个文件夹,而该菜单项实际上是专门用于打开.code-workspace文件的。

为了避免混淆,我们对macOS上的文件菜单进行了轻微调整:

  • 一个新条目 打开文件夹... 打开一个文件夹。
  • 打开工作区... 已更名为 从文件打开工作区...

macOS 文件菜单

遥测设置

有一个新的遥测设置,telemetry.telemetryLevel,它提供了更高的配置粒度,并允许用户选择是否只发送错误遥测数据而不发送一般使用数据。其值为onerroroffonerror的值也会启用崩溃报告器。

现有的设置 telemetry.enableTelemetrytelemetry.enableCrashReporter 已被标记为弃用,推荐使用新的 telemetry.telemetryLevel 设置,但它们仍将被尊重。

小地图背景透明度

现在可以使用新添加的minimap.foregroundOpacity颜色独立配置minimap背景的不透明度,而不影响minimap文本的不透明度。

更新的帮助菜单项

随着入门体验的不断改进,帮助菜单项已更新为更常用的名称。这是基于新用户的学习经验,但希望使每个人都能更容易地找到帮助。介绍视频现在改为视频教程互动游乐场改为编辑器游乐场。您将在帮助菜单和命令面板中找到这些新名称。帮助菜单还有一个显示所有命令条目,作为打开命令面板的额外入口点。

编辑器

括号对指南

编辑器现在支持基本的括号对引导。括号对引导使用与括号对着色功能相同的颜色和算法。括号对匹配算法在最近的"括号对着色速度提升10,000倍"博客文章中详细描述。

类似于缩进指南,活动的括号对指南会被高亮显示。

编辑器中显示的括号对指南

可以通过配置editor.guides.bracketPairs设置(默认为false)来启用括号对引导。 我们将在下一个版本中继续迭代此功能,并探索垂直引导。

缩进指南设置

editor.renderIndentGuideseditor.highlightActiveIndentGuide 设置已被弃用,推荐使用 editor.guides.indentationeditor.guides.highlightActiveIndentation

源代码控制

发布或同步 Git 仓库的“操作按钮”

Git扩展现在在源代码管理视图中添加了一个新的“操作”按钮,以便您更轻松地发布或同步任何未推送的更改。

新源代码控制视图同步按钮

主题: Amethyst Theme

默认情况下,Git扩展会添加一个同步更改按钮,如上所示,如果有未推送的提交,或者如果分支尚未发布,则添加一个发布更改按钮。此外,用户可以通过配置git.showUnpublishedCommitsButton设置来自定义此行为,该设置默认为whenEmpty,以便仅在存在未推送的提交且视图中没有其他更改时显示按钮。

这个新的操作按钮作为源代码控制扩展的新提议API提供,更多详情请参见下面的提议API部分

最后,用户可以通过新的scm.showActionButton设置完全禁用源代码管理视图中任何操作按钮的可见性,这将覆盖任何源代码管理扩展的行为。

更改文件显示的限制增加

在此版本之前,Git扩展在源代码控制视图中显示的更改数量有一个硬编码的限制,即5000个更改。这个限制是为了防止用户在VS Code处理Git报告的所有更改时等待时间过长。现在,这个限制已增加到10,000个更改,并且新增了一个git.statusLimit设置,允许用户自定义这个限制(如果需要,可以按仓库设置)。此设置也可以设置为0以完全禁用限制,但请注意,如果有大量更改,这可能会导致更新需要很长时间。

此外,当超过限制时,我们还在输入框上添加了以下警告指示器。

新的警告指示器,显示“检测到太多更改。下面仅显示前10,000个更改”

终端

固定尺寸

您现在可以通过终端:设置固定尺寸命令(workbench.action.terminal.setDimensions)静态设置终端尺寸。这在换行可能令人不适或干扰的情况下非常有用。

该命令将显示一个提示,您可以在其中输入所需的宽度和/或高度。

终端设置固定尺寸列宽提示

自定义标题和描述

终端名称通常是它们关联的进程的名称,有时可能难以区分终端。

你现在可以使用变量在terminal.integrated.tabs.titleterminal.integrated.tabs.description设置中配置标题和描述。

当前的默认值为:

{
  "terminal.integrated.tabs.title": "${process}",
  "terminal.integrated.tabs.description": "${task}${separator}${local}${separator}${cwdFolder}"
}

可用的变量有:

  • ${cwd} - 终端的当前工作目录
  • ${cwdFolder} - 终端的当前工作目录。
  • ${workspaceFolder} - 终端启动时所在的工作区。
  • ${local} - 表示远程工作区中的本地终端。
  • ${process} - 终端进程的名称。
  • ${separator} - 一个条件分隔符(" - "),仅在周围有值或静态文本的变量时显示。
  • ${sequence} - 进程提供给 xterm.js 的名称。
  • ${task} - 表示此终端与任务相关联。

表情符号输入法

现在macOS上的输入法编辑器(IME)支持表情符号。

在macOS上IME集成终端中可用的表情符号对话框

Alt 缓冲区活动上下文键

一些终端用户界面应用程序,如nano,使用的键盘快捷键被VS Code工作台占用,这限制了它们在VS Code中集成时的功能。一个新的when clause context键,TerminalContextKeys.altBufferActive,在alt缓冲区激活时将键绑定定向到终端而不是工作台,以解决这个问题。

语言

新的 JavaScript 和 TypeScript 语言状态项

当前的 TypeScript 版本和 IntelliSense 状态现在显示在语言状态栏项中:

JavaScript 和 TypeScript IntelliSense 状态项显示配置文件和 TypeScript 版本

以前,TypeScript 版本总是显示在状态栏中。你可以固定版本以恢复旧的行为:

语言状态项还会显示当前文件的jsconfig/tsconfig,并会指示您当前是否处于部分模式

跨未命名文件的IntelliSense

所有未命名的JavaScript和TypeScript文件现在被视为同一项目的一部分。这意味着在一个未命名文件中定义的全局符号现在会在其他文件中显示为建议。

这更好地匹配了工作区中磁盘文件的行为。您可以向未命名的文件添加importexport,将其转换为模块,这将隐藏其全局变量,使其不被其他文件访问。

跨网页文件的IntelliSense

IntelliSense 现在在浏览器中运行的 VS Code 上,可以在 vscode.devgithub.dev 的 JavaScript 和 TypeScript 文件中工作。

在github.dev上的跨文件JavaScript智能感知

请记住,当VS Code在浏览器中运行时,它只能访问您当前打开的文件,因此VS Code无法提供项目范围的IntelliSense功能,例如自动导入。

JSX标签的更一致的折叠

当你在 JavaScript 或 TypeScript 中折叠一个 JSX 标签时,VS Code 现在会继续显示闭合标签:

JSX中的折叠

这与HTML中的折叠工作方式相匹配。

预览功能

TypeScript 4.5 支持

此更新包括对即将发布的TypeScript 4.5版本的初步支持。有关新语言和工具功能的更多信息,请参阅TypeScript 4.5 beta公告帖子。一些工具亮点包括:

  • 初步支持 JSX 属性补全
  • 更准确的引用计数用于引用CodeLens。

要开始使用 TypeScript 4.5 的夜间构建版本,请安装 TypeScript Nightly 扩展

请分享您的反馈,并告诉我们您在使用TypeScript 4.5时是否遇到任何错误。

在应用程序重启时恢复终端会话

当VS Code窗口关闭时,终端进程会被处理掉。在这个版本中,有一个新的选择加入设置,用于记录和恢复缓冲区,并使用它来重新创建进程。设置terminal.integrated.persistentSessionReviveProcess以启用此功能。

应用程序重启时终端缓冲区会恢复,并显示快照拍摄时间的消息

切换终端大小为内容宽度

您可以通过⌥Z (Windows, Linux Alt+Z)或使用标签上下文菜单操作切换大小以适应内容宽度来在适应全部内容和换行之间切换终端宽度。

这与在编辑器中切换换行的操作类似,并且共享相同的快捷键绑定。

对扩展的贡献

Jupyter

目录

Jupyter Notebooks 的目录现在可以通过命令面板中的 Jupyter: 显示目录 命令访问。同样的功能也可以通过笔记本工具栏中的图标访问。

此功能适用于VS Code中的所有笔记本,因此可以通过文件资源管理器中的大纲视图访问。

通过新建文件菜单创建新的Notebooks

你现在可以使用菜单项文件 > 新建文件...来创建一个新的Jupyter Notebook。这个菜单也可以从欢迎页面上的新建文件...项或命令面板中访问。

调试

VS Code 现在支持 Jupyter Notebooks 的完整调试功能。要尝试此功能,请确保已安装 ipykernel v6+ 作为您选择的内核,设置断点,然后选择 调试单元格 命令。

远程调试

你也可以使用逐行运行并通过远程内核调试Jupyter Notebooks。要尝试此功能,请使用Jupyter: 指定本地或远程Jupyter服务器进行连接命令连接到你的远程内核,确保你已安装ipykernel v6+作为你选择的内核,并像往常一样使用逐行运行或调试。

独立的渲染器扩展

Jupyter Notebook 渲染器已被拆分到一个单独的扩展中(Jupyter Notebook Renderers),允许用户在 vscode.devgithub.dev 上查看 Notebook 输出,如 plotly、vega、latex 等。

Python

新的Python教程

Python 扩展现在提供了一个包含一些基本设置步骤的教程,以改善在 VS Code 中开始使用 Python 的体验。

新的Python教程

改进的调试体验

在没有launch.json配置文件的工作空间中工作时,Python扩展每次启动调试Python文件或项目时都会显示调试器配置菜单。这在调试带有自定义参数的Web应用程序(如Flask、Django或FastAPI)时可能会特别烦人。

现在,您不再需要在每次启动调试时选择配置,因为您在会话期间所做的第一个选择将被重复使用。

GitHub 拉取请求和问题

工作仍在继续,GitHub Pull Requests and Issues 扩展允许您处理、创建和管理拉取请求和问题。查看扩展的 0.31.0 版本的更新日志 以了解亮点。

远程开发

工作仍在继续在远程开发扩展上,这些扩展允许您使用容器、远程机器或Windows Subsystem for Linux (WSL) 作为全功能的开发环境。

1.61版本的功能亮点包括:

  • 转发端口中的DNS名称。
  • 简单的容器附加功能选择。
  • Dev Containers 扩展可以在 WSL 中执行 CLI 命令。

您可以在远程开发发布说明中了解新扩展功能和错误修复。

扩展开发

平台特定扩展

扩展现在可以为VS Code支持的每个平台(Windows、Linux、macOS)发布不同的VSIX。从VS Code版本1.61.0开始,VS Code会查找与当前平台匹配的扩展包。从版本1.99.0开始,vsce扩展发布工具支持发布平台特定的扩展

如果你的扩展有特定平台的库或依赖项,平台特定的扩展非常有用,这样你可以控制包含在平台包中的确切二进制文件。一个常见的用例是当扩展使用原生节点模块时。

更多关于此内容可以在我们的平台特定扩展文档中找到。

测试标签和非错误输出

本月我们发布了基于新的测试API的扩展构建的额外API。

  • Test tags 允许您配置某些测试是否可以运行以及如何运行。

  • 非错误输出 允许你将额外的控制台输出与特定的测试用例关联起来。

    来自输出的消息以内联方式显示,类似于失败消息。

    图片显示“hello world”在console.log语句旁边内联显示

使文件系统提供者能够将文件声明为只读

文件系统提供者现在可以通过在FileStat对象上设置一个新的permissions属性,将单个文件标记为只读,方法是将该属性的值设置为FilePermission.Readonly。只读文件不可编辑。

注意: 如果所有文件都应被视为只读,你可以在调用 registerFileSystemProvider 时使用现有的 isReadonly 选项。

设置编辑器扩展类别

设置编辑器现在在有类别时显示扩展的contributes.configuration端点的子树。

要创建多个类别,contributes.configuration 接受一个配置数组,每个配置的 title 键用于部分标题。还有一个 order 字段,允许在子树中重新排序类别。

新设置编辑器目录显示CSS语言功能拥有自己的子树

类型层次结构

添加类型层次结构提供者的API提案已经最终确定。

WebviewOptions.enableForms

WebviewOptions 上的新属性 enableForms 允许您启用或禁用 webview 中的表单。为了向后兼容,如果您已经设置了 enableScripts,则 enableForms 默认为 true。否则,它默认为 false。

我们建议禁用表单,除非您的webview内容需要它们。

终端状态

一个新的state属性在Terminal对象上暴露出来,同时还有一个对应的window.onDidChangeTerminalState事件,用于指示终端是否已被用户交互过。例如,扩展可能希望等到用户与终端交互后再运行某个操作。

在测试数据上运行Web扩展测试

@vscode/test-web 节点模块提供了一个CLI和API,用于在Chromium、Firefox或Webkit中测试Web扩展。

此里程碑的新功能是选项 folderPath,用于在测试数据上打开 VS Code for the Web。内存中的文件系统包含给定位置的资源,以便测试有文件可供使用。

vscode-test-web --browserType=chromium --extensionDevelopmentPath=$extensionLocation $testDataLocation

更新后的codicons

以下新图标已添加到我们的codicon库中:

新增的codicon图标列表

  • beaker-stop
  • bracket-dot
  • bracket-error
  • bracket
  • debug-continue-small
  • graph-line
  • graph-scatter
  • pie-chart

Visual Studio Code 的 Webview UI 工具包

Visual Studio Code 的 Webview UI 工具包 是一个用于在 Visual Studio Code 中构建 基于 webview 的扩展 的组件库。

Webview 工具包组件插图

库的功能包括:

  • 实现Visual Studio Code设计语言: 创建与编辑器其他部分具有一致外观和感觉的扩展。
  • 自动支持颜色主题: 所有组件在设计时都考虑了主题化,并将自动显示当前的编辑器主题。
  • 使用任何技术栈: 该库以一组Web组件的形式提供,这意味着无论扩展是使用什么技术栈(React、Vue、Svelte等)构建的,开发者都可以使用这个工具包。
  • 开箱即用: 所有组件都附带符合网络标准的ARIA标签和键盘导航。

虚拟工作空间扩展指南

有一个新的虚拟工作空间扩展指南,帮助扩展作者在VS Code在虚拟环境中运行时测试和更新他们的扩展。随着像GitHub Repositories这样的扩展的引入,它创建了自己的虚拟文件系统,以及像vscode.devgithub.dev这样的新工作流程,其中VS Code在浏览器中运行,扩展不能再假设它们可以直接访问磁盘文件系统或平台功能。

虚拟工作区扩展指南涵盖:

  • 您的扩展是否能在虚拟工作空间中无需修改即可工作。
  • 如何更新您的扩展以在虚拟工作区中工作,而无需磁盘文件系统。
  • 如何向VS Code发出信号,指示在虚拟工作区中运行时是否启用或禁用您的扩展。

提议的扩展API

每个里程碑都伴随着新的提议API,扩展作者可以尝试使用它们。一如既往,我们希望得到您的反馈。以下是您尝试提议API需要做的事情:

  • 你必须使用Insiders,因为提议的API经常变化。
  • 您必须在扩展的package.json文件中包含这一行:"enableProposedApi": true
  • 将最新版本的vscode.proposed.d.ts文件复制到项目的源代码位置。

你不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。

TaskPresentationOptions 关闭属性

close 属性是 tasks.json 模式中的一个 presentation 属性,在 TaskPresentationOptions API 中可用。它的功能与匹配的 tasks.json 属性相同,通过控制任务完成后终端是否关闭来工作。

标签页 API

有一个提议的API用于读取和操作标签页。这解决了常见的功能请求,例如在没有支持的textDocument时想要访问打开资源列表的需求。您可以在issue #133532中提供关于此API的反馈。

MarkdownString.supportHtml

新提出的supportHtml属性在MarkdownString上启用,可以渲染出现在Markdown文本中的安全子集的原始HTML。

supportHtml 属性默认为 false。当禁用时,VS Code 将会去除 Markdown 文本中出现的任何原始 HTML 标签。

控制器渲染器脚本现在使用JavaScript模块

NotebookController.rendererScripts 允许笔记本控制器在任何渲染器运行之前预加载一组 JavaScript 文件到笔记本中。这些脚本可以初始化笔记本或定义渲染器依赖的全局符号。

渲染器脚本以前是普通的JavaScript文件。这些脚本可以使用VS Code导出的全局符号来调用VS Code特定的API。

这个全局符号不可发现,也没有给VS Code对渲染器脚本本身的太多控制。为了解决这个问题,渲染器脚本现在使用JavaScript模块,这些模块导出一个activate函数。这个函数被传递了VS Code API:

interface KernelPreloadContext {
    readonly onDidReceiveKernelMessage: Event<unknown>;
    postKernelMessage(data: unknown): void;
}

export function activate(ctx: KernelPreloadContext): Promise<void> | undefined {
    ...
}

这一变化也更好地将NotebookController中的渲染器脚本与由贡献的notebook renderer提供的渲染脚本对齐。

快速选择 keepScrollPosition 属性

window.createQuickPick()返回的QuickPick对象上的keepScrollPosition属性已作为提议的API添加。这允许您控制Quick Pick中的滚动位置(cursorTop)是否移回列表的顶部。

以下是此API的一些使用案例:

  • 使用提议的QuickPickItemButtons API实现“从列表中删除此项”选项(例如,Ctrl/Cmd + P x QuickPickItemButton)。
  • 使用提议的QuickPickItemButtons API实现“以某种方式切换此项目”选项(例如,插入代码片段命令)。
  • 在快速选择中异步加载项目(例如使用setInterval通过重新分配.items属性向列表中添加项目,其中滚动不应跳转到顶部)。

如果没有控制滚动位置的能力,这些操作中的每一个都会强制Quick Pick的滚动位置跳到列表的顶部。keepScrollPosition允许扩展作者控制这种行为。

SourceControl.actionButton

源代码控制API现在在SourceControl对象上包含一个actionButton属性,允许SCM提供者有条件地在输入框下方显示一个“操作”按钮。例如,Git扩展使用这个新属性在有未推送的更改时显示发布或同步按钮。

语言服务器协议

新版本的语言服务器协议以及相应的npm模块已经发布。新版本包含了一个关于类型层次结构的提议实现。

工程

切换到 DOMPurify 来清理渲染的 HTML

我们已内部切换到使用DOMPurify来清理在主工作台中渲染的HTML。这主要用于清理渲染的Markdown。

DOMPurify 维护良好,并且默认符合 trusted types。此开关有助于保护用户,并让我们更有信心启用诸如 MarkdownString.supportHtml 等功能。

使用 open 命令进行 Big Sur 命令行操作

在macOS Big Sur上,我们现在使用open命令从命令行启动VS Code。这一变化使得VS Code可以像从macOS Dock启动一样打开,从而修复了一些涉及权限的问题。

文件监视更改

用于检测磁盘上文件和文件夹更改的文件监视器已更改为一个,该库可以处理我们支持的所有平台(Windows、Linux、macOS),并减少了为不同平台维护不同监视器的开销。我们计划在所有平台上默认启用此库。在此次迭代中,我们在Windows和macOS上启用了它,并计划不久后在Linux上启用它。

新的监视器在启动时应该更快,并且在处理大文件夹时消耗的CPU周期更少。使用该库的一个缺点是,文件监视器不再自动检测工作区中在macOS上是符号链接的文件夹。如果您有这样的设置,可以使用新的files.watcherInclude设置来显式添加符号链接路径以包含在文件监视中。从好的方面来看,您可以在Windows上使用此新设置来显式包含工作区内的符号链接文件夹——这在以前在Windows上是不可能的。

您在日常工作中不应注意到任何差异,但如果文件监视对您不起作用,请报告问题。如果您遇到问题,有一个设置 files.legacyWatcher 可以启用旧的监视器。

文档

高级容器配置

有一个新章节涵盖了Dev Containers扩展的高级容器配置

在容器文档中,您可以学习如何:

高级容器配置文档提供了设置开发容器的提示和代码示例,以及简短的YouTube视频

显著的修复

  • 69665: 终端在操作系统从睡眠状态恢复时有时会显示损坏的纹理
  • 130407: [琐事] 设置>文件:排除更改模式为(空白)将无法删除
  • 133149: 任务终端因信息/警告级别问题标记为失败。
  • 133567: 可访问性:在查找引用中,顶级树节点的标签都只显示为“true”
  • 133910: 当解析shell环境失败或超时时显示错误
  • 133976: 允许通过协议URL打开.code-workspace文件

感谢您

最后但同样重要的是,向本月为VS Code做出贡献的以下人员表示衷心的感谢

对我们问题跟踪的贡献:

vscode 的贡献:

vscode-eslint 的贡献:

vscode-html-languageservice的贡献:

vscode-json-languageservice 的贡献:

vscode-languageserver-node的贡献:

vscode-pull-request-github 的贡献:

vscode-references-view的贡献:

vscode-vsce 的贡献:

language-server-protocol的贡献:

monaco-editor-webpack-plugin的贡献: