请在后台-主题设置-文章页设置-添加左边栏模块

北京时间 2020 年 2 月 7 日,微软发布了 Visual Studio Code 1.42 版本,这也是 2020 年 VS Code 首次大更新。让我们来看看有哪些主要的更新。

Visual Studio Code 1.42 新版本重磅发布

重命名预览

现在,Visual Studio Code允许您预览“ 重命名”更改。重命名时,可以通过Shift + Enter确认新名称,然后查看“ 重构预览”面板。它在差异编辑器中显示挂起的更改,并允许您取消选中/选中单个更改。一旦应用了重命名(或中止了重命名),差异编辑器和预览面板就会关闭,从而使您返回当前的编辑器。

Visual Studio Code 1.42 新版本重磅发布

限制打开编辑器的数量

有一些新设置可以限制一次打开的最大编辑器数量。

  • workbench.editor.limit.enabled:启用此功能(默认为关闭)。
  • workbench.editor.limit.perEditorGroup:是对每个编辑器组还是在所有组中应用限制。
  • workbench.editor.limit.value:打开的编辑器的最大数量(默认为10个)。

如果启用,则在打开新编辑器时,VS Code将关闭最近最少使用的编辑器。

在下面您可以看到限制设置为3时的行为:

Visual Studio Code 1.42 新版本重磅发布

注意:肮脏的编辑器(具有未保存更改的文件)不会自动关闭,但仍会计入打开的编辑器总数中。

无标题的编辑器改进

VS Code中的无标题编辑器是尚未保存到磁盘的文本缓冲区。您可以随意打开它们,并且所有文本内容在两次重新启动之间都会存储和恢复。

无标题的编辑标题

过去,无标题的编辑器被赋予通用名称,例如Untitled-1,向上计数。在此版本中,无标题的编辑器将使用文档第一行的内容作为编辑器标题,并包括通用名称作为说明:

Visual Studio Code 1.42 新版本重磅发布

注意:如果第一行为空或不包含任何单词,则标题将退回到Untitled-*以前的样子。

默认语言模式

默认情况下,未命名文件没有配置特定的语言模式。VS Code有一个设置,files.defaultLanguage用于为无标题文件配置默认语言。在此版本中,设置可以采用一个新值{activeEditorLanguage},该值将动态使用当前活动的编辑器的语言模式,而不是固定的默认值。

此外,将文本复制并粘贴到无标题编辑器中时,如果从VS Code编辑器复制了文本,则VS Code现在将自动更改无标题编辑器的语言模式:

Visual Studio Code 1.42 新版本重磅发布

注意:如果无标题编辑器已经指定了语言模式,则粘贴文本不会更改它。

浏览最近使用的编辑器

在此版本中,现在列出了所有编辑器组中最近使用的(MRU)编辑器的列表。当一个编辑器作为活动编辑器打开时,或者如果已经打开则成为新的活动编辑器,则被认为是最近使用的。关闭编辑器后,会将其从此列表中删除。

该列表的一个应用是新的edt mru选择器,您可以通过新的视图打开该显示器:“按最近使用过的显示所有编辑器workbench.action.showAllEditorsByMostRecentlyUsed)”命令:

Visual Studio Code 1.42 新版本重磅发布

您可以添加键盘快捷键,以在不使用鼠标的情况下在此选择器中快速导航。例如,下面是一个键绑定,以便Ctrl + TabCtrl + Shift + Tab跨所有组的编辑器导航(而不是像默认键绑定那样仅在活动组内):

{
    "key": "ctrl+tab",
    "command": "workbench.action.quickOpenPreviousRecentlyUsedEditor",
    "when": "!inEditorsPicker"
},
{
    "key": "ctrl+shift+tab",
    "command": "workbench.action.quickOpenLeastRecentlyUsedEditor",
    "when": "!inEditorsPicker"
}

如果要在不使用选择器的情况下浏览列表,可以使用以下新命令:

  • 查看:打开下一个最近使用过的编辑器workbench.action.openNextRecentlyUsedEditor
  • 查看:打开上一个最近使用过的编辑器workbench.action.openPreviousRecentlyUsedEditor

为了区分哪些编辑器导航命令可与选择器一起使用,哪些不可用,某些现有命令的行为已更改。具体来说,“ 最近使用的组中编辑器”命令不再使用选择器:

  • 查看:在组workbench.action.openNextRecentlyUsedEditorInGroup)中打开下一个最近使用的编辑器
  • 查看:在组workbench.action.openPreviousRecentlyUsedEditorInGroup)中打开上一个最近使用过的编辑器

