Repository navigation
feat(macos): 彩色 LSP 状态菜单与普通日志标签页 - #1631
Conversation
Lithe Review结论: 未发现需要阻塞合并的问题。 Findings
Scope Check
Suggestions
Summary整体复用了现有生命周期和呈现组件,日志存储保持有界。主要缺口在真实异步关闭与局部重置边界;现有同步假会话测试未覆盖这两种情况。 Verification
|
Review 修复(bb51d5ae8)已处理 review 中两条 P2:
验证:最终只运行直接相关的 8 项回归,全部通过(Swift 6.3.3,macOS 26.5 SDK)。覆盖有/无文档重启、延迟停止、资源释放屏障、等待时再次停止、失败后重试和多提供方局部索引重置;最慢为资源释放测试 63ms。HTML / JSON / JUnit: 相关静态门禁、运行时 bundle 只读、i18n 生成/语言检查、35 项 i18n 测试、共享契约、Windows 边界、Agent Notes 和功能矩阵检查通过。同步了中英失败提示、功能矩阵和语言运行时决策说明;没有新增插件清单字段、能力版本、Rust 协议或发行资源写入。 截图建议暂未补充:本轮没有启动真实 LSP 做视觉验收,不用测试夹具截图冒充真实运行。真实多语言项目的进程控制/视觉验收仍保留 pending。测试结束已确认没有本轮 Lithe 应用或测试进程残留。 |
背景与范围
接续 #1630 和此前的状态栏讨论。#1630 已合并内存图标化、FPS 去图标和紧凑按钮;本 PR 从最新
preview独立开发,只处理 macOS 右下角彩色 LSP 状态控制与专用日志视图。原来的wip: LSP status bar widgetstash 保留,没有删除或混入其他暂存工作。功能改动
LSP,没有源文件、活跃会话或语言模块尚未激活时也可打开;空列表保留日志与设置入口,多运行服务器时显示数量。蓝色表示启动/初始化、绿色表示运行、黄色表示停止中、红色表示失败;使用现有主题颜色,与 LSP 设置页一致,不以编辑器诊断错误冒充服务器故障。LitheMenu,每个服务器有彩色状态点、状态/版本说明和“查看日志 / 重启服务器 / 停止服务器”子菜单;支持“重启所有 / 停止所有”、顶层日志和 LSP 设置入口;批量动作只处理已有会话,无会话时禁用。修正日志入口跟随应用语言。重启、停止和设置使用已有 IDEA SVG,保留原色。OutputTextView的等宽字体、着色、选择/复制、水平滚动和视口所有权;窄标签页工具栏改为两行。AppModel.swift移到现有语言运行时 extension,保留流程并增加过期 token 检查;增加只读的模块关闭状态投影,没有放宽架构门禁。lsp-status-logs功能矩阵记录。Windows 尚未实现该状态项和日志视图,明确标为 missing,不宣称跨平台完成。验证
使用仓库固定 Swift 6.3.3,
SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdk。本机默认 Swift 6.4.2 / macOS 27.2 SDK 与 CI 不同,未以默认编译器替代验证。./.agents/skills/write-stable-tests/scripts/test-stability-macos.sh --stall-timeout-seconds 300 --report .artifacts/test-stability/lsp-status.json -- --jobs 4 --filter 'LanguageServerStatusTests|LSPControlCenterPresentationTests|WorkspaceLanguageServerPreferencesTests|WorkbenchModuleUIRegistryTests|ContextMenuCoverageTests|WorkbenchRenderingSafetyTests|AppModelLanguageSessionShutdownTests|LanguageIntelligenceModuleCoordinatorTests|JavaLanguageServerRuntimeTests|EditorTabOrderFeatureModelTests|ConsolePresentationTests'前序范围回归通过;最终插件来源/名称修正只补跑直接相关的 17 项检查(2 个套件),全部通过。新增覆盖状态过滤/排序/版本/优先级、日志变化不重发状态、重启顺序与匹配文档、无文档重启、停用保护、过期激活身份、按服务器筛选/清空、新日志恢复、普通日志标签去重/切换/关闭返回未保存文件、排序和分组、单个/批量菜单动作。
最终报告:
.artifacts/test-stability/lsp-registration.json/.junit.xml,HTML 为.artifacts/test-stability/index.html。名称解析读取真实 Java 插件清单与生产 Rust catalog,确认 jdtls;无元数据时显示插件 ID。另覆盖直接命令名、内置插件默认禁用/启用/禁用、声明式插件启停、未注册不贡献行和空菜单入口。最终命令:
test-stability-macos.sh --stall-timeout-seconds 300 --report .artifacts/test-stability/lsp-registration.json -- --jobs 4 --filter 'LanguageServerStatusTests|PluginManagerTests.bundledServersAreInjectedOnlyAfterTheirPluginIsEnabled|PluginManagerTests.serverRegistrationUsesDeclaredCommandsOrExistingServerMetadataWithoutInventingNames|PluginManagerTests.registeredPluginIsDisabledAndReEnabledWithoutRestart|PluginManagerTests.enablingAPluginInstalledAfterLaunchPersistsPreferenceAndRequiresRestart|PluginManagerTests.internalLifecycleModulesAreNotShownAsInstalledPlugins'。名称解析 19ms、插件启用边界 1ms。前序组件渲染覆盖 360pt/900pt、明暗主题。测试夹具只验证组件,不作为真实服务器运行证据;真实预览显示应用自身事件,未伪造服务器/日志。
node scripts/i18n/verify-app-language-localization.mjsnode scripts/i18n/generate-i18n.mjs --checknode --test --test-timeout=60000 scripts/i18n/test-i18n.mjs:35 个通过。./scripts/architecture/verify-service-boundaries.sh./scripts/architecture/verify-shared-contracts.sh./scripts/windows/verify/verify-windows-boundaries.sh./scripts/macos/verify/verify-runtime-bundle-immutability.sh(覆盖 macOS 和 Windows 打包路径扫描)./scripts/agent-notes/verify-agent-notes.shnode scripts/platform-feature-matrix/generate-platform-feature-matrix.mjs./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEADgit diff --check编译曾在测试开始前触发无输出 watchdog;最终相同 300s 静默上限的聚焦检查重跑通过,未放宽 15s 单项期限。
未验证与限制
PR 最初以 Draft 创建,后续已被标为 ready;本次保留当前状态,全部修正集中 push 一次,不为观察 CI 反复推送。
Review 修复(bb51d5ae8)
已处理 review 中两条 P2:
LanguageServerSession.stopAndWait(),生产 runtime 等待 Core 的终止事件、迟到异步启动的清理及异步资源释放完成;停止发送移出主线程,等待有本地期限。.stopping投影,拒绝文档/其他入口启动重叠会话。关闭失败/超时不启动替代进程;显式重试继续确认同一个旧会话的释放。resetProviderState(providerID: "java"),不调用工作区整体重置;其他服务状态、去重订阅及当前日志选择/内容保持。验证:最终只运行直接相关的 8 项回归,全部通过(Swift 6.3.3,macOS 26.5 SDK)。覆盖有/无文档重启、延迟停止、资源释放屏障、等待时再次停止、失败后重试和多提供方局部索引重置;最慢为资源释放测试 63ms。HTML / JSON / JUnit:
.artifacts/test-stability/lsp-review.*、.artifacts/test-stability/index.html。相关静态门禁、运行时 bundle 只读、i18n 生成/语言检查、35 项 i18n 测试、共享契约、Windows 边界、Agent Notes 和功能矩阵检查通过。同步了中英失败提示、功能矩阵和语言运行时决策说明;没有新增插件清单字段、能力版本、Rust 协议或发行资源写入。
截图建议暂未补充:本轮没有启动真实 LSP 做视觉验收,不用测试夹具截图冒充真实运行。真实多语言项目的进程控制/视觉验收仍保留 pending。测试结束已确认没有本轮 Lithe 应用或测试进程残留。