fix(minecraft): 修复中文环境下 Minecraft 更新日志 Wiki 链接无效 [Composer]#3228
fix(minecraft): 修复中文环境下 Minecraft 更新日志 Wiki 链接无效 [Composer]#3228cbglzt-alt wants to merge 1 commit into
Conversation
PCL-Community#3074 引入多语言 Wiki 后,中文后缀缺少 /w/ 路径前缀, 拼接出无效 URL 导致浏览器无法跳转。 Close PCL-Community#3223 Co-authored-by: Cursor <cursoragent@cursor.com>
Reviewer's guide (collapsed on small PRs)Reviewer's Guide通过确保 Wiki URL 后缀始终包含 GetWikiUrlSuffix 逻辑更新的流程图flowchart TD
A[GetWikiUrlSuffix gameVersion] --> B[GetLanguageCode]
B --> C{langCode starts with zh}
C -- no --> D[return /w/Special:Search?search=Java Edition formattedVersion]
C -- yes --> E{gameVersion.Contains w with StringComparison.Ordinal}
E -- yes --> F[return /w/formattedVersion]
E -- no --> G[return /w/Java版formattedVersion]
文件级变更
针对关联 Issue 的评估
可能相关的 Issue
Tips and commands与 Sourcery 交互
自定义你的体验访问你的控制面板 来:
获取帮助Original review guide in EnglishReviewer's guide (collapsed on small PRs)Reviewer's GuideFixes the Minecraft update log wiki URL for Chinese locale by ensuring the wiki URL suffix always includes the Flow diagram for GetWikiUrlSuffix logic updateflowchart TD
A[GetWikiUrlSuffix gameVersion] --> B[GetLanguageCode]
B --> C{langCode starts with zh}
C -- no --> D[return /w/Special:Search?search=Java Edition formattedVersion]
C -- yes --> E{gameVersion.Contains w with StringComparison.Ordinal}
E -- yes --> F[return /w/formattedVersion]
E -- no --> G[return /w/Java版formattedVersion]
File-Level Changes
Assessment against linked issues
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - 我发现了 1 个问题,并给出了一些整体性的反馈:
- 调用
gameVersion.Contains('w', StringComparison.Ordinal)并不是 .NET 中标准的stringAPI 签名;如果这不是你们代码库里的扩展方法,就应该改成gameVersion.Contains("w", StringComparison.Ordinal),或者改回Contains('w'),以避免编译/运行时问题。 - 使用
gameVersion.Contains('w', …)这个启发式逻辑来决定是否添加/w/前缀比较脆弱(例如,任何包含字母w的版本字符串都会被当成完整的 wiki 路径);建议使用更健壮的检查方式,比如检测是否已有/w/前缀,或匹配已知的 URL 模式。
供 AI Agents 使用的提示
Please address the comments from this code review:
## Overall Comments
- The call `gameVersion.Contains('w', StringComparison.Ordinal)` is not a standard `string` API signature in .NET; if this isn’t an extension method in your codebase, it should be changed to `gameVersion.Contains("w", StringComparison.Ordinal)` or back to `Contains('w')` to avoid compilation/runtime issues.
- The heuristic `gameVersion.Contains('w', …)` to decide whether to prepend `/w/` is quite brittle (e.g., any version string containing the letter `w` will be treated as a full wiki path); consider a more robust check, such as detecting an existing `/w/` prefix or matching a known URL pattern instead.
## Individual Comments
### Comment 1
<location path="PCL.Core/Minecraft/McFormatter.cs" line_range="54" />
<code_context>
return $"/w/Special:Search?search={Uri.EscapeDataString($"Java Edition {formattedVersion}")}";
- if (gameVersion.Contains('w')) return formattedVersion;
+ if (gameVersion.Contains('w', StringComparison.Ordinal)) return $"/w/{formattedVersion}";
- return "Java版" + formattedVersion;
</code_context>
<issue_to_address>
**issue (bug_risk):** The `Contains` overload used here is invalid for a `char` and `StringComparison` combination.
This overload won’t compile because `string.Contains(char)` doesn’t take a `StringComparison`. Use the string overload instead, e.g. `gameVersion.Contains("w", StringComparison.Ordinal)`, or drop `StringComparison` and keep `gameVersion.Contains('w')` if ordinal comparison isn’t required.
</issue_to_address>帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据这些反馈改进未来的评审。
Original comment in English
Hey - I've found 1 issue, and left some high level feedback:
- The call
gameVersion.Contains('w', StringComparison.Ordinal)is not a standardstringAPI signature in .NET; if this isn’t an extension method in your codebase, it should be changed togameVersion.Contains("w", StringComparison.Ordinal)or back toContains('w')to avoid compilation/runtime issues. - The heuristic
gameVersion.Contains('w', …)to decide whether to prepend/w/is quite brittle (e.g., any version string containing the letterwwill be treated as a full wiki path); consider a more robust check, such as detecting an existing/w/prefix or matching a known URL pattern instead.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The call `gameVersion.Contains('w', StringComparison.Ordinal)` is not a standard `string` API signature in .NET; if this isn’t an extension method in your codebase, it should be changed to `gameVersion.Contains("w", StringComparison.Ordinal)` or back to `Contains('w')` to avoid compilation/runtime issues.
- The heuristic `gameVersion.Contains('w', …)` to decide whether to prepend `/w/` is quite brittle (e.g., any version string containing the letter `w` will be treated as a full wiki path); consider a more robust check, such as detecting an existing `/w/` prefix or matching a known URL pattern instead.
## Individual Comments
### Comment 1
<location path="PCL.Core/Minecraft/McFormatter.cs" line_range="54" />
<code_context>
return $"/w/Special:Search?search={Uri.EscapeDataString($"Java Edition {formattedVersion}")}";
- if (gameVersion.Contains('w')) return formattedVersion;
+ if (gameVersion.Contains('w', StringComparison.Ordinal)) return $"/w/{formattedVersion}";
- return "Java版" + formattedVersion;
</code_context>
<issue_to_address>
**issue (bug_risk):** The `Contains` overload used here is invalid for a `char` and `StringComparison` combination.
This overload won’t compile because `string.Contains(char)` doesn’t take a `StringComparison`. Use the string overload instead, e.g. `gameVersion.Contains("w", StringComparison.Ordinal)`, or drop `StringComparison` and keep `gameVersion.Contains('w')` if ordinal comparison isn’t required.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| return $"/w/Special:Search?search={Uri.EscapeDataString($"Java Edition {formattedVersion}")}"; | ||
|
|
||
| if (gameVersion.Contains('w')) return formattedVersion; | ||
| if (gameVersion.Contains('w', StringComparison.Ordinal)) return $"/w/{formattedVersion}"; |
There was a problem hiding this comment.
issue (bug_risk): 这里使用的 Contains 重载对 char 和 StringComparison 的组合来说是无效的。
这个重载无法通过编译,因为 string.Contains(char) 不接受 StringComparison。请改用字符串重载,例如 gameVersion.Contains("w", StringComparison.Ordinal),或者如果不需要按 Ordinal 比较,就去掉 StringComparison 并保持 gameVersion.Contains('w')。
Original comment in English
issue (bug_risk): The Contains overload used here is invalid for a char and StringComparison combination.
This overload won’t compile because string.Contains(char) doesn’t take a StringComparison. Use the string overload instead, e.g. gameVersion.Contains("w", StringComparison.Ordinal), or drop StringComparison and keep gameVersion.Contains('w') if ordinal comparison isn’t required.
|
和 #3227 装车了 |
Summary
GetWikiUrlSuffix的中文路径补上/w/前缀,使 URL 与GetWikiBaseUrl()正确拼接Root cause
McUpdateLogShow改为GetWikiBaseUrl() + GetWikiUrlSuffix()拼接/w/...开头,中文后缀却返回Java版{version}(无/w/)https://zh.minecraft.wikiJava版1.21.1为无效 URL,Shell 仅启动浏览器进程而不导航Reproduction (before fix)
Verification (after fix)
https://zh.minecraft.wiki/w/Java版…Test plan
Close #3223
Made with Cursor
Summary by Sourcery
Bug Fixes:
/w/前缀,以便更新日志链接在浏览器中打开正确的页面。Original summary in English
Summary by Sourcery
Bug Fixes: