公告

SharpLsp 0.19.0:可以信赖的运行、调试与测试循环

终端中显示启动配置文件选择提示、重建后的异步调用栈与通过的测试结果

版本 0.19.0 的主题是内循环:按下 F5,选择启动配置文件,命中断点,读懂调用栈,运行测试。这整个循环现在都能正常工作——更重要的是,我们能证明它正常工作,因为它的每一个环节都被端到端测试覆盖:这些测试构建真实项目,并断言真实结果。

本版本发布了全部五个平台的 VSIX 包——win32-x64/arm64、linux-x64/arm64 和 darwin-arm64——并附带 SHA256 校验和,可在发布页面获取。以下是变更内容。

F5 与启动配置文件,真正修好

此前的运行/调试体验存在一些靠界面打磨掩盖不了的问题:dotnet run 能看到而扩展看不到的配置文件、项目含有多个配置文件时的静默失败、以及无法取消的构建。我们对这三个问题都做了根本原因修复。

运行/调试的端到端测试块 21/21 全部通过。这些套件会启动真实的项目文件、附加调试器并验证行为——它们不模拟调试器。

读起来像你代码的异步调用栈

调试异步 C# 代码,长期以来就意味着眯着眼睛看状态机内部:看到的是一堵 MoveNext 帧的墙,而不是你实际写下的 await 链。本版本引入了 DapRouterdap-router.ts + dap-frames.ts),一个调试适配器协议(DAP)的路由层,在内容到达编辑器之前重建逻辑异步调用栈

有了这个路由器,在一个被等待的调用中暂停时,看到的就是你期望的调用链:

ProcessOrders()
  await ChargeCardAsync()
    await Gateway.PostAsync()   ← paused here

而不是三层编译器生成的管道装置。

DapRouter 使用 DAP 1.71,也是后续工作的基础:netcoredbg 与 ICorDebug 路径在它背后可以互换,而路线图上的功能——logpoints、DebuggerDisplay 仿真、热重载协调——都构建在同一套管道之上。

有端到端证明支撑的 Test Explorer

测试资源管理器会悄悄腐烂:发现功能在演示项目上正常,到了你的项目上就失败。版本 0.19.0 新增了七个端到端测试套件——约 4,800 行测试——覆盖以下方面:

结果断言检查的是实际运行的内容,而不仅仅是界面上渲染的内容。而且这些行为如今写在 TEST-EXPLORER-SPEC.md 中,是文档化的契约,而不是口口相传的惯例。

不会悄悄腐烂的编辑器扩展

本版本中最有价值的修复,可能是你永远不会看到的那个。在 0.19.0 周期中,我们发现 SharpLsp 自己的 Zed 扩展曾随附从未执行过的测试套件——其中一些还是断言常量等于自身的同义反复。绿灯管道里空无一物。这正是制造出本文所讨论的这类发布的失败模式,因此我们从结构上修复了它:

构建与发布加固

其余的改动是保持发布本身诚实的隐形管道:

获取 0.19.0

发布页面安装(各平台 VSIX 及 SHA256 校验和),阅读文档,如果内循环在你的项目上出了问题——那正是我们想要的 issue