描述
项目存在多处代码质量问题和残留文件,虽然没有阻断功能,但长期来看会降低可维护性。
1. 零测试覆盖
仓库中没有任何 *_test.go 文件。核心逻辑——Engine Install/Uninstall/去重/重试、Manifest 解析(YAML + TXT)、Config 合并/校验——全部无法通过自动化测试验证。
| 需要测试的包 |
关键逻辑 |
internal/engine/ |
安装/卸载循环、去重、重试、Context 取消、进度回调 |
internal/manifest/ |
YAML/TXT 格式解析、BOM 处理、行内注释、去重 |
internal/backend/ |
winget 输出解析、退出码映射 |
internal/ui/ |
三种 Renderer 输出 |
2. src/ 死目录(未跟踪)
src/ 目录包含 13 个空 Go 脚手架子目录,全部未跟踪(untracked),来自早期项目尝试。不会影响构建,但会干扰 go list ./... 等操作。
3. bin/ 孤儿二进制
bin/ 目录包含 3 个预编译的 .exe 文件,在仓库中占用约 30MB 空间,但对应的源代码不在本仓库中。
4. 缺少 .gitignore
没有 .gitignore 文件,以下构建产物不会被忽略:
sis.exe / sis-windows-amd64.exe — Go 编译输出
.sis.json — 本地配置文件(用户在项目中创建后可能误提交)
*.backup — 安装脚本创建的备份文件
5. go vet 未集成到 CI
AGENTS.md 声称 CI 会运行 go vet ./...,但实际 ci.yml 中只包含 go build 步骤,没有 lint/vet 步骤。
影响
- 任何重构都存在无测试保护的回归风险
src/ 和 bin/ 增加仓库体积,干扰开发者认知
- 缺少
.gitignore 增加误提交构建产物的风险
- CI 无法捕获代码质量问题
修复方案
添加测试(高优先级)
使用 Go 标准库 testing 为基础层(manifest 解析、engine 逻辑)编写单元测试。参考 test_manifest_*.yaml 和 test_manifest_txt.txt 作为测试数据:
// internal/manifest/parser_test.go 示例
func TestParseYAML_ValidFile(t *testing.T) {
m, err := ParseManifest("../../test_manifest_valid.yaml")
if err != nil {
t.Fatal(err)
}
if len(m.Packages) != 3 {
t.Errorf("expected 3 packages, got %d", len(m.Packages))
}
}
清理残留文件
git rm -r --cached src/
rm -rf src/
rm -rf bin/
添加 .gitignore
# Go build output
sis.exe
sis-windows-amd64.exe
*.exe
# Local config
.sis.json
# Backup
*.backup
# IDE
.idea/
.vscode/
*.swp
CI 加入 vet
- name: Vet
run: go vet ./...
优先级
P3 — 清理 — 不影响当前功能,但持续积累会增加维护成本
描述
项目存在多处代码质量问题和残留文件,虽然没有阻断功能,但长期来看会降低可维护性。
1. 零测试覆盖
仓库中没有任何
*_test.go文件。核心逻辑——Engine Install/Uninstall/去重/重试、Manifest 解析(YAML + TXT)、Config 合并/校验——全部无法通过自动化测试验证。internal/engine/internal/manifest/internal/backend/internal/ui/2.
src/死目录(未跟踪)src/目录包含 13 个空 Go 脚手架子目录,全部未跟踪(untracked),来自早期项目尝试。不会影响构建,但会干扰go list ./...等操作。3.
bin/孤儿二进制bin/目录包含 3 个预编译的.exe文件,在仓库中占用约 30MB 空间,但对应的源代码不在本仓库中。4. 缺少
.gitignore没有
.gitignore文件,以下构建产物不会被忽略:sis.exe/sis-windows-amd64.exe— Go 编译输出.sis.json— 本地配置文件(用户在项目中创建后可能误提交)*.backup— 安装脚本创建的备份文件5.
go vet未集成到 CIAGENTS.md 声称 CI 会运行
go vet ./...,但实际ci.yml中只包含go build步骤,没有 lint/vet 步骤。影响
src/和bin/增加仓库体积,干扰开发者认知.gitignore增加误提交构建产物的风险修复方案
添加测试(高优先级)
使用 Go 标准库
testing为基础层(manifest 解析、engine 逻辑)编写单元测试。参考test_manifest_*.yaml和test_manifest_txt.txt作为测试数据:清理残留文件
添加
.gitignoreCI 加入 vet
优先级
P3 — 清理 — 不影响当前功能,但持续积累会增加维护成本