对于基于选择器的导航,请使用:

  • 视图:快速打开组workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup)中的上一个最近使用过的编辑器
  • 视图:组workbench.action.quickOpenLeastRecentlyUsedEditorInGroup)中的“ 快速打开最近最少使用的编辑器”

移动面板

包含“输出”,“调试控制台”,“终端”和“问题”窗格的面板现在可以移至编辑器的左侧。

已删除命令“ 视图:切换面板位置”workbench.action.togglePanelPosition),以支持以下新命令:

  • 视图:向左移动面板workbench.action.positionPanelLeft
  • 视图:向右移动面板workbench.action.positionPanelRight
  • 视图:将面板移到底部workbench.action.positionPanelBottom

重新启动时还原所有窗口

VS Code在启动时还原窗口的设置已更改为默认情况下还原所有窗口。如果要返回到以前的行为,请配置"window.restoreWindows": "one"为仅打开一个窗口。

保存冲突解决

VS Code具有内置机制,可在您尝试保存已在VS Code之外或由其他程序(例如Git)更改的脏文件时显示通知:

Visual Studio Code 1.42 新版本重磅发布

这样做的动机是通知您,即使在文件变脏后更改了文件,保存也会覆盖磁盘上的内容。选择“ 比较”按钮可让您查看更改以及磁盘上的版本,然后覆盖或还原文件。

如果您知道磁盘上的更改可以被覆盖,现在通知上直接有一个“ 覆盖”按钮。您还可以files.saveConflictResolution针对每个工作空间或文件类型进行全局配置,以完全禁用此行为。选项为askUser(默认)或overwriteFileOnDisk

处理慢速保存操作

VS Code允许扩展程序在将文件保存到磁盘时更改文件的内容。例如“保存时格式化”“保存时修复”等功能。但是,保存是一项关键操作,在保存期间进行处理的扩展必须迅速完成,以便可以继续实际的保存操作。以前,VS Code强制执行“快速”,其中VS Code在超时后会取消扩展保存操作。该强制执行保证了快速的节省,但由于有时无法进行预期的处理,因此可能会令人沮丧。

在此版本中,我们放弃了基于超时的方法,而是显示进度通知,该通知使您可以取消参与保存的扩展(“保存参加者”)。该通知使您知道保存操作正在运行,并且可以决定是否要等待保存参与者完成。

Visual Studio Code 1.42 新版本重磅发布

主题:Light +

源代码控制输入

现在,“源代码管理”视图中的输入框将使用Monaco编辑器。摩纳哥编辑器支持有用的功能,例如多个光标和移动/复制行命令。

多根资源管理器中的两步折叠

当您使用多根工作区时,“文件资源管理器”中的“ 折叠文件夹”按钮现在具有两步行为。第一次单击将折叠每个顶层文件夹中的所有文件夹,第二次单击将折叠顶层文件夹。搜索视图已经具有此行为。

Visual Studio Code 1.42 新版本重磅发布

基于OS配色方案的自动切换主题

Windows和macOS现在支持浅色和深色方案。有一个新设置,window.autoDetectColorScheme它指示VS Code收听对操作系统配色方案的更改,并相应地切换到匹配的主题。

要自定义配色方案更改时使用的主题,可以使用以下设置来设置首选的浅色和深色主题:

  • workbench.preferredLightColorTheme
  • workbench.preferredDarkColorTheme

编辑

控制Peek视图焦点

有一个新的设置和命令来控制“窥视”视图最初将焦点置于何处。默认情况下,Peek将树聚焦在右侧,以便您可以快速导航到引用。对于希望使用Peek在编辑器中进行快速代码更改的人员而言,最初对树的关注不是最佳选择。现在,您editor.peekWidgetDefaultFocus可以使用设置来定义您的偏好,该设置可以设置为editortree。还有一个新命令togglePeekWidgetFocusCtrl + K F2),可让您在Peek编辑器和树之间移动焦点。

折叠区域突出显示

现在,通过添加背景突出显示,可以更容易地发现折叠的代码区域。

Visual Studio Code 1.42 新版本重磅发布

该功能由设置控制,editor.foldingHighlight并且可以使用颜色自定义颜色editor.foldBackground

  "workbench.colorCustomizations": {
    "editor.foldBackground": "#355000"
  }

折叠式精制

Shift + Click一次在折叠指示器上先折叠内部范围。Shift + Click再次(当所有内部范围都已折叠时)将折叠父级。Shift + Click再次展现了一切。

Visual Studio Code 1.42 新版本重磅发布

