Skip to content

fix(desktop): Java 文件图标缺失、调试插件声明 C 系语言后无语法高亮 - #1840

Merged
xiaoyumuxi merged 1 commit into
previewfrom
fix/1794-java-icon-c-highlight
Nov 13, 2026
Merged

xiaoyumuxi merged 1 commit into
previewfrom
fix/1794-java-icon-c-highlight

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进
  • fix:缺陷修复
  • docs:文档、Agent Note、Skill 等规则文件
  • release:稳定版发布准备

改动说明 / What changes

背景 / Why

Viva 桌面端两处迁移回归:

  1. Java 文件在编辑器标签页、项目树、Search Everywhere 里显示问号(未知文件)图标。
  2. 装了 lldb-debug 插件后,.c/.h/.cpp 文件整片没有语法高亮。

改动 / Changes

C 语言无语法高亮

  • desktop/internal/editor/syntax/language.go:新增 Registry.SyntaxForPath(path),按文件名给出着色用的语法。
    • 插件语言自带 grammar,或 ID 能继承内置语言时,行为不变。
    • 插件语言既没有 grammar、ID 也不是内置语言时(如 lldb-debug 插件用 clangd 声明 c/h/cpp/m/...),它只负责把文件路由给插件的语言服务器和调试器;文件按文件名使用内置语言的语法着色(.c 用 C、.cpp 用 C++)。文档的语言 ID 仍是插件声明的 clangd,clangd 与 lldb 的路由不变。
    • 把 ForPath 的内置部分抽成 bundledForName、文件名规范化抽成 fileName,ForPath 行为不变。
  • 编辑器、无标签文档、Diff 标签、插件虚拟文档、Problems 预览、源码预览共 6 处原来是 ForPath + Syntax(language.ID),改为调用 SyntaxForPath(documents.go、documents_tabless.go、difftab.go、plugincontent.go、problems_preview.go、source_preview.go)。语言 ID 仍取自 ForPath。

Java 标签页图标缺失

  • desktop/internal/fileicons/svg/java.svg、java_dark.svg:从旧版 macOS 客户端 macos/Resources/IDEAIcons/expui/fileTypes/ 原样恢复(f1e8d8139^)。来源属于 NOTICE 已登记的 IntelliJ Community expui/fileTypes,Apache 2.0。
  • fileicons.go:新增 kindJava,*.java 映射到 Java 图标,深色主题用 JavaDark。
  • icons.go:用 scripts/desktop/generate-desktop-file-icons.sh 重新生成,只新增 Java 两个图标,其他图标向量逐字节不变。
  • fileicons_test.go:新增 Main.java → kindJava 用例,并删除 Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799 留下的旧断言 {"Main.java", kindUnknown}(它记录的正是本次要修的缺失)。

功能矩阵

  • project-file-type-icons:能力、验证、备注补上 *.java。
  • plugin-editor-grammars:补上无 grammar 插件语言回落到内置语法的验证与备注,证据加上 language.go。

不在本 PR 范围内 / Out of scope

  • lldb-debug 插件清单(Lithe-IDEA/lithe-plugin-lldb)把 C 系语言声明为一个 clangd。宿主修复后高亮已恢复,是否拆成 c/cpp/objective-c 由插件维护者决定,本 PR 不改插件。
  • 内置语言 objective-c 本来就没有 grammar,.m 文件仍无高亮,与本回归无关。

类型专属:fix

复现与根因

  • 复现步骤、实际结果、期望结果:
    1. 安装 lldb-debug 0.0.1,打开任意 main.c:实际整片无高亮,期望显示 C 关键字、字符串、数字颜色。
    2. 打开任意 Main.java:实际标签页和项目树显示未知文件图标,期望显示 Java 图标。
  • 根因:两处都来自 Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799(0faecba49)。
    • SetPluginLanguages 把 ID 不在内置表里、又没有 grammar 的插件语言注册成 Scope 为空的语言。插件语言在 ForPath 中优先匹配,Syntax(clangd) 返回 nil,于是 C 系文件全部丢失内置语法。
    • 迁移 IDEA 文件图标时漏掉了 java.svg,fileKind 也没有 java 分支。
  • 影响平台:macOS、Windows(共用 Viva 桌面端)。

