Skip to content

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

Merged
ZhuRuoLing merged 1 commit into
Anvil-Dev:dev/1.21.11from
QiuShui1012:port/1.21.11
Oct 10, 2026
Merged

ZhuRuoLing merged 1 commit into
Anvil-Dev:dev/1.21.11from
QiuShui1012:port/1.21.11

Conversation

@QiuShui1012

Copy link
Copy Markdown
Contributor

No description provided.

@Gugle2308

Copy link
Copy Markdown

⚠️ Dangerous command requires approval:

cd /opt/data/workspace/AnvilLib && gh auth status 2>&1 | head -8; echo "=== PR API ==="; curl -s "https://api.github.com/repos/Anvil-Dev/AnvilLib/pulls/152" -o /tmp/pr152.json; grep -o '"state": *"[a-...

Reason: script execution via -e/-c flag

Reply /approve to execute, /approve session to approve this pattern for the session, /approve always to approve permanently, or /deny to cancel.

@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

@Gugle2308

Copy link
Copy Markdown

代码审查摘要 — PR #152

操作: opened(PR 仍开启,mergeable: true,未被合并)
范围: 1 个文件(1 Java,+6 / -3,无新增/删除文件)
作者: QiuShui1012 | port/1.21.11 → dev/1.21.11
改动: module.config/.../config/ConfigData.java — 把 Comment 注解的读取提前,使 @CollapsibleObject 字段的 tooltip 用注释文本而非字段英文名


✅ 先确认「这是真 bug 修复,不是锦上添花」

我做了两条交叉验证,结论是旧代码里 @Comment 在 @CollapsibleObject 字段上是被静默丢弃的:

  1. ConfigData.java:22-24 两个常量字面量完全相同:
    • TOOLTIP_STRING = OPTION_STRING + ".tooltip" → %s.configuration.%s.tooltip
    • COLLAPSIBLE_OBJECT_TOOLTIP_STRING = "%s.configuration.%s.tooltip"
  2. ProviderProxy.add()(line 29-33)是首次写入胜出(ConfigData.ADDED 去重)。旧流程对「@CollapsibleObject + @Comment」字段依次执行:.button=name → .tooltip=name(写入并登记)→ 递归 → .configuration.<path>=name → .tooltip=注释(key 已存在,被丢弃)。
  3. 对照 NeoForge 侧渲染逻辑(neoforge-21.1.238-sources.jar: ConfigurationScreen.createSection,line 923-933 与 getTooltipComponent line 573-588):分段按钮的 tooltip = 加粗标签 + translatableWithFallback(<key>.tooltip, comment)。所以修复前游戏里 tooltip 显示的是 Power Converter / Power Converter(标题重复),注释从未出现。修复目标键完全正确。

另外旁证 ConfigManager.register + ModConfigSpec.Builder.push(line 846-858):push() 会把待定 comment 收进 levelComments,而这个 level comment 只在 lang key 缺失时才作为 fallback 使用 —— 也就是说,只要 datagen 写了 .tooltip,注释就永远显示不出来,进一步印证必须改 lang 生成侧。

🔴 关键

  • 无。

⚠️ 警告

  • ConfigData.java:22-24 — 键别名 + 首次写入胜出的组合仍在,且本次修复留下了一条死写入。 因为 COLLAPSIBLE_OBJECT_TOOLTIP_STRING 与 TOOLTIP_STRING 是同一个键,补丁后「有注释的 collapsible 字段」会把该键写两次(第二处 line 24-26 仍会被 ADDED 吞掉,值相同所以无害,但极易误导后人)。建议合并为单一写入路径并删掉别名常量,例如:

    if (flag) {
        proxy.add(COLLAPSIBLE_OBJECT_BUTTON_STRING.formatted(modId, fieldName), name);
        ConfigData.readConfigClass(proxy, modId, type, fieldType, fieldName);
    }
    proxy.add(OPTION_STRING.formatted(modId, fieldName), name);
    if (comment != null || flag) {   // collapsible 无注释时保持 name 回退
        proxy.add(TOOLTIP_STRING.formatted(modId, fieldName),
                  comment == null ? name : comment.value());
    }

    (递归注册的是 parent.child.* 键,与父级 .tooltip 不冲突,调整顺序是等价的。)