在已经折叠的范围上使用“ 折叠”命令(Ctrl + Shift + [)时,下一个展开的父范围将被折叠。

新包装选项

默认情况下,编辑器通过假定所有字符具有相同的宽度来计算自动换行符。这种假设使默认算法可以很快,但是当使用非等宽字体或在字符宽度不同的脚本中编写文本时,其结果很差。有一个新设置,editor.wrappingStrategy可以将其设置为advanced让编辑器将自动换行符计算分配给浏览器。

辅助功能

建议小部件改进

建议窗口小部件现在不再使用ARIA警报,并正确地向屏幕阅读器指示它已聚焦。这样可以防止屏幕阅读器意外挡住。

检测到屏幕阅读器时将editor.accessibilityPageSize设置为160

editor.accessibilityPageSize设置控制编辑器中可以由屏幕阅读器一次读取的行数。但是,使用较大的值会影响性能。当我们检测到屏幕阅读器时,我们决定将值自动设置为160行(由于NVDA错误,此值不会更多)。

Orca的Linux可访问性

我们已经开始研究通过Orca屏幕阅读器使VS Code在Linux上可访问。但是,由于这项工作需要Electron 7,因此我们期望在下一个稳定版本中取得更多进展。同时,对于Linux辅助功能,您可以使用我们的Insiders版本并提供反馈。

综合终端

滚动灵敏度

现在可以使用新设置独立于编辑器配置终端的滚动灵敏度:

  • terminal.integrated.mouseWheelScrollSensitivity -鼠标滚轮滚动倍增器(默认为1)。
  • terminal.integrated.fastScrollSensitivity– 按下Alt时快速滚动倍增(默认为5)。

调试

简化的初始调试视图

为了简化从“调试”视图开始的操作,VS Code现在仅显示一个“运行并调试”按钮。在没有调试运行动作(这是不是所有的调试器支持)仍然可以在调试主菜单。

如果用户设置了至少一个断点,则根据用户反馈,“断点”窗格将显示在开始视图中。

Visual Studio Code 1.42 新版本重磅发布

调试控制台改进

调试控制台输入

调试控制台输入现在使用当前活动编辑器的语言模式。这意味着Debug Console输入支持语法着色,缩进,自动关闭引号和其他语言功能。

Visual Studio Code 1.42 新版本重磅发布

输入/输出表示

我们已经在调试控制台中调整了输入和输出的表示方式,以使其更具区别性。VS Code仅在输入表达式旁边显示一个箭头。

Visual Studio Code 1.42 新版本重磅发布

调试控制台输入历史记录建议

现在,“调试控制台”输入框会自动建议以前输入的条目。文本图标用于将历史建议与其他IntelliSense条目区分开。

Visual Studio Code 1.42 新版本重磅发布

调试后隐藏调试控制台

有一个新设置debug.console.closeOnEnd可控制调试停止后调试控制台是否应自动关闭。

支持console.table(…)

调试控制台现在可以显示来自Node.js console.table(...)API的输出。

Visual Studio Code 1.42 新版本重磅发布

加载脚本视图的改进

已更新“加载的脚本”视图,以使用VS Code的新树形视图。现在,它以与VS Code的文件资源管理器相同的紧凑格式呈现单个子文件夹。另外,现在可以在键入时搜索和展开树:

Visual Studio Code 1.42 新版本重磅发布

我们计划在下一发行版中删除“ 调试:打开加载的脚本”命令,因为它复制了树的“搜索并在键入时扩展”功能。

启动配置排序和分组

发射配置和化合物现在支持新的结构化属性presentation。使用ordergrouphidden属性,可以排序,在调试配置下拉列表,并在调试快速组和隐藏的配置和化合物选择。

例如,中的启动配置launch.json可以具有以下presentation字段:

"presentation": {
    "group": "5_tests",
    "order": 10,
    "hidden": false
}

例如,我们已将演示文稿添加到某些VS Code自己的启动配置中,以便以更有意义的方式对它们进行分组,并隐藏那些仅属于复合启动配置一部分的配置。

Visual Studio Code 1.42 新版本重磅发布

调试活动栏图标和装饰

根据用户的反馈,我们更新了活动栏中的“调试”图标,以更好地表示“运行”和“调试”。在调试时,“调试”图标上会显示数字装饰,以显示活动调试会话的数量。

Visual Studio Code 1.42 新版本重磅发布

任务

用户级任务

tasks.json现在,用户设置级别支持在中声明的任务。如果您有一个跨多个项目使用的构建脚本,或者不希望将任务放在项目文件夹中,则可以在用户tasks.json文件中添加任务。运行“ 任务:打开用户任务”命令以创建用户级任务,并且这些任务将在所有文件夹和工作空间中可用。此处仅支持shellprocess任务类型。

输入pickString标签

如果使用task inputs,则可以在pickString输入中添加一个友好的标签options

"inputs": [
  {
      "id": "pickAnInputValue",
      "description": "Pick a Value",
      "type": "pickString",
      "options": [
          "first-value",
          {
              "label": "Second Value",
              "value": "second-long-value-that-can-be-simplified-for-display"
          }
      ],
      "default": "first-value"
  }
]

标签将显示为:

Visual Studio Code 1.42 新版本重磅发布

语言能力

TypeScript 3.7.5

我们已经将捆绑的TypeScript版本更新为3.7.5。此次更新包含一些重要的错误修复程序,包括修复IntelliSense以供未存储在Windows上C:驱动器上的项目。

HTML Mirror Cursor默认关闭

HTML Mirror Cursor现在是一个可选功能。在即将到来的迭代中,我们将继续改进其实现,以使此功能更易于理解,并可供更多语言使用。您仍然可以通过打开来使用此功能html.mirrorCursorOnMatchingTag

预览功能

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

时间线视图

在这个里程碑中,我们在新的“时间轴”视图上取得了进展,并提前分享了预览。这是一个统一的视图,用于可视化资源(文件,文件夹)的时间序列事件(例如,Git提交,文件保存,测试运行等)。要启用时间轴视图,您必须使用Insiders版本,然后添加以下设置:

"timeline.showView": true

在下面,您可以看到时间线视图,其中显示了文件的Git提交历史记录:

Visual Studio Code 1.42 新版本重磅发布

在此早期预览中,“时间轴”视图显示了活动文档的Git提交历史记录,当前仅限于32个项目。选择这些提交之一将打开该提交所引入的更改的差异视图。扩展也将能够贡献自己的时间轴源,这将在此统一的时间轴视图中显示。最终,您还可以选择(过滤)您想要在视图中看到的资源。

搜索编辑器

我们将继续开发新的搜索编辑器,以使搜索编辑器成为主要搜索体验为目标。为此,我们实现了一个用于配置搜索编辑器查询的UI:

Visual Studio Code 1.42 新版本重磅发布

现在有几个用于“搜索”编辑器的命令,您可以将其绑定到所选的键盘快捷键:

  • search.action.openNewEditor:在活动编辑器组中打开一个新的搜索编辑器。
  • search.action.openInEditor:将当前的搜索结果复制到新的搜索编辑器中。

注意:搜索编辑器默认在Insiders中启用,并且可以通过将设置search.enableSearchEditorPreview为来在稳定中选择启用true

TypeScript和JavaScript的语义突出显示

对TypeScript和JavaScript的语义突出显示支持正在开发中,默认情况下尚未启用。您可以通过添加以下设置来进行尝试:

"editor.semanticHighlighting.enabled": true

启用后,您会看到某些标识符具有新的颜色和样式,并且现在根据其解析的类型突出显示。默认语法(TextMate)突出显示器将许多标记分类,variables并且现在将这些标记解析为名称空间,类,参数等。

您可以在导入部分中看到最好的效果,现在每个导入的符号都用符号的类型进行了着色:

Visual Studio Code 1.42 新版本重磅发布

您可以使用“ 开发人员:检查编辑器标记和作用域”命令来检查为每个位置计算的语义和语法标记。

新的JavaScript调试器

我们一直在为Node.js和Chrome开发新的调试器。它是默认安装在Insiders上的,并且可以从 VS Code Stable中的Marketplace安装。通过启用该debug.javascript.usePreview设置,可以将其与现有启动配置一起使用。以下是我们本月添加的一些新功能。

新的JS调试器将自动调试您在新的JavaScript调试终端中运行的命令,您可以通过“ 调试:创建JavaScript调试终端”命令打开该命令:

Visual Studio Code 1.42 新版本重磅发布

新的调试器还在package.json的部分中提供了一个Debug CodeLens,scripts它无需额外配置即可运行和调试脚本:

Visual Studio Code 1.42 新版本重磅发布

您可以通过该debug.javascript.codelens.npmScripts设置配置CodeLens的可见性和位置(顶部或嵌入式)。

试试看!如果您遇到新调试器的任何问题,则可以在vscode-js-debug存储库中提交问题。

将视图从侧边栏移动到面板

为了使自定义VS Code的布局更加容易,我们正在积极地进行工作。您可以使用以下设置测试进度:

"workbench.view.experimental.allowMovingToNewContainer": true

启用该设置后,某些视图具有一个新的上下文菜单项,可在侧边栏和面板之间移动它们。当前,此设置仅影响资源管理器中的“大纲”视图和扩展贡献的视图。您也无法像在侧边栏中那样在面板中组合这些视图。

Visual Studio Code 1.42 新版本重磅发布

这只是这些功能的预览,它的许多方面都可能发生变化,包括上述限制。随时查看我们的Insiders版本中的进一步进展。

关于搜索的注意事项:使用新的通用移动视图方法,不建议使用旧的搜索视图设置search.location和命令搜索:切换搜索视图位置search.action.toggleSearchViewPosition)。您的设置应该会自动迁移,但是您将需要使用新的通用方法来移动“搜索”视图。您无需启用上面的实验性预览设置即可将搜索视图与新的上下文菜单项一起移动。

