This commit is contained in:
@@ -18,7 +18,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* 将 ClassChangeReport 渲染为企业微信 Markdown 并发送(或仅日志输出)。
|
||||
* <p>
|
||||
* 使用 webhook {@code markdown}(v1):引用块 + 换行排版,三色 font(info/comment/warning)。
|
||||
* v1 不支持无序列表,各项以 {@code >标签:值} 分行展示。
|
||||
* v1 不支持无序列表,各项以 {@code >标签: 值} 分行展示(冒号后两空格)。
|
||||
*/
|
||||
public class WeComNotifier {
|
||||
private static final int MAX_LENGTH = 3800;
|
||||
@@ -82,26 +82,26 @@ public class WeComNotifier {
|
||||
return truncate(sb.toString());
|
||||
}
|
||||
|
||||
/** 头部元信息,每项一行引用 */
|
||||
/** 头部元信息,每项一行引用(加粗) */
|
||||
private void appendHeader(StringBuilder sb, ClassChangeReport report,
|
||||
String modifier, String modifyTime) {
|
||||
sb.append(quoteKv("变更对象", colorInfo(safe(report.getClassName()))
|
||||
sb.append(quoteKvBold("变更对象", colorInfo(safe(report.getClassName()))
|
||||
+ "(" + report.getClassType().getLabel() + ")")).append("\n");
|
||||
sb.append(quoteKv("修改人", colorComment(modifier))).append("\n");
|
||||
sb.append(quoteKv("时间", colorComment(modifyTime))).append("\n");
|
||||
sb.append(quoteKv("路径", colorComment(report.getSourceFile()))).append("\n");
|
||||
sb.append(quoteKvBold("修改人", colorComment(modifier))).append("\n");
|
||||
sb.append(quoteKvBold("时间", colorComment(modifyTime))).append("\n");
|
||||
sb.append(quoteKvBold("路径", colorComment(report.getSourceFile()))).append("\n");
|
||||
}
|
||||
|
||||
/** 渲染删除 / 重命名 / 字段变更 */
|
||||
private void appendChangeDetails(StringBuilder sb, ClassChangeReport report) {
|
||||
if (report.isDeleted()) {
|
||||
sb.append(quoteLine(colorWarning("[已删除]") + " "
|
||||
sb.append(quoteLine(colorWarning("[已删除]") + " "
|
||||
+ colorComment("该类文件已被移除"))).append("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (report.isRenamed()) {
|
||||
sb.append(quoteLine(colorWarning("[类名变更]") + " "
|
||||
sb.append(quoteLine(colorWarning("[类名变更]") + " "
|
||||
+ colorComment(safe(report.getOldClassName())) + " → "
|
||||
+ colorInfo(safe(report.getClassName())))).append("\n");
|
||||
}
|
||||
@@ -112,8 +112,9 @@ public class WeComNotifier {
|
||||
}
|
||||
|
||||
if (!report.getFieldChanges().isEmpty()) {
|
||||
sb.append(quoteLine(colorComment("共 "
|
||||
+ report.getFieldChanges().size() + " 项字段变更"))).append("\n\n");
|
||||
int count = report.getFieldChanges().size();
|
||||
sb.append(quoteLine("**共 " + colorWarning(String.valueOf(count)) + " 项变更**"))
|
||||
.append("\n\n");
|
||||
for (int i = 0; i < report.getFieldChanges().size(); i++) {
|
||||
if (i > 0) {
|
||||
sb.append("\n");
|
||||
@@ -204,10 +205,7 @@ public class WeComNotifier {
|
||||
return quoteLine(inlineCode(safe(line)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 单条字段变更:引用块多行,字段间空行分隔。
|
||||
* 避免 font 内嵌 bold。
|
||||
*/
|
||||
/** 单条字段变更:标签、说明、类型合并为一行,字段间空行分隔 */
|
||||
private String formatFieldChange(FieldChange change) {
|
||||
String fieldName = inlineCode(safe(change.getFieldName()));
|
||||
String desc = change.getDescription() == null ? "" : change.getDescription();
|
||||
@@ -217,21 +215,19 @@ public class WeComNotifier {
|
||||
|
||||
switch (change.getKind()) {
|
||||
case ADDED:
|
||||
return quoteLine(tagAdded() + " " + fieldName) + "\n"
|
||||
+ quoteKv("说明", descPart);
|
||||
return quoteLine(tagAdded() + " " + fieldName + " 说明: " + descPart);
|
||||
case REMOVED:
|
||||
return quoteLine(tagRemoved() + " " + fieldName) + "\n"
|
||||
+ quoteKv("说明", descPart);
|
||||
return quoteLine(tagRemoved() + " " + fieldName + " 说明: " + descPart);
|
||||
case MODIFIED:
|
||||
default:
|
||||
StringBuilder block = new StringBuilder();
|
||||
block.append(quoteLine(tagModified() + " " + fieldName)).append("\n");
|
||||
block.append(quoteKv("说明", descPart));
|
||||
StringBuilder line = new StringBuilder();
|
||||
line.append(tagModified()).append(" ").append(fieldName)
|
||||
.append(" 说明: ").append(descPart);
|
||||
String detail = change.getDetail();
|
||||
if (detail != null && !detail.isBlank()) {
|
||||
block.append("\n").append(quoteKv("类型", formatTypeChange(detail)));
|
||||
line.append(" 类型: ").append(formatTypeChange(detail));
|
||||
}
|
||||
return block.toString();
|
||||
return quoteLine(line.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,9 +254,14 @@ public class WeComNotifier {
|
||||
return colorWarning("[修改]");
|
||||
}
|
||||
|
||||
/** 引用行:{@code >标签:值} */
|
||||
/** 引用行:{@code >标签: 值}(冒号后两空格) */
|
||||
private String quoteKv(String key, String value) {
|
||||
return "> " + key + ":" + value;
|
||||
return "> " + key + ": " + value;
|
||||
}
|
||||
|
||||
/** 加粗引用行:用于类变更通知头部 */
|
||||
private String quoteKvBold(String key, String value) {
|
||||
return "> **" + key + ": " + value + "**";
|
||||
}
|
||||
|
||||
/** 纯引用行 */
|
||||
|
||||
Reference in New Issue
Block a user