💡 建议

  • Comment.value() 默认为 "":@Comment(无值)或 @Comment("") 用在 collapsible 字段上,会让 .tooltip 变成空串,而修复前这里是字段名。普通字段本来就是这个行为(一致),但 collapsible 场景是从「有回退」变成「空」,建议 comment == null || comment.value().isBlank() ? name : comment.value(),或至少在文档里写明。
  • README 补一句:README.md:38-40 / README.en.md:39-41 把 @Comment 与 @CollapsibleObject 列成两个独立特性,建议加一句「@Comment 亦可作用于 @CollapsibleObject 字段,作为子菜单条目的说明」,示例块也可顺带给出嵌套对象写法。
  • 同仓库另一条线仍有同样代码:本地 origin/dev/26.1 快照(module.config/.../ConfigData.java line 78/84)与修复前代码一字不差。若 26.1 是活跃线,建议一并同步此修复(本地快照可能落后,请以远端为准)。

🟢 看起来不错

  • 修复方式最小化:只提前取一次注解,comment == null ? name : comment.value() 完整保留了「collapsible 无注释 → 仍写字段名」的旧行为,不产生任何 lang 键增删,现有生成的 en_us.json 逐字节不变(AnvilCraft 侧 anvilcraft.configuration.power_converter.tooltip: "Power Converter" 之类的条目不会变),datagen 无 churn。
  • 跨仓库兼容性已核对:AnvilCraft ConfigScreenLang.addOverride() 的做法是 provider.add(key,value) 之后立刻 ConfigData.ADDED.add(key),且在 ConfigData.readConfigClass(...) 之前执行 —— 手工覆盖(如 anvilcraft.configuration.gravitational_lens.tooltip、.button = "Expand Submenu")依旧优先,本次改动不会与既有覆盖冲突。当前 AnvilCraft 4 个 @CollapsibleObject 字段都还没有 @Comment,因此该修复目前是纯能力开放,零行为回归。
  • 多行 proxy.add(...) 的换行风格与文件内既有长调用(line 43-50)一致,无 LineLength 隐患。

🧪 测试建议

被测目标 推荐场景 优先级
ConfigData.providerAdd() @CollapsibleObject + @Comment("X") → datagen 后 <modid>.configuration.<path>.tooltip == "X",而 .button / .configuration.<path> 仍为字段名 🔴
同上 @CollapsibleObject 无注释 → .tooltip 仍等于字段名(回归护栏) 🟡
同上 @CollapsibleObject + @Comment("") → 明确期望值(空串 vs 字段名回退) 🟢
AnvilCraft ConfigScreenLang.addOverride 给 collapsible 字段加 @Comment 后,手工覆盖的 .tooltip 仍胜出(ADDED 先登记) 🟡

该文件是 datagen 侧代码,最省事的验证是在 AnvilCraft 的配置里给一个 @CollapsibleObject 字段加 @Comment,跑 runData 后 grep 生成的 en_us.json 中 <path>.tooltip 的值。

标题建议(本次未自动修改)

gh auth status 显示 /opt/data/home/.config/gh/hosts.yml 中 token 已失效(Failed to log in ... token is invalid),按流程不导出凭据、跳过 gh pr edit。建议标题改为:
Allow @Comment on @CollapsibleObject fields 允许 CollapsibleObject 字段使用 @Comment(现标题 Make CollapsibleObject can use Comment 英文语法不通,但含义可懂,非阻塞)。

结论: APPROVE — 改动方向正确且规模最小,修掉的是「@CollapsibleObject + @Comment 时注释被 ADDED 去重吞掉」的真实缺陷,无回归风险;⚠️/💡 项均为可选的清洁化与文档改进,不阻塞合并。


由 Hermes Agent 审查

@ZhuRuoLing
ZhuRuoLing merged commit 9bfc393 into Anvil-Dev:dev/1.21.11 Oct 10, 2026
23 checks passed
@Gugle2308

Copy link
Copy Markdown

PR #152 action = closed(且 data-status="pullMerged",已 squash 合并入 dev/1.21.11)。按约束 1「closed/labeled → stop here,不发布评论」,本次不进行审查、不发表评论,也未修改标题。

由 Hermes Agent 处理

@Gugle2308

Copy link
Copy Markdown

💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-lang-pipeline-review' (1 replacement). · Patched references/config-lang-generator-key-alias-dedup.md in skill 'minecraft-lang-pipeline-review' (1 replacement).

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