TypeScript 3.8 Beta支持

尽管VS Code在下个月正式发布之前不会捆绑TypeScript 3.8,但这次迭代我们添加了对所有令人兴奋的TypeScript 3.8-beta新功能的支持。

这些包括:

  • IntelliSense和JavaScript和TypeScript文件中专用字段的语法突出显示。
  • 对JavaScript和TypeScript的呼叫层次结构支持。
  • 转换为模板字符串重构!

您可以通过安装TypeScript Nightly扩展程序,轻松地立即尝试所有这些TypeScript 3.8新功能。请分享反馈,如果您使用TypeScript 3.8 beta遇到任何错误,请告诉我们!

扩展贡献

Java调试器支持数据断点

在对Java调试扩展现在支持数据断点,在VS代码1.38介绍。此功能使您可以创建断点,该断点将在变量值更改时命中。

在下面,您可以看到Owner.telephone字符串更改时调试器中断:

Visual Studio Code 1.42 新版本重磅发布

Java调用层次结构视图

该语言支持Java的扩展现在支持调用层次结构视图,显示从或函数的所有来电,让你深入到呼叫者的呼叫者和电话呼叫。

右键单击一个符号,然后选择“ Peek” >“ Peek Call Hierarchy”以查看呼叫层次结构:

Visual Studio Code 1.42 新版本重磅发布