检查项

  • 已先写回归测试,确认它在修复前失败、修复后通过;测试路径与修复前的失败输出:desktop/internal/workbench/documents_test.go 的 TestOpenFileOfGrammarlessPluginLanguageKeepsBundledColors,修复前输出 main.c shows no C keyword colors: [{0 }];另有 desktop/internal/editor/syntax/language_test.go 的 TestPluginLanguageWithoutGrammarKeepsBundledColors 和 fileicons_test.go 的 Main.java 用例
  • [N/A] 无法自动化时,已写明手动复现与验证步骤:已自动化
  • 已搜索被修改函数、类型、契约字段的全部调用方(含另一平台、插件、SDK、脚本和按字符串分发的调用):ForPath+Syntax 的 6 处调用全部改用 SyntaxForPath;runs.go 的 Syntax("") 不按路径取语法,未改
  • 已检查另一平台是否有同类缺陷(有则本 PR 一并修复,或已提交 Issue):Windows 与 macOS 共用同一份 Viva 代码,本 PR 一并修复
  • 只改了修复所需的代码,没有夹带重构;修复过程中发现的其他问题已提交 Issue:无新发现
  • [N/A] 修复改变了行为约束或容易复发,已在 .agents/notes/implemented/bug-fix/ 记录:规则写在 SyntaxForPath 注释里,并由两个回归测试守住

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/<id>.json:project-file-type-icons、plugin-editor-grammars,验证状态保持 pending
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh 和 verify-platform-feature-matrix-change.sh origin/preview HEAD
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的,理由:已更新

统一日志系统 / Structured logging

N/A:没有新增或改动生命周期、终态、降级或失败路径。

界面文案 / i18n

N/A:没有新增用户可见文案;已运行 verify-app-language-localization.mjs 与 generate-i18n.mjs --check,均通过。

逻辑归属 / Logic placement

  • 可共享的逻辑在共享层:语法选择在 Viva 桌面端共用的 internal/editor/syntax,两端同一份代码
  • [N/A] 修改平台层已有的可共享逻辑时已迁入 Core:未修改平台层逻辑
  • 宿主和 Core 没有按工具名加分支:规则按“插件语言有没有 grammar、ID 是否内置”判断,不认插件或语言名字

性能与内存 / Performance and memory

N/A:语法查找只在打开文件时多做一次文件名匹配,没有新增后台任务、缓存或主线程 I/O。

设置 / Settings

N/A:没有改设置。

插件契约 / Plugin contract

N/A:没有改契约、能力版本或宿主方法。

发行包与资源 / Bundle and resources

  • 运行时不向已安装的 app bundle 或 Windows 安装目录写入:图标编译进二进制;已运行 scripts/desktop/verify/verify-runtime-bundle-immutability.sh
  • [N/A] 新增或修改下载、解压、生成或缓存资源的,已同步资源复用清单:SVG 是源码资源,没有新增下载或缓存

无用代码与重构 / Dead code and refactoring

  • 本次改动导致变成无用的代码已在本 PR 删除:6 处调用方原来的 ForPath+Syntax 拼接已删除
  • [N/A] 本次之前就存在的无用代码或可重构之处:未发现

验证 / Verification

命令或操作 平台 结果
scripts/desktop/desktop-go.sh test ./internal/fileicons/ ./internal/editor/... ./internal/workbench/ macOS 通过
scripts/desktop/desktop-go.sh vet ./internal/workbench/ ./internal/editor/syntax/ macOS 通过
回归测试在修复前(还原 documents.go)运行 macOS 失败:main.c shows no C keyword colors,修复后通过
LITHE_ICON_PYTHON=python3.11 zsh scripts/desktop/generate-desktop-file-icons.sh macOS 只新增 Java 两个图标,其他向量不变
node scripts/i18n/verify-app-language-localization.mjs、node scripts/i18n/generate-i18n.mjs --check macOS 通过
scripts/platform-feature-matrix/verify-platform-feature-matrix.sh、verify-platform-feature-matrix-change.sh origin/preview HEAD macOS 通过
zsh scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS 通过
.agents/skills/write-stable-tests/scripts/verify-test-stability.sh --base origin/preview macOS 通过

未能执行的检查和原因: Windows 实机未运行;Windows 与 macOS 共用同一份 Viva 代码,组件测试已覆盖。整机上装 lldb-debug 插件后打开 main.c 与 Main.java 的人工验收待做。

提交前确认 / Final checks

  • 分支从最新的 preview 创建;目标分支:preview
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交构建产物、凭据、个人路径和未脱敏的日志或截图
  • 本次构建、测试或预览启动的 Lithe 应用和子进程已全部关闭,没有进程残留

- 插件语言没有 grammar、ID 也不是内置语言时,文件按文件名用内置语言的语法着色
  (新增 Registry.SyntaxForPath,6 处调用方改用它),语言 ID 与服务器路由不变
- 恢复 IDEA 的 java.svg / java_dark.svg,*.java 显示 Java 图标
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 13, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 13, 2026 04:33
@xiaoyumuxi
xiaoyumuxi merged commit 45838dd into preview Nov 13, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant