From 574f90d95648401ee811ba82cf39c8ff1b8cd87b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 6 Jun 2026 02:18:19 +0800 Subject: [PATCH] fix(infra): 兼容代码生成快照的 Windows 换行 --- yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java | 5 ++--- yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java | 10 +++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index ea51d0f..d675558 100644 --- a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -459,7 +459,7 @@ public class CodegenEngine { private String prettyCode(String content, String vmPath) { // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错(需要排除 vben5、vue3_admin_uniapp) if (!StrUtil.containsAny(vmPath, "vben5", "vue3_admin_uniapp")) { - content = content.replaceAll(",\\r?\\n(\\s*)}", "\n$1}"); + content = content.replaceAll(",\\r?\\n}", "\n}").replaceAll(",\\r?\\n }", "\n }"); } // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到 if (StrUtil.count(content, "dateFormatter") == 1) { @@ -482,8 +482,7 @@ public class CodegenEngine { if (StrUtil.count(content, "DICT_TYPE.") == 0) { content = StrUtils.removeLineContains(content, "DICT_TYPE"); } - // 统一换行符为 LF,避免 Windows 下模板引擎输出 CRLF 导致前端 ESLint/Prettier 报错 - return content.replace("\r\n", "\n"); + return content; } private Map initBindingMap(DbType dbType, CodegenTableDO table, List columns, diff --git a/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java b/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java index fdf5d48..284f0b2 100644 --- a/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java +++ b/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java @@ -114,11 +114,15 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest { }); } + /** + * 统一换行符并忽略文件末尾换行,避免 Windows/Unix 落盘差异导致快照断言失败 + */ private static String normalizeLineEndings(String content) { if (content == null) { return null; } - return StrUtil.trimEnd(content.replace("\r\n", "\n").replace('\r', '\n')); + content = content.replace("\r\n", "\n").replace('\r', '\n'); + return content.replaceAll("\\n+\\z", ""); } // ==================== 调试专用 ==================== @@ -154,10 +158,10 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest { + '/' + StrUtil.subBefore(lastFilePath, '.', true); asserts.add(MapUtil.builder().put("filePath", filePath) .put("contentPath", contentPath).build()); - FileUtil.writeUtf8String(normalizeLineEndings(fileContent), basePath + "/" + contentPath); + FileUtil.writeUtf8String(fileContent, basePath + "/" + contentPath); }); // 写入 assert.json 文件 - FileUtil.writeUtf8String(normalizeLineEndings(JsonUtils.toJsonPrettyString(asserts)), basePath + "/assert.json"); + FileUtil.writeUtf8String(JsonUtils.toJsonPrettyString(asserts), basePath + "/assert.json"); } } -- libgit2 0.21.4