远程开发

远程开发扩展继续进行工作,这些扩展使您可以将容器,远程计算机或Windows Linux子系统(WSL)用作功能全面的开发环境。

1.42中的功能重点包括:

  • 远程-SSH:改进了对Windows服务器的支持,包括自动OS检测。
  • 远程-WSL:支持在资源管理器中显示以打开Windows资源管理器以获取WSL资源。
  • 远程-容器:预先构建的容器映像,其中包括Git和zsh等依赖项。
  • 转发的端口视图:映射,查看和重用SSH和容器端口。

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

扩展创作

重复使用的Codicons

对于大多数VS Code图标,将使用codicon图标字体。扩展现在可以通过简单的声明方式重用这些图标:

  • vscode.ThemeIcon现在可以使用编码的名称实例化该类型。例如,new vscode.ThemeIcon("zap")
  • vscode.MarkdownString类型现在支持$(<name>)内联语法。例如,myMdString.appendMarkdown('Hello $(globe)');。请注意,要在中使用codicons MarkdownString,必须启用supportThemeIcons构造函数参数。
  • commandspackage.json现在,扩展名文件中定义的图标可以使用codicon作为图标。使用内联语法,例如"icon": "$(zap)"

Visual Studio Code 1.42 新版本重磅发布

主题:Light +

上面的悬停示例正在渲染每个可用的编码。鼠标悬停是使用下面的代码段创建的,但是为了便于阅读,大部分的codicon名称均已从all常量中删除。

vscode.languages.registerHoverProvider(
  '*',
  new class implements vscode.HoverProvider {
    provideHover(doc: vscode.TextDocument, pos: vscode.Position) {
      const all = `$(activate-breakpoints)$(add)...$(zoom-out)`;
      const md = new vscode.MarkdownString(all, true);
      return new vscode.Hover(md, doc.getWordRangeAtPosition(pos));
    }
  }()
);

插入并替换完成项

单词结尾处触发的补全通常会替换该单词。但是,当在单词内部触发补全时,不清楚是否应替换单词结尾。根据扩展作者的偏好,用户会获得一种行为或另一种行为。这并不理想,现在有一个API可以表示完成项的插入和替换范围。

为此,我们向添加了新的OR类型CompletionItem#range

export class CompletionItem {
  range?: Range | { inserting: Range; replacing: Range };

  //...
}
  1. 如果范围是undefined,则VS Code使用当前单词范围进行替换,并使用在光标位置裁剪的相同范围进行插入
  2. 如果范围很简单vscode.Range,则VS Code知道只有一个位置可以插入或替换。
  3. 如果范围是具有insertingreplacing范围的对象,则VS Code将直接使用它们。

此信息与editor.suggest.insertMode允许用户定义其首选项的设置结合使用。我们要求扩展作者尽快采用此API,因为我们计划在下一个版本中使插入和替换行为更加明显。

精致的CallHierarchyProvider

我们对CallHierarchyProvider#prepareCallHierarchy进行了少量更改,现在它可以返回一个或多个CallHierarchyItem元素。many当请求具有多个重载的元素上的调用层次结构时,此选项很有用。

终端上显示的创建选项

Terminal对象具有一个新creationOptions属性,扩展程序可以使用该属性来标识如何创建终端。

特定语言的设置

扩展现在可以使用新的配置范围提供可以被语言覆盖的设置language-overridable

例:

"contributes": {
    "configuration": {
        "title": "sample",
        "properties": {
            "sample.languageSetting": {
                "type": "boolean",
                "scope": "language-overridable"
            }
        }
    }
}

增强了Configuration API以支持这些设置。您可以通过传递必要的,使用API​​读取和更新这些设置languageId

例:

/**
 * Read language configuration.
 */
const textDocumentConfiguration = vscode.workspace.getConfiguration('sample', {resource, languageId});
textDocumentConfiguration.get('languageSetting');

/**
 * Override configuration under language
 */
textDocumentConfiguration.update('languageSetting', false, ConfigurationTarget.Global, true);

/**
 * Listen language configuration changes
 */
workspace.onDidChangeConfiguration(e => {
    if(e.affectsConfiguration('sample.languageSetting',  {resource, languageId}) {
    }
});

 

扩展视图上下文菜单

现在,您可以使用新菜单位置在扩展视图中向扩展的上下文菜单贡献命令extension/context

例:

"contributes": {
    "commands": [
        {
            "command": "extension.helloWorld",
            "title": "Hello World"
        }
    ],
    "menus": {
        "extension/context": [
            {
                "command": "extension.helloWorld",
                "group": "2_configure",
                "when": "extensionStatus==installed",
            }
        ]
    }
}

Visual Studio Code 1.42 新版本重磅发布

运行命令时,扩展的ID作为参数传递。

例:

vscode.commands.registerCommand('extension.helloWorld', extensionId => {
  vscode.window.showInformationMessage(extensionId);
});

支持以下预定义的上下文,您可以在when命令的条件中使用它们:

  • extensionStatus==installed
  • isBuiltinExtension

DebugConfigurationProvider挂钩,用于访问替换变量

扩展API为调试提供一个挂钩resolveDebugConfigurationDebugConfigurationProvider,可以用它传递给调试适配器之前验证调试配置。由于此挂钩是在替换变量之前调用的,因此验证代码可以轻松地将更多变量添加到调试配置中,并且仍能及时替换它们。

这种方法可以使其难以用解决变量值resolveDebugConfiguration钩,例如,以验证或实现的功能,仅在扩展的情况下(而不是在调试适配器,其中所述取代的值可用的)。

从最终用户的角度来看,这很令人困惑。在调试配置中,可以使用某些属性变量(因为在发生替换后在调试适配器中对其进行处理),而不能使用某些属性变量(因为在尚未发生替换的扩展中对其进行了处理)。

在这个里程碑中,我们通过向添加第二个钩子resolveDebugConfigurationWithSubstitutedVariables来解决此问题,该钩子DebugConfigurationProvider接收使用所有变量替换的调试配置。

有了这个新API的可用性,我们要求所有调试扩展作者DebugConfigurationProvider.resolveDebugConfiguration仔细检查他们当前的实现,并将所有未引入新变量但将从在替代变量上运行而受益的代码移到新方法中resolveDebugConfigurationWithSubstitutedVariables

在扩展内实现调试适配器

现有的调试扩展API支持通过DebugAdapterDescriptorFactory多种方式注册用于运行调试适配器的。

作为外部过程:

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterExecutable('mockDebug.exe');
  }
});

作为网络会话:

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterServer(12345, 'localhost');
  }
});

在这个里程碑中,我们添加了第三个变体,其中可以提供调试适配器的“内联”实现:

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterInlineImplementation(new InlineDebugAdapter());
  }
});

这消除了通过基于流的机制与适配器进行通信的需求,并简化了开发,因为适配器在扩展内部运行,并且可以轻松地作为VS Code扩展调试的一部分进行调试。

内联实现(例如,InlineDebugAdapter上面的实现)需要实现Debug Adapter Protocol。由于我们不想在VS Code的扩展API中包含完整的调试适配器协议,因此我们引入了该协议的简约子集。该接口vscode.DebugAdapter只有两种方法,一种用于将DAP消息传递到适配器(handleMessage),另一种用于侦听从适配器(onDidSendMessage)接收到的DAP消息。

基于此接口,调试适配器的实现将从以下源代码开始:

class InlineDebugAdapter implements vscode.DebugAdapter {
  private sendMessage = new vscode.EventEmitter<DebugProtocol.ProtocolMessage>();
  private sequence: 1;

  readonly onDidSendMessage: vscode.Event<DebugProtocol.ProtocolMessage> = this.sendMessage
    .event;

  handleMessage(message: DebugProtocol.ProtocolMessage): void {
    switch (message.type) {
      case 'request':
        const request = <DebugProtocol.Request>message;
        switch (request.command) {
          case 'initialize':
            const response: DebugProtocol.Response = {
              type: 'response',
              seq: this.sequence++,
              success: true,
              request_seq: request.seq,
              command: request.command
            };
            this.sendMessage.fire(response);
            break;
          // many more requests needs to be handled here...
          default:
            break;
        }
        break;
      case 'response':
        break;
      case 'event':
        break;
    }
  }

  dispose() {
    // clean up resources
  }
}

由于调试适配器协议(作为节点模块vscode-debugprotocol提供)是该vscode.DebugAdapter接口的兼容超集,因此,如果您需要完整的协议并希望自己实现调试适配器,则可以导入该模块。

一个简单得多的替代方法是(继续)使用我们的调试适配器的默认实现,该适配器可作为节点模块vscode-debugadapter使用。从1.38.0-pre.4版本开始,此模块中引入的DebugSession(或LoggingDebugSession)与vscode.DebugAdapter扩展API中定义的接口兼容。

使用此API,可以像下面这样轻松地使用现有的调试适配器实现:

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterInlineImplementation(new MockDebugSession());
  }
});

 

注意:在此版本中,我们已经完成了用于创建调试适配器的扩展API。因此,我们宣布将在3月的发行版中删除对debuggers贡献点两个不推荐使用的属性的支持

  • adapterExecutableCommand-使用扩展API vscode.DebugAdapterDescriptorFactory和a vscode.DebugAdapterExecutable。模拟调试示例显示了如何使用API。
  • enableBreakpointsFor-使用breakpoints贡献点代替。转换需要在中完成package.json

如果当前(不建议使用)JSON如下所示:

