Skip to content

Make CollapsibleObject can use Comment 使 CollapsibleObject 可以使用 Comment - #149

Merged
ZhuRuoLing merged 1 commit into
Anvil-Dev:dev/1.21.1from
QiuShui1012:config/1.21
Oct 10, 2026
Merged

ZhuRuoLing merged 1 commit into
Anvil-Dev:dev/1.21.1from
QiuShui1012:config/1.21

Conversation

@QiuShui1012

Copy link
Copy Markdown
Contributor

No description provided.

@Gugle2308

Copy link
Copy Markdown

代码审查摘要 — PR #149(AnvilLib)

PR: Make CollapsibleObject can use Comment 使 CollapsibleObject 可以使用 Comment
作者: QiuShui1012 | 分支: config/1.21 → dev/1.21.1 | 状态: open(1 commit,6+/3-,1 文件)
CI: 11 个 check 中 10 个已 success(含 build-l0 (config, anvillib-config, anvillib_config),即本 PR 改动模块),仅 cube 模块仍在 in_progress(对应 mergeable_state: unstable)。

范围: 仅 module.config/.../ConfigData.java — 把 Comment 的读取提前到 CollapsibleObject 分支之前,并用注释文本填充折叠组(section)的 tooltip lang key。

✅ 变更正确性(已逐环取证,结论:有效且必要)

原代码里折叠组 tooltip 之所以吃不到 @Comment,根因是常量别名 + 首写胜出去重:

环节 证据
COLLAPSIBLE_OBJECT_TOOLTIP_STRING 与 TOOLTIP_STRING 字面完全相同 均为 OPTION_STRING + ".tooltip" = %s.configuration.%s.tooltip(base L22/L24)
ProviderProxy.add 以静态 ADDED 集合去重、first-wins base L29-33;这层去重是必需的,因为 NeoForge LanguageProvider.add(String,String) 对重复 key 直接抛 IllegalStateException("Duplicate translation key")(已核对 neoforge-21.1.238-sources.jar)
因此 base 中 L78 先写入 name,L84 的 comment.value() 被静默丢弃 折叠组 tooltip 永远显示字段英文名,注释丢失 ✔ 与 PR 标题描述的现象一致
新代码把注释文本写在先注册的那次,第二次注册同 key 同值被去重 无重复 key 崩溃风险,行为 = 折叠组 tooltip 显示注释
NeoForge 侧 key 解析路径对得上 ConfigurationScreen.getTooltipComponent() → getTranslationKey(key) + ".tooltip";section(createSection)无 ValueSpec 时走 ModConfigSpec.getLevelTranslationKey(path),而 ConfigManager.register() 在 push() 前已 builder.translation(OPTION_STRING.formatted(modId, name))(L129 前后),路径 parent + "." + toLowerCaseUnder(field) 与 ConfigData 的 fieldName 构造一致

即:@Comment 现在同时成为 TOML 注释(builder.comment)与 section tooltip,且失败回退(translatableWithFallback)路径也一致,不会出现注释显示两次。

💡 建议(非阻塞)

  • ConfigData.java L15-18 / L24-26 — 两个常量为同一字符串,所以折叠组字段现在会对同一个 lang key 注册两次(同值,被 ADDED 去重)。可读性上建议留一行注释说明「两者同 key,先注册者生效」,或把折叠组分支合并进下面统一的 if (comment != null) 逻辑;但不要简单删掉 L15-18 的 name 兜底,否则无 @Comment 的折叠组会彻底失去 tooltip(回归)。
  • 空注释边界:@Comment 的 value() 默认 ""(Comment.java)。写 @Comment(不带值)时新逻辑会把 section tooltip 写成空串而不是字段名 —— 与非折叠字段的既有行为一致(同样会写空 .tooltip),属病理输入,可选加固:comment == null || comment.value().isBlank() ? name : comment.value()。
  • 文档:README.md(L38-40)只列了 @Comment / @CollapsibleObject 两个特性,未展示二者可组合用于折叠组标题提示。另外提醒:注释文本会被写入 en_us lang 值,而 README 示例用的是中文注释(@Comment("启用调试模式")),组合场景下建议注释使用英文、译文交给 lang 文件。
  • 影响面:目前 AnvilCraft 侧 4 处 @CollapsibleObject(PowerConverter / SpacetimeSupercomputerCommand / GravitationalLens / IonoCraftBackpackHud)均未加 @Comment,故本 PR 对下游暂无行为变化,属纯能力开放 —— 建议合并后随 Anthropic/下游首个使用点一起回归一次配置界面(折叠组 hover tooltip + TOML 注释)。

🟢 看起来不错

  • 改动最小且精准,comment 只取一次注解、消除了原来分支内的重复 getAnnotation 调用;
  • 未触碰 COLLAPSIBLE_OBJECT_BUTTON_STRING 语义(按钮仍显示组名,tooltip 显示注释),符合 NeoForge createSection 的 name + EMPTY_LINE + tooltip 渲染结构;
  • CI 中 config 模块构建已通过,编译面无风险。

结论: APPROVE(Comment 级别) — 逻辑正确、有明确根因支撑(同 key 首写胜出导致注释被吞)。仅建议按上文补注释/文档,可选加固空注释分支。

🧪 测试建议

被测目标 推荐场景 优先级
ConfigData.providerAdd() 折叠组带 @Comment:.tooltip lang 值 = 注释文本;按钮 key .button = 字段名 🟡
同上 折叠组不带 @Comment:tooltip 仍 = 字段名(回归保护) 🟡
ConfigData + datagen 同 key 双注册不触发 IllegalStateException("Duplicate translation key")(跑一次 runData 断言生成 lang 无重复键) 🟢

📋 标题建议

gh auth status 显示 /opt/data/home/.config/gh/hosts.yml 中 token 已失效(401 Bad credentials),本次未自动执行 gh pr edit。建议标题改为:

Support Comment annotation on CollapsibleObject fields 允许 CollapsibleObject 使用 Comment

(现标题英文 Make CollapsibleObject can use Comment 语法不成立。)


由 Hermes Agent 审查

@Gugle2308

Copy link
Copy Markdown

💾 Self-improvement review: Patched SKILL.md in skill 'rename-refactor-pr-review' (1 replacement).

@ZhuRuoLing ZhuRuoLing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - ported config Comment support

@ZhuRuoLing
ZhuRuoLing merged commit 0f817d4 into Anvil-Dev:dev/1.21.1 Oct 10, 2026
41 checks passed
@Gugle2308

Copy link
Copy Markdown

收到 webhook 事件为 closed(PR #149 已关闭),按流程约束第 1 条:closed/labeled 事件直接停止,不进行审查、不获取 diff、不发表评论。

本次不做任何操作。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants