2024 年 9 月(版本 1.94)
更新 1.94.1:此更新解决了此安全问题。
更新 1.94.2:此更新解决了这些问题。
下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2024 年 9 月版。此版本包含许多更新,我们希望您会喜欢。以下是一些主要亮点:
- 在资源管理器中查找 - 使用改进的查找控件在资源管理器视图中快速查找文件。
- 源代码管理图 - 源代码管理图中更多的筛选选项和交互性。
- Python 测试覆盖率 - 运行带有覆盖率的 Python 测试,并在编辑器中获得丰富的测试结果。
- ESM - 由于迁移到 ESM,VS Code 启动速度更快。
- 帐户首选项 - 指定扩展要使用的帐户。
- 本机 REPL 中的 Copilot - 在本机 REPL 中获取代码补全和内联聊天。
- 改进的聊天上下文 - 拖放文件或使用 IntelliSense 以获得更相关的聊天上下文。
- 测试环境设置 - 获取有关为您的工作区设置测试框架的帮助。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。Insiders: 想尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即试用。
GitHub Copilot
在聊天中切换语言模型
之前,我们宣布您可以注册提前访问 OpenAI o1 模型。获得访问权限后,您将在 VS Code 的 Copilot 聊天中拥有一个 Copilot 聊天模型选择器控件,以选择用于聊天对话的模型版本。
内联聊天中的 GPT-4o
我们已将 Copilot 内联聊天升级到 GPT-4o,以便在您在编辑器中使用聊天时,为您提供更快、更准确和更高质量的代码和解释。
聊天中的公共代码匹配
您可以允许 GitHub Copilot 返回可能与 GitHub.com 上公开可用的代码匹配的代码。当为您的组织订阅或个人订阅启用此功能后,Copilot 代码补全已为您提供有关检测到的匹配项的详细信息。我们现在也在 Copilot 聊天中为您显示这些公共代码的匹配项。
如果为您的组织或订阅启用了此功能,您可能会在响应末尾看到一条消息,其中包含 查看匹配项 链接。如果您选择该链接,则会打开一个编辑器,其中显示匹配的代码引用的详细信息。
在 GitHub 博客上获取有关 GitHub Copilot 中的代码引用的更多信息。
聊天中的文件建议
在聊天输入字段中,您现在可以键入 #<文件名>
以获取文件名建议,并将它们快速附加到您的提示中作为上下文。这适用于支持文件附件的聊天位置,例如聊天视图、快速聊天、内联聊天和 Notebook 聊天。
改进了聊天响应中的文件链接
我们改进了 Copilot 响应中提及的任何工作区文件路径的呈现方式。当您提出 @workspace
问题时,这些路径非常常见。
您首先会注意到的是,工作区文件的路径现在包含文件图标。这使您可以轻松地区分聊天响应中的文件路径。文件图标基于您当前的文件图标主题。
这些路径是交互式链接,因此只需选择它们即可打开相应的文件。您甚至可以使用拖放操作在新编辑器组中打开文件,或者通过在拖放之前按住 Shift 键将其插入到文本编辑器中。
默认情况下,这些链接仅显示文件名,但您可以将鼠标悬停在它们上面以查看完整的文件路径。
您还可以右键单击其中一个路径以打开上下文菜单,其中包含其他命令,例如复制资源的相对路径,或在操作系统的文件资源管理器中显示文件。
我们计划在未来的迭代中进一步改进工作区路径呈现,并对响应中的符号名称进行类似的改进。
拖放文件以添加聊天上下文
您现在可以轻松地将其他文件作为聊天提示的上下文附加,方法是将工作台中的文件或编辑器选项卡直接拖到聊天中。对于内联聊天,按住 Shift 键并拖放文件以将其添加为上下文,而不是在编辑器中打开它。
历史记录中包含文件附件
有多种方法可以将文件或编辑器选择作为相关上下文附加到您的聊天请求中。以前,此上下文仅为当前请求添加,并且未包含在后续请求的历史记录中。现在,这些附件保留在历史记录中,因此您可以继续引用它们,而无需重新附加它们。
Python 本机 REPL 中的内联聊天和补全
Python 扩展使用的本机 REPL 编辑器现在直接在输入框中支持 Copilot 内联聊天和代码补全。
在 Notebook 中接受并运行生成的代码
当您在 Notebook 中使用 Copilot 内联聊天生成代码时,您现在可以接受并直接从内联聊天运行生成的代码。
在 Notebook 聊天中附加变量
当您在 Notebook 中使用 Copilot 时,您现在可以在请求中附加来自 Jupyter 内核的变量。添加变量使您可以更精确地控制聊天请求的上下文,以便从 Copilot 获得更相关的响应。
键入 #
,后跟变量名称,或使用 📎 控件 (⌘/ (Windows, Linux Ctrl+/)) 在内联聊天中添加上下文变量。
刷新聊天用户体验
我们刷新了聊天视图,使其具有全新的欢迎体验,并更新了聊天输入区域的布局。您现在可以使用 @
按钮轻松找到可用的聊天参与者和斜杠命令的列表,包括内置的以及您已安装的扩展中的聊天参与者。您仍然可以通过在聊天输入框中键入 /
或 @
来找到参与者和斜杠命令。
语义搜索结果(预览)
设置:github.copilot.chat.search.semanticTextResults
“搜索”视图使您可以跨文件执行精确搜索。我们现在已向“搜索”视图添加功能,该功能使用 Copilot 提供语义相关的搜索结果。
此功能仍处于预览状态,默认情况下,该设置未启用。试用一下,让我们知道您的想法!
修复测试失败(预览)
设置:github.copilot.chat.fixTestFailure.enabled
我们添加了专门的逻辑来帮助您诊断失败的单元测试。此逻辑在某些情况下由 /fix
斜杠命令触发,您也可以使用 /fixTestFailure
斜杠命令直接调用它。默认情况下,该命令在聊天中启用,但可以通过设置 github.copilot.chat.fixTestFailure.enabled 禁用。
自动化测试设置(实验性)
设置:github.copilot.chat.experimental.setupTests.enabled
我们添加了一个实验性的 /setupTests
斜杠命令,可以帮助您配置工作区的测试设置。此命令可以推荐测试框架,提供设置和配置步骤,并建议 VS Code 扩展以提供VS Code 中的测试集成。这可以节省您开始为代码进行测试的时间和精力。
当您使用 /tests
命令为代码生成测试时,如果看起来您的工作区尚未设置此类集成,它可以推荐 /setupTests
和测试扩展。
从聊天开始调试(实验性)
设置:github.copilot.chat.experimental.startDebugging.enabled
在此里程碑中,我们对实验性的 /startDebugging
斜杠命令进行了改进。此命令使您可以轻松找到或创建启动配置,并无缝启动应用程序的调试。当您在 Copilot 聊天中使用 @vscode
时,默认情况下 /startDebugging
现在可用。
命令中心的聊天(实验性)
我们正在试验用于访问聊天的命令中心条目。它提供对所有相关聊天命令的快速访问,例如启动不同的聊天体验或将上下文附加到您的提示。请注意,命令中心本身需要启用,聊天命令中心条目才能显示。
改进的时间上下文(实验性)
设置:github.copilot.chat.experimental.temporalContext.enabled
通过时间上下文,您可以指示内联聊天将最近打开或编辑的文件视为聊天上下文的一部分。我们改进了此功能,并邀请大家试用。
自定义说明(实验性)
设置:github.copilot.chat.experimental.codeGeneration.useInstructionFiles
设置:github.copilot.chat.experimental.testGeneration.instructions
在上一个里程碑中,我们引入了自定义代码生成说明。我们进一步扩展了此功能,以在工作区的 .github/copilot-instructions.md
文件中定义共享说明以进行代码生成。这些通用说明补充了您自己的个人代码生成说明。使用 github.copilot.chat.experimental.codeGeneration.useInstructionFiles 设置启用代码生成说明文件。
此外,您现在可以在设置中定义测试生成的说明,或从文件中导入它们。例如,如果您始终希望为测试使用特定的单元测试框架。在 github.copilot.chat.experimental.testGeneration.instructions 设置中配置测试生成说明。
辅助功能
入门指南
我们的 帮助 菜单现在包含 辅助功能入门 演练,使您可以更轻松地探索和利用辅助功能选项。该演练向您介绍了诸如辅助功能帮助对话框、辅助功能信号、键盘快捷键等功能。
注释辅助功能改进
我们为注释线程控件引入了辅助功能视图。此视图包括相关的编辑器上下文,使您可以保持专注,而无需在编辑器和辅助功能视图之间切换。同样,编辑器上下文现在在注释面板的辅助功能视图中提供。
我们还引入了 注释:聚焦于当前行的注释 命令,使您可以使用键盘从编辑器快速移动到注释控件。还有新的操作可以转到编辑器中下一个和上一个注释范围:注释:转到下一个注释范围 和 注释:转到上一个注释范围。
工作台
更改扩展的帐户首选项
在此迭代中,我们探索了如何改进更改扩展的首选帐户的体验。例如,如果您有多个 GitHub 帐户,并且不小心使用错误的帐户登录了 GitHub Copilot,现在需要使用另一个帐户。
现在可以在事后通过多种方式更改该首选项。
-
活动栏中的帐户菜单 > <您的帐户> > 管理受信任的扩展 > 选择扩展的齿轮图标
-
扩展 视图 > 使用身份验证的扩展的上下文菜单(或齿轮图标) > 选择 帐户首选项
-
扩展详细信息视图 > 齿轮图标 > 选择 帐户首选项
选择这些选项中的任何一个都会将您带到一个快速选择,您可以在其中更改扩展使用的帐户。
当您更改扩展的帐户首选项时,这将向扩展发送一个事件,并且由扩展来正确处理它。如果您没有看到预期的行为,请报告该扩展的问题,以便可以处理帐户首选项体验。
此外,如果您对此流程有任何反馈,请告诉我们。
查看与配置文件关联的文件夹和工作区
在此里程碑中,我们在“配置文件”编辑器中引入了 文件夹和工作区 部分。此部分列出了与特定配置文件关联的所有文件夹和工作区,从中心位置列出。在此部分中,您可以添加或修改文件夹,或在新窗口中打开文件夹或工作区。
跨所有配置文件更新扩展
在此里程碑中,我们引入了跨所有配置文件更新扩展的功能。如果您有多个配置文件,并且想要保持扩展版本同步,这将非常有用。以前,您必须切换到每个配置文件并更新该配置文件的扩展。
“扩展”视图中的警告
当存在任何无效扩展或由于版本不兼容而被禁用的扩展时,“扩展”视图现在会显示警告徽章和关联信息。
在资源管理器中查找
我们改进了资源管理器视图中的“查找”功能,以使在大型项目中搜索文件更加容易。您可以使用 ⌥⌘F (Windows, Linux Ctrl+Alt+F) 键盘快捷键在文件资源管理器中打开“查找”控件。搜索时,您可以在模糊匹配和连续匹配之间切换,以获得更灵活的结果。
请注意,在搜索期间,某些上下文菜单操作暂时禁用。请继续关注即将推出的更多改进!
发行说明
我们在发行说明中使用了简化的语法来引用设置 (setting.name),当在发行说明编辑器中显示时,它也具有现在熟悉的设置齿轮渲染。
编辑器
内嵌提示改进
我们添加了 editor.inlayHints.maximumLength 设置,该设置控制内嵌提示在多少个字符后被截断。
我们还修改了内嵌提示的更新策略,现在,在键入时,它们应该更快地更新,但不会导致光标的任何水平移动。
实验性编辑上下文
在此里程碑中,我们引入了一个新的实验性设置 editor.experimentalEditContextEnabled。此设置启用 EditContext API,以增强 VS Code 中的编辑体验。EditContext API 的采用使我们能够修复某些 IME 组合错误。总的来说,我们相信从长远来看,它将改善编辑体验,最终它将默认启用。
启用此设置后,请确保重新加载 VS Code 窗口以利用它。
源代码管理
源代码管理图视图改进
在上一个里程碑中,我们添加了新的 源代码管理图 视图。在此里程碑中,我们一直在努力扩展新添加的视图中可用的功能,并改进视图的布局。
存储库选择器
当您打开包含多个存储库的文件夹/工作区时,“源代码管理图”视图标题会显示一个存储库选择器。默认情况下,“源代码管理图”视图显示活动存储库,与状态栏中的信息匹配。您可以使用存储库选择器将“源代码管理图”视图锁定到特定存储库。
历史记录项引用选择器
在此里程碑中,我们向“源代码管理图”视图标题添加了一个新的历史记录项引用选择器。您可以使用此引用选择器将图中显示的历史记录项筛选到不同的分支,或查看多个分支。
默认情况下,历史记录项引用选择器设置为 自动
,这将呈现当前历史记录项引用、其远程和一个可选基的图形。
历史记录项操作
在此里程碑中,我们扩展了源代码管理历史记录项的上下文菜单中可用的操作列表。我们添加了从历史记录项创建新分支/标记、cherry-pick 历史记录项和签出(分离)项的操作。
源代码管理图设置
在此里程碑中,我们添加了一组新设置,以便您可以自定义图形
- scm.graph.badges - 控制在“源代码管理图”视图中显示哪些徽章
- scm.graph.pageOnScroll - 控制当您滚动到列表末尾时,“源代码管理图”视图是否加载下一页项目
- scm.graph.pageSize - 在“源代码管理图”视图中以及加载更多项目时显示的默认项目数
Notebooks
跨单元格的多光标支持(预览)
Notebook 编辑器现在支持使用设置 notebook.multiCursor.enabled 在单元格之间进行多光标编辑。目前,这只能通过快捷键 Ctrl+D 触发,并且支持核心编辑器操作以及编辑器命令的有限子集。
Diff 编辑器显示文档元数据更改
Notebook Diff 编辑器现在还显示对文档元数据所做的更改,例如内核信息和单元格语言。
折叠 Diff 视图中未更改的区域
Notebook Diff 视图现在遵循设置 diffEditor.hideUnchangedRegions.enabled。启用后,未更改的代码块默认情况下会折叠,这使得审查大型 Notebook 中的更改更加容易。
Web Worker 中的 Notebook 序列化(实验性)
此版本引入了一个实验性功能,该功能可以在 Web Worker 中启用 Notebook 序列化。当您处理大型 Notebook 时,这可以帮助减少扩展主机进程中的主线程阻塞时间。默认情况下,此功能已禁用,但可以通过将 ipynb.experimental.serialization 设置为 true
来启用。
调试
支持数据着色
VS Code 支持来自调试适配器协议的新文本样式功能。这使变量视图、监视视图、悬停提示和调试控制台中的数据可以通过 ANSI 转义序列进行着色。
JavaScript 调试器
改进了 HTML 元素的显示
我们改进了 HTML 元素在 JavaScript 调试器中的显示方式。以前,它们被渲染为朴素的对象,难以导航。现在,它们更接近 DOM 结构,并且我们利用新的着色功能提供一些基本的语法突出显示。
启动配置中 Node 命令的自动完成
在 launch.json
文件中,有一个新的自动完成助手可用于安装在 node_modules
中的命令行应用程序。这使得更容易为 vitest
或 nest
等工具设置调试。
更简洁的“已加载的源”视图
我们更改了 Node.js 内置模块、评估脚本和 WebAssembly 模块的源路径结构,以使 已加载的源 视图不那么嘈杂且更易于浏览。
语言
TypeScript 5.6
我们的 JavaScript 和 TypeScript 支持现在使用 TypeScript 5.6。此重大更新包括许多语言和工具改进,以及重要的错误修复和性能优化。
您可以在 TypeScript 博客上阅读有关 TypeScript 5.6 版本的所有信息。我们还在以下部分中包含了一些工具亮点。
检测一些常见的“始终为真”的编程错误
假设您在 JavaScript 或 TypeScript 中使用正则表达式,并编写如下代码
const str = '...'
if (/\d+(\.\d+)?/) {
...
} else {
...
}
哎呀!看起来我们忘记在正则表达式上调用 .test()
,这意味着 if
条件始终评估为真。这不是我们想要的。
即使当指出这个问题时它很明显,但像这样的错误也很容易犯,甚至在 VS Code 中也引起了真正的错误!值得庆幸的是,TypeScript 现在报告程序中一些最常见的“始终为真”错误。这包括针对从不为值的值测试 if
条件,或条件表达式,其中一侧无法访问,例如 /abc/ ?? /xyz/
。
查看 TypeScript 发行说明,了解有关此功能如何工作的更多示例和详细信息。
区域优先诊断
在非常长的 JavaScript 或 TypeScript 文件中工作?由于区域优先诊断,您应该开始看到类型错误的诊断显示得更快一些。这意味着我们尝试获取当前可见代码的诊断并首先显示这些诊断,即使文件的其余部分的诊断仍在计算中。
此优化与数千行和数千行的复杂文件最相关。您可能不会注意到较小文件的任何更改。
改进了 JavaScript 和 TypeScript 的提交字符
提交字符可以通过在键入时自动接受补全来加快编码速度。例如,在 JavaScript 和 TypeScript 中,.
通常被认为是提交字符。这意味着要键入 myVariable.property.
,您只需键入 myv
、.
、p
、.
,其中第一个 .
接受 myVariable
的补全,第二个 .
接受 property
的补全。
这些提交字符现在由 TypeScript 计算,这意味着它们可以更好地考虑程序的结构。我们也可以随着时间的推移继续改进对它们的支持。
默认情况下启用提交字符,但可以通过将 editor.acceptSuggestionOnCommitCharacter 设置为 false
来禁用。
自动导入的排除模式
新的 autoImportSpecifierExcludeRegexes
允许您通过使用正则表达式从特定包中排除自动导入。例如,要从模块(如 lodash)的子目录中排除自动导入,您可以设置
{
"typescript.preferences.autoImportSpecifierExcludeRegexes": ["^lodash/.*$"]
}
您可以通过使用 JavaScript 的 javascript.preferences.autoImportSpecifierExcludeRegexes 和 TypeScript 的 typescript.preferences.autoImportSpecifierExcludeRegexes 来配置此设置。有关更多详细信息,请参阅TypeScript 5.6 发行说明
远程开发
远程开发扩展,允许您使用 Dev Container、通过 SSH 或 远程隧道 的远程计算机,或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
亮点包括
- 通过 SSH/隧道连接到 Kubernetes 容器
- 手动指定 GPU 可用性
您可以在远程开发发行说明中了解有关这些功能的更多信息。
扩展的贡献
Python
运行带有覆盖率的测试
您现在可以在 VS Code 中运行带有覆盖率的 Python 测试!要运行带有覆盖率的测试,请在“测试资源管理器”中选择覆盖率运行图标,或从通常触发测试运行的任何菜单中选择“运行并显示覆盖率”。如果您使用 pytest,Python 扩展将使用 pytest-cov
插件运行覆盖率,或者对于 unittest,将使用 coverage.py
。
覆盖率运行完成后,将在编辑器中突出显示行,以指示行级覆盖率。可以通过底部“运行结果”面板关闭和重新打开这些行,其中在最近的测试运行下显示“关闭测试覆盖率”或“查看测试覆盖率”。此外,“测试资源管理器”中“测试”选项卡下方还会出现“测试覆盖率”选项卡,也带有烧杯图标,您也可以使用命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的 测试:聚焦于测试覆盖率视图 导航到此选项卡。在此面板上,您可以查看工作区中每个文件和文件夹的行和分支覆盖率指标。
有关运行带有覆盖率的 Python 测试的更多信息,请参阅我们的Python 文档。有关测试覆盖率的常规信息,请参阅 VS Code 的测试覆盖率文档。
Python 默认问题匹配器
Python 扩展现在包含一个默认问题匹配器,简化了 Python 代码中的问题跟踪,并提供了更具上下文的反馈。要集成它,请将 "problemMatcher": "$python"
添加到 task.json
中的任务中。问题匹配器扫描任务的输出以查找错误和警告,并在“问题”面板中显示它们,从而增强您的开发工作流程。
以下是使用 Python 的默认问题匹配器的 task.json
文件示例
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Python",
"type": "shell",
"command": "${command:python.interpreterPath}",
"args": ["${file}"],
"problemMatcher": "$python"
}
]
}
Python 终端 REPL 中的 Shell 集成
Python 扩展现在包含一个设置,用于选择启用或禁用 PYTHONSTARTUP
脚本。该脚本在您输入 python
或任何其他方式在终端中启动 Python REPL 之前运行。如果您选择启用,则可以使用终端 shell 集成中的功能,例如命令装饰、重新运行命令、运行最近的命令(如果在 Mac 或 Linux 系统中)。您可以通过设置 python.terminal.shellIntegration.enabled 来启用此功能。
Pylance 语言服务器模式
新增了一个设置 python.analysis.languageServerMode,使您可以在我们当前的 IntelliSense 体验或针对性能优化的轻量级体验之间进行选择。
如果您不需要全面的 IntelliSense 功能,并且希望 Pylance 尽可能节省资源,您可以将 python.analysis.languageServerMode 设置为 light
。否则,要继续使用您今天拥有的 Pylance 体验,您可以将其设置为 default
。
此新功能会覆盖以下设置的默认值
设置 | light 模式 |
default 模式 |
---|---|---|
"python.analysis.exclude" | ["**"] | [] |
"python.analysis.useLibraryCodeForTypes" | false | true |
"python.analysis.enablePytestSupport" | false | true |
"python.analysis.indexing" | false | true |
以上设置仍然可以单独更改以覆盖默认值。
GitHub Pull Requests
GitHub Pull Requests 扩展取得了更多进展,该扩展使您能够处理、创建和管理 pull request 和 issue。查看该扩展 0.98.0 版本的更新日志,了解亮点。
扩展创作
移除桌面应用程序中的自定义分配器
在此版本中,我们移除了在 1.78 版本中添加到桌面应用程序扩展主机的自定义分配器。此自定义分配器充当桥梁,用于支持与 V8 沙箱不兼容的 Node.js 原生插件,这些插件是针对 Electron 运行时构建的。您可以参考此 跟踪 issue 以获取更多背景信息。
我们已确保前 5000 个扩展不受此更改的影响。如果您的扩展或扩展的依赖项受此更改的影响,您可以尝试以下补救建议
- 如果您的扩展使用 n-api,则在使用外部数组缓冲区时,将返回状态
napi_no_external_buffers_allowed
。在这种情况下,您可以切换到使用 API 的复制版本 napi_create_buffer_copy。 - 如果您的扩展使用 node-addon-api,请参考此 文档,了解替代 API 和编译时设置。
- 如果您想避免复制带来的性能成本,可以使用 V8 分配器,以确保缓冲区后备存储与 V8 沙箱兼容。
我们还添加了遥测功能,以识别可能受影响的扩展和原生插件,以便我们可以主动联系扩展作者并在可能的情况下提供帮助。如果您的扩展受到影响,并且以上建议均无效,请在我们的 讨论线程 中评论,我们将很乐意提供帮助。
调试适配器协议
我们正式确定了如何在 Debug Adapter Protocol 的变量和输出显示中对文本进行着色和样式设置。着色通过 ANSI 控制序列工作,并且要求客户端和调试适配器分别在其初始化请求和功能中 supportsANSIStyling
。
预览功能
多个 GitHub 帐户
现在可以在 VS Code 中同时登录到多个 GitHub 帐户。
此功能在 VS Code Insiders 中默认启用。在 VS Code 的稳定版本中,您可以使用 github.experimental.multipleAccounts 设置来启用此功能。
以下是您可能需要多个帐户的几种场景
- 使用帐户 1 进行设置同步,使用帐户 2 用于 GitHub Pull Request 扩展
- 使用帐户 1 用于 GitHub 扩展(用于推送),使用帐户 2 用于 GitHub Copilot
要使用此功能,只需触发登录操作(通过内置功能(如设置同步)或扩展),您将可以选择登录到不同的帐户。如果您需要在稍后阶段更改帐户,此功能也与新的 帐户首选项快速选择 功能完美配合。
虽然大多数内容应该继续与您现有的扩展一起使用,但某些行为可能还不能完美地适应这个多帐户世界。如果您认为有改进的空间,请在这些扩展上打开 issue。借助相对较新的 vscode.authentication.getAccounts('github')
API,扩展具有处理多个帐户的强大功能。
在下一次迭代中,我们计划为所有用户默认启用此功能。
基于 MSAL 的 Microsoft 身份验证
我们一直在朝着使我们的 Microsoft 身份验证堆栈使用 MSAL (Microsoft Authentication Library) 迈进。这是一项巨大的工程,但我们在此迭代中取得了巨大进展。这项工作涵盖所有 VS Code 客户端,包括 VS Code 和 VS Code for the Web。
-
对于 vscode.dev,我们为所有 Microsoft 身份验证请求启用了基于浏览器的
MSAL.js
。换句话说,vscode.dev 现在完全基于 MSAL。 -
对于 VS Code 桌面客户端,我们在设置 microsoft.useMsal 之后实现了此功能。目前它放在设置之后,因为我们计划转向 代理流,这将使 VS Code 能够使用操作系统的身份验证状态。因此,为了尽可能减少中断,我们将首先完成这项工作,然后再广泛启用它。也就是说,如果您渴望尝试这种新的身份验证,欢迎您试用并向我们提供反馈。
您可以在 Issue #178740 中查看 VS Code 所有客户端过渡到 MSAL 的详细状态。
TypeScript 5.7
此版本包含对即将发布的 TypeScript 5.7 版本的初始支持。查看 TypeScript 5.7 计划 以了解详细信息。
要开始使用 TypeScript 5.7 的预览版本,请安装 TypeScript Nightly 扩展。
建议的 API
语言模型工具
我们继续迭代我们的 LanguageModelTool
API。该 API 包含两个主要部分
-
扩展注册工具的能力。工具是一段旨在供语言模型使用的功能。例如,读取文件的 Git 历史记录。
-
语言模型支持工具的机制,例如扩展在发出请求时传递工具、语言模型请求工具调用以及扩展将工具调用的结果传回。
在此里程碑中,我们添加了工具在运行前请求用户确认的功能。这对于可能具有某些副作用的工具很有用。
查看 issue #213274 以了解更多详细信息或向我们提供反馈。
注意:API 仍在积极开发中,内容可能会发生变化。
工程
ESM 正在 VS Code 中发布
我们最终在 VS Code 稳定版本中发布了我们的 ESM 工作。这意味着 VS Code 核心的所有层(electron、node.js、浏览器、workers)都在 JavaScript 中使用 import
和 export
语法进行模块加载和导出。我们已禁用所有旧版 AMD 加载器的用法,并将在 10 月的债务周期间将其移除。
迁移到 ESM 大大提高了启动性能。一方面,移除了很多 AMD 开销,另一方面,主工作台捆绑包大小也减少了 10% 以上
既然我们已完全转换为 ESM,我们计划改进 VS Code 的工程系统。借助 ESM,许多现代工具将适用于我们,我们非常高兴在不久的将来分享更多关于这方面的详细信息。
注意:扩展不受此更改的影响,也不会通过 ESM 加载,请参阅 https://github.com/microsoft/vscode/issues/130367 了解详细信息。
使用 NPM 作为默认包管理器
从 2024 年 9 月初开始,我们已完成在 microsoft/vscode 仓库中将包管理从 yarn 切换到 npm 的 切换。此决定基于 VS Code 的特定要求,并围绕以下标准:
- 性能:我们最初出于性能原因迁移到 yarn,而 npm 现在也可以满足我们的要求
- 安全性:我们通过限制暴露和减少我们依赖的工具数量来提高供应链的安全性
值得注意的修复
- 226401 fileWatcher 持续消耗 CPU 200%+
- 10054 [WSL]: 当
localhostForwarding = false
时,端口选项卡错误地报告 WSL 中的端口被转发到本地
感谢
最后但同样重要的是,非常感谢 VS Code 的贡献者。
Issue 跟踪
对我们的 issue 跟踪的贡献
Pull request
对 vscode
的贡献
- @BABA983 (BABA)
- 修复终端选项卡选择无法正常工作的问题 PR #224394
- 注册折叠导入操作 PR #227216
- @BlackHole1 (Kevin Cui): ci: 确保重试逻辑一致性 PR #226038
- @Cecil0o0 (hj): chore: 构建扩展时删除未到达的忽略项。 PR #227906
- @dangerman (Anees Ahee): 修复图像预览透明网格缩放 PR #226505
- @g-cappai (Gianluca Cappai): 修复 Markdown 预览中打开 HTML 锚链接的问题 PR #228633
- @gabritto (Gabriela Araujo Britto): [typescript-language-features] 可展开的悬停提示 PR #228255
- @gjsjohnmurray (John Murray)
- 在预览编辑器选项卡的悬停提示中添加操作 PR #226023
- 修复工作区扩展激活失败消息中的错别字 PR #227348
- 更正状态栏中调试面板的工具提示大小写(修复 #228088) PR #228089
- @henricryden: check-requirements-linux.sh 中 libc.so.6 的其他搜索路径 PR #227713
- @janssen-tiobe (janssen): 修复:问题面板的表格视图中激进的 URI 编码 PR #224841
- @jeanp413 (Jean Pierre): 修复初始终端尺寸在重新加载时不正确的问题 PR #225554
- @jjaeggli (Jacob Jaeggli): 使用 ctrl+alt+space 记录焦点建议详细信息 PR #190096
- @juliapz (Julia Pozdeeva): 防止查找小部件在 AUX 窗口中被裁剪 PR #229001
- @marrej (Marcus Revaj): # 在重构预览中渲染文件创建 PR #226950
- @nojaf (Florian Verdonck)
- 使用 Worker 序列化 Notebook PR #226632
- 在 ErrorNoTelemetry 消息中包含 id PR #226715
- @PhantomPower82: 润色入门页面(修复 #226991) PR #226994
- @rafamerlin (Rafael Merlin): 使内嵌提示长度可配置 PR #221276
- @rehmsen (Ole)
- 在
setup
中初始化测试变量以避免顺序依赖性。 PR #226596 - 支持每个 Notebook 单元格的多个注释小部件。 PR #226770
- 在
- @remcohaszing (Remco Haszing): 将 test-results.xml 添加到 .gitignore PR #214238
- @repraze (Thomas Dubosc): 修复:在 browser/hover.css 中将 end 交换为 flex-end PR #224102
- @segevfiner (Segev Finer): 为自定义文本编辑器采用扩展主机重启 PR #225985
- @SimonSiefke (Simon Siefke): 修复:调试视图中的内存泄漏 PR #225334
- @sunnylost (sunnylost): extensions: 将表格单元格内容包装在段落元素中 PR #228365
- @tisilent (xiejialong): 添加编辑器 GPU 渲染回退 PR #228414
- @tmm1 (Aman Karmani): 忽略 macOS 上 createDirectoryWatcher(~/Library) 的 tsserver 请求 PR #227653
对 vscode-docs
的贡献
- @0dinD (Odin Dahlström): 更新支持的 Java 版本 PR #7561
- @alexwkleung (Alex Leung): 更新输入 Jupyter 服务器 URL 屏幕截图 PR #7584
- @DiskCrasher (Mike): 修复代码中缺少“!”的问题 PR #7595
- @gaganshera (Gaganjot Singh): 更新 prompt-crafting.md PR #7555
- @harish-s-developer (Harish Srinivasan): 添加了新的“管理依赖项”部分,修复了一个错别字 PR #7617
- @harrydowning (Harry Downing): 删除关于预发布标签的不正确声明 PR #7593
- @listsarah (Sarah Listzwan): 为了关闭 Issue #7536:更新“嵌入式编程语言” PR #7539
- @mistymadonna (Misty Hays): 更新 Azure 扩展主页,创建新的入门页面 PR #7520
- @muzimuzhi (Yukai Chou): 错别字,添加缺少的内联代码标记 PR #7589
- @partev: 修复 URL 重定向 PR #7608
- @Sarke (Peter Stalman): 另一个 Flatpak/KDE5 钱包解决方法 PR #7606
- @seaniyer (Sean): 更新 publishing-extension.md PR #7540
- @vinistock (Vinicius Stock): 更新 Ruby 链接以指向新文档 PR #7607
- @wjandrea (William Andrea)
对 vscode-extension-samples
的贡献
- @liu3hao (Weihao): 添加缺少的激活事件 PR #1057
对 vscode-js-debug
的贡献
- @lucacasonato (Luca Casonato): 修复:不要在 Deno 中注入 NODE_OPTIONS PR #2080
对 vscode-jupyter
的贡献
- @rchiodo (Rich Chiodo): 使 display_name 更改也触发内核更改事件 PR #15967
对 vscode-languageserver-node
的贡献
- @StellaHuang95 (Stella): 在
CodeAction
上支持llmGenerated
属性 PR #1557
对 vscode-pull-request-github
的贡献
对 vscode-python-debugger
的贡献
- @rchiodo (Rich Chiodo): 将 debugpy 信息更新到最新的已发布版本 PR #462
对 vscode-vsce
的贡献
- @mlasson (Marc Lasson): 修复选项提示中的错别字 PR #1046
对 vscode-wasm
的贡献
- @mlugg (Matthew Lugg): 修复流错误 PR #196
对 language-server-protocol
的贡献
- @aschaber1 (Alexander Schaber): chore: 修复将
kubernets
错别字更正为kubernetes
PR #2013 - @dawedawe (dawe): 修复 CompletionParams 文档中的错别字 PR #2019
- @didrikmunther (Didrik Munther): 修复 pullDiagnostics.md 中的拼写错误 PR #2022
- @InSyncWithFoo (InSync)
- @SamB (Samuel Bronson): 更新 servers.md:vscode-markdown-languageserver 已移动 PR #2012
- @sh-cho (Seonghyeon Cho): 添加 fluent-bit 语言服务器实现 PR #2016
- @StellaHuang95 (Stella): 在
CodeAction
上支持llmGenerated
属性 PR #2020