Repository navigation
feat(macos): 完善类方法跳转、悬停提示与导航弹窗 - #1556
arkleselect wants to merge 8 commits into
Conversation
Lithe Review结论: Scope Check
Suggestions
Summary静态检查未发现需要阻塞合并的问题。变更沿用现有平台导航和共享编辑器能力,并更新了相关 Agent Note 与功能矩阵。截图缺失是本次唯一审查建议。 Verification
|
|
那个拆 Java Support 的 PR 没影响正常功能吧,我不是很确定哎 |
我还能用 就是突然不显示侧边栏的数据库按钮了 |
这个是 @1lck 给数据库拆到那个插件里面了哎,你可以看看插件内容 |
xiaoyumuxi
left a comment
There was a problem hiding this comment.
审查基于 cb351ab,发现 2 处行为回归,具体见行内评论,建议合并前修复。
验证:现有 106 个 WebKit 逻辑集成用例全部通过;另用真实 WebKit 定向确认 Spring 字符串配置键的 Command-click 被拦截,并用原生 dropdown 生命周期定向 harness 确认选择后的关闭回调会回写 Binding(false)。后者只验证控件生命周期,未进行完整产品的 JDT 依赖源码跳转验收。平台矩阵、Agent Notes、架构边界及 runtime bundle 只读检查通过。未运行完整 Swift 测试及整机验收。
| Color.clear.frame(width: 1, height: 1) | ||
| .litheDropdown(isPresented: Binding( | ||
| get: { model.isImplementationChooserVisible }, | ||
| set: { if !$0 { model.closeLanguageNavigationResults() } } |
There was a problem hiding this comment.
[P2] 不要在选择完成后的关闭回调中重置新启动的导航
选择 jdt://… 等虚拟源码实现时,navigate(to:) 会先把 isImplementationChooserVisible 设为 false,随后启动异步 resolveVirtualDocument。SwiftUI 更新后,dropdown 的正常关闭流程仍会通过 onDismiss 回写 Binding(false);这里无条件调用 closeLanguageNavigationResults(),进而 reset() 导航 coordinator,使刚启动的 operationID 失效。只要虚拟源码响应晚于关闭回调,返回结果就会被 owns(operationID) 拦截,表现为弹窗关闭但目标源码没有打开。原生 dropdown 生命周期定向 harness 已确认“开始选择请求 -> 关闭回写 false -> reset”的顺序。请区分用户取消与选择完成后的关闭,避免关闭旧结果面板时取消新导航,并补一个延迟虚拟源码响应的选择回归测试。
| if (!position || !tokens?.isCheapToTokenize(position.lineNumber)) return false; | ||
| tokens.forceTokenization(position.lineNumber); | ||
| const line = tokens.getLineTokens(position.lineNumber); | ||
| return line.getStandardTokenType(line.findTokenIndexAtOffset(position.column - 1)) === 0 /* Other (code) */; |
There was a problem hiding this comment.
[P2] 保留字符串内部已有的语义导航
这里只接受 Other token,而 isCodePosition() 也被用于 Command-click 的执行条件,因此会直接屏蔽合法的字符串导航。例如现有 Spring 功能支持从 @Value("${demo.retry-count}") 跳到配置文件,但该位置的 Java TextMate token 类型为 String,导航请求在到达 native 的 productNavigationLocations() 之前就被拦截。真实 WebKit 定向验证中,同一配置键的 Command-click 发出 0 次 definition 请求,F12 发出 1 次;普通代码位置两种方式均发出 1 次。这是已有交互回归,不只是缺少悬停效果。请保留可由产品功能或语言服务解析的字符串链接,不要仅凭字符串 token 全量拒绝,并补 Spring 配置键的点击导航测试。
功能与行为
macOS 编辑器此前 Command 点击缺少可见链接反馈,同文件方法调用可能误入实现查询;导航选择器直接覆盖在编辑区上,缺少原生弹窗的关闭行为。本次完善类/方法的单目标跳转以及相关悬停、折叠和选择器体验。
审查结论与范围
审查范围:preview → codex/class-method-navigation 的 19 个变更文件及直接调用链。未发现需要阻塞合并的问题。提交前已移除误重复添加到终端页的弹窗锚点;悬停错误处理复用已有 languageRequest,不建立第二套异常逻辑。
已完成的是类/方法单目标导航及上述交互。既有“在声明自身上 Command 点击后回退到实现查询”的语义,与 IDEA 的声明/用法分流仍有差异;截图中的用法被标为实现的问题未在本 PR 宣称解决。Java 折叠沿用 Core 词法结构精度,并非新接入完整 LSP 语义折叠。完整产品的所有主题、JDK 外部源及所有导航来源未做穷举人工验收。
验证
上游依据
慢查询光标稳定性补充
Command 命中候选词时立即在稳定的代码视图层显示 pointer;语义成功后才显示链接色和下划线。避免异步解析空档与文字 span 重绘时退回 I-beam。无目标/失败在同一手势内不重复查询,移出或松键后允许重试;取消时移除指针状态,迟到回复不能恢复它。
新增原生回复闸门的真实 WebKit 测试,覆盖慢服务、连续移动、重绘、负结果和松键后的迟到回复;102 项通过,边界、资源只读、Notes、测试稳定性和功能矩阵门禁通过。
Java 导入折叠首帧修复
Command 悬停提示延迟
24bab9a438efb41bd197b295b87136bb98b0b40c的 CtrlMouseHandler.kt / HoverPopupContext.kt:上游 Command 提示本身立即显示,Lithe 此处按用户要求有意采用普通文档延迟;紧凑 6/6/5/6 内边距与 Lithe 共享外观继续复用。Command 导航即时反馈
注释候选误识别修复
注释分隔符颜色
punctuation.definition.comment当作普通 delimiter 的问题,注释斜杠/星号与正文统一使用 comment 主题色和 token 类型。普通除法标点保持原分类,不增加 CSS 特例或硬编码颜色。