"contributes": {
  "debuggers": [{
    "type": "csharp",
    // ...
    "enableBreakpointsFor": [ "csharp", "razor" ]
    // ...
  }]

转换为:

"contributes": {
  "breakpoints": [
    { "language": "csharp" },
    { "language": "razor" }
  ],
  "debuggers": [{
    "type": "csharp",
    // ...
  }]

我们建议受影响的扩展在2月的时间范围内将其实现调整为适应新的API,以便在3月之前有足够的时间来解决问题。

建议的扩展API

每个里程碑都附带新提出的API,扩展作者可以尝试一下。一如既往,我们热切希望收到您的反馈。您必须尝试以下提议的API:

  • 您必须使用Insiders,因为建议的API经常更改。
  • package.json的扩展名文件中必须包含此行"enableProposedApi": true
  • vscode.proposed.d.ts文件的最新版本复制到项目的源位置。

请注意,您无法发布使用建议的API的扩展。下一个版本中可能会有重大更改,我们永远也不想破坏现有的扩展。

添加工作区编辑元数据

VS Code现在提供了“重构预览”支持,其中包含一个新的可选API提议。它允许您对工作区编辑的更改进行分类。例如,您可以定义更改是否需要用户确认或添加描述,例如“字符串和注释中的重命名”。

语义突出显示

如果您有兴趣在语言中添加语义突出显示,则“ 语义突出显示概述 ”将对概念和新的API进行汇总。

验证提供者

某些扩展要求对其他服务进行身份验证。

时间轴提供商

Extension很快将能够将自己的资源贡献到新的Timeline视图中。

文档。重构贡献点

提议的documentation.refactoring贡献点使扩展可以提供有关重构的文档。用户可以在请求重构时选择查看此文档:

Visual Studio Code 1.42 新版本重磅发布

提议的贡献点使扩展可以通过使用以下命令来控制其文档的显示方式:

"contributes": {
  "documentation": {
    "refactoring": [
      {
        "title": "Learn more about JS/TS refactorings",
        "when": "typescript.isManagedFile",
        "command": "_typescript.learnMoreAboutRefactorings"
      }
    ]
  }
}
  • title —向用户显示的文档操作的标签。
  • when—  何时显示文档的when子句。
  • command—显示文档的命令。例如,此命令可以打开网页或直接在VS Code中显示文档。

自定义编辑器的备份和热出口挂钩

在此迭代中,我们继续对建议的自定义编辑器API进行迭代。本月我们的主要调查是如何为自定义编辑器启用热退出。

此调查的结果是界面backup上的一种新的可选方法WebviewCustomEditorEditingDelegate。更改资源后,由VS Code调用此方法大约一秒钟。在backup方法内部,扩展应将资源保持在其当前状态。通常,这意味着将资源写入工作区存储文件夹。然后,当重新加载编辑器时,在从工作空间本身加载资源之前,应检查是否存在任何持久备份。

我们将在下一个迭代中继续迭代自定义编辑器API。

复杂的完成标签

我们正在改进CompletionItemAPI,以适应需要提供合格名称,导入路径,返回类型和其他信息的复杂完成项目。该信息必须预先提供,以后再解决。提供的信息将内嵌在建议小部件中。

Visual Studio Code 1.42 新版本重磅发布

诊断错误现在可以具有与其错误代码关联的链接。提供链接后,它将显示在“问题”面板,嵌入式错误视图和诊断错误悬停中。随着我们在下一个迭代中继续使用此功能

Visual Studio Code 1.42 新版本重磅发布

语言服务器协议

语言服务器协议的3.15版本现在可用。我们还为VS Code LSP客户端和用Node.js编写的LSP服务器发布了相应的npm模块。库的最新版本包含语义令牌的建议规范和实现。

LSP网站现在托管语言服务器索引格式规范的初步版本以及相应的LSIF概述。

浏览器支持

将文件拖放到编辑器中

在浏览器中使用VS Code时,现在可以将本地文件放到编辑器区域中,以包含文件内容的脏文件(未保存)打开它们。

Visual Studio Code 1.42 新版本重磅发布

新命令

命令 命令ID
未分配 向左移动面板 workbench.action.positionPanelLeft
未分配 向右移动面板 workbench.action.positionPanelRight
未分配 将面板移到底部 workbench.action.positionPanelBottom
未分配 打开下一步最近使用的编辑器 workbench.action.openNextRecentlyUsedEditor
未分配 打开以前使用的编辑器 workbench.action.openPreviousRecentlyUsedEditor
未分配 在组中打开下一个最近使用的编辑器 workbench.action.openNextRecentlyUsedEditorInGroup
未分配 在组中打开以前使用的编辑器 workbench.action.openPreviousRecentlyUsedEditorInGroup
未分配 最近使用过的编辑器的打开选择器 workbench.action.showAllEditorsByMostRecentlyUsed
未分配 通过选择器打开以前使用的编辑器 workbench.action.quickOpenPreviousRecentlyUsedEditor
Ctrl + Tab 通过选择器在组中打开以前使用的编辑器 workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup
未分配 通过选择器打开最少使用的编辑器 workbench.action.quickOpenLeastRecentlyUsedEditor
Ctrl + Shift + Tab 通过选择器在组中打开最少使用的编辑器 workbench.action.quickOpenLeastRecentlyUsedEditorInGroup
未分配 开发人员:重新启动扩展程序主机 workbench.action.restartExtensionHost

工程

TSLint到ESLint的迁移

VS Code主要用TypeScript编写。除了编译器之外,我们还使用linting强制执行某些样式和工程规则。过去,我们使用TSLint来完成该任务,但是大约一年前,TSLint的维护者宣布弃用它,转而支持ESLint。

我们已将此里程碑迁移到ESLint-其中包括我们的lint配置和我们的自定义规则。最后但并非最不重要的一点,我们还更新了yo code扩展生成器,以便ESLint也可以检查新的TypeScript扩展。

如果您在自己的项目中使用TSLint,我们将创建一个“ 将TSLint迁移到ESLint”指南,以帮助您切换到ESLint。

使用TypeScript 3.8-beta构建VS代码

VS Code现在使用TypeScript 3.8 beta版本构建。

支持在Shadow DOM中托管Monaco编辑器

我们已解决了有关鼠标处理和动态CSS的各种问题,因此,摩纳哥编辑器现在可以托管在Shadow DOM API 阴影根目录下。

新文件

货柜

有新文章介绍了如何使用Microsoft Docker扩展来创建容器。您将找到有关容器化Node.js和.NET Core应用程序,推送到容器注册表以及将容器部署到云的教程。

Visual Studio Code 1.42 新版本重磅发布

重要修复

  • 定期保存UI状态以防止关闭时丢失
  • 在不区分大小写的平台上连接到区分大小写的文件系统时,资源管理器树未显示正确的内容
  • 仅在活动会话中显示调试程序位置
  • 将对话框详细信息移动到自定义对话框中的描述行
  • 无法通过热键同时删除多个Watch调试变量
  • 创建许多Watch下拉表达式的速度很慢
  • 让只读编辑器显示问题
  • 56.9文本文件:对于只读模型,不要报告为脏

抱歉,隐藏内容 回复 后刷新可见

未经允许不得转载:作者:admin, 转载或复制请以 超链接形式 并注明出处 Hong's
原文地址:《Visual Studio Code 1.42 新版本重磅发布》 发布于2020-02-16

分享到:
赞(0) 打赏 生成海报

评论 抢沙发

8 + 4 =


长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册