feat(cli): 新增 AI 智能 Commit Message 生成与多语言支持

- 新增 `git air msg` 命令,支持根据暂存区或历史 Diff 自动生成 Conventional Commits 提交说明
- 支持中、英、日、韩多语言自适应及通过 CLI/配置文件/环境变量进行定制
- 完善全局配置体系,新增 `commit_lang` 选项及相关单元测试
This commit is contained in:
unclesam committed 2026-08-22 16:54:44 +08:00
1 parent 4d9674831b
commit 6eda653db6
9 files changed
+457 -41

No files matched your search

+58
View File
@@ -0,0 +1,58 @@
package reviewer
import (
"strings"
"testing"
)
func TestDetectLanguage(t *testing.T) {
tests := []struct {
input string
expected string
}{
{"zh", "zh"},
{"ZH", "zh"},
{"zh-CN", "zh"},
{"中文", "zh"},
{"ja", "ja"},
{"ja-JP", "ja"},
{"Japanese", "ja"},
{"日本語", "ja"},
{"ko", "ko"},
{"ko-KR", "ko"},
{"한국어", "ko"},
{"en", "en"},
{"en-US", "en"},
{"English", "en"},
{"fr", "en"}, // 未预置语言回退到 en
}
for _, tt := range tests {
got := DetectLanguage(tt.input)
if got != tt.expected {
t.Errorf("DetectLanguage(%q) = %q, expected %q", tt.input, got, tt.expected)
}
}
}
func TestBuildCommitMsgPrompt(t *testing.T) {
langs := []struct {
lang string
expected string
}{
{"zh", "简体中文"},
{"ja", "日本語"},
{"ko", "한국어"},
{"en", "English"},
}
for _, tt := range langs {
prompt := BuildCommitMsgPrompt(tt.lang)
if !strings.Contains(prompt, tt.expected) {
t.Errorf("BuildCommitMsgPrompt(%q) 应包含语言名称 %q", tt.lang, tt.expected)
}
if !strings.Contains(prompt, "Conventional Commits") {
t.Errorf("BuildCommitMsgPrompt(%q) 应包含 Conventional Commits 说明", tt.lang)
}
}
}