首先,感谢您考虑为cmd4coder做出贡献!正是像您这样的人使cmd4coder成为如此出色的工具。
本项目及其所有参与者都受行为准则约束。参与即表示您同意遵守其条款。
如果您发现了Bug,请创建一个Issue并提供详细信息:
- Bug的清晰描述
- 复现步骤
- 预期行为和实际行为
- 您的环境信息(操作系统、Go版本等)
- 相关日志或截图
我们欢迎新功能的想法!请创建一个Issue并说明:
- 功能的详细描述
- 为什么需要这个功能
- 如何实现(可选)
- 可能的替代方案
文档永远不嫌完善!您可以:
- 修复错别字或语法错误
- 改进现有说明
- 添加更多示例
- 翻译文档
这是最常见的贡献方式!请参阅命令数据贡献章节。
浏览Issue列表,查找标记为good first issue或help wanted的问题。
- Go 1.21 或更高版本
- Git
- 代码编辑器(推荐VS Code、GoLand或Vim)
# Fork仓库后克隆您的Fork
git clone https://github.com/YOUR_USERNAME/cmd4coder.git
cd cmd4coder
# 添加上游仓库
git remote add upstream https://github.com/cmd4coder/cmd4coder.gitgo mod download
go mod tidy# 运行所有测试
go test ./...
# 运行测试并查看覆盖率
go test -cover ./...
# 运行竞态检测
go test -race ./...# Linux/macOS
./build.sh
# Windows
.\build.ps1
# 或使用go build
go build -o bin/cmd4coder ./cmd/cli# CLI模式 (开发阶段推荐使用 go run)
go run ./cmd/cli list -d ./data
# TUI模式
go run ./cmd/cli -d ./data
# 构建后使用
./bin/cmd4coder list -d ./data # Linux/macOS
.\build\cmd4coder-v1.0.0-windows-amd64.exe list -d ./data # Windows点击GitHub页面右上角的"Fork"按钮。
git checkout -b feature/your-feature-name
# 或
git checkout -b fix/your-bug-fix分支命名建议:
feature/- 新功能fix/- Bug修复docs/- 文档更新refactor/- 代码重构test/- 测试相关
按照代码规范进行开发。
git add .
git commit -m "类型: 简短描述
详细描述(可选)
关联Issue(可选): #123"提交信息类型:
feat: 新功能fix: Bug修复docs: 文档更新style: 代码格式(不影响功能)refactor: 重构test: 测试相关chore: 构建/工具相关
示例:
feat: 添加TUI交互式界面
实现了基于bubbletea的TUI界面,支持:
- 三栏布局
- 分类浏览
- 命令搜索
- 收藏功能
Closes #45
git push origin feature/your-feature-name- 访问您的Fork仓库页面
- 点击"Pull Request"按钮
- 填写PR描述:
- 简要说明更改内容
- 关联相关Issue
- 说明测试情况
- 添加截图(如适用)
维护者会审查您的PR并可能提出修改建议。请及时回应并进行必要的更新。
我们遵循Go官方代码规范和最佳实践:
-
代码格式化: 使用
gofmt或goimportsgo fmt ./...
-
代码检查: 使用
go vetgo vet ./...
-
Lint检查: 使用
golangci-lint(推荐)golangci-lint run
- 包名: 小写,单个单词,如
model、service - 文件名: 小写,下划线分隔,如
command_service.go - 变量/函数: 驼峰命名,如
commandList、GetCommand - 常量: 大写驼峰或全大写,如
MaxCacheSize、VERSION - 接口: 通常以
-er结尾,如Commander、Loader
-
包注释: 每个包都应有包级注释
// Package model 定义核心数据模型 package model
-
函数注释: 公开函数必须有注释
// GetCommand 根据名称获取命令信息 // 如果找不到命令,返回nil和错误 func GetCommand(name string) (*Command, error) { // ... }
-
复杂逻辑注释: 复杂算法或逻辑应添加解释
-
不要忽略错误
// ❌ 错误示例 data, _ := loadData() // ✅ 正确示例 data, err := loadData() if err != nil { return fmt.Errorf("failed to load data: %w", err) }
-
使用
%w包装错误以保留错误链 -
错误信息应该小写开头,不以句号结尾
-
单元测试: 新功能必须包含测试
func TestGetCommand(t *testing.T) { // 测试代码 }
-
测试命名:
Test<FunctionName>格式 -
覆盖率: 新代码应保持≥80%覆盖率
-
表格驱动测试: 推荐使用表格驱动测试
func TestAdd(t *testing.T) { tests := []struct{ name string a, b int expected int }{ {"positive", 1, 2, 3}, {"negative", -1, -2, -3}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := Add(tt.a, tt.b) if result != tt.expected { t.Errorf("got %d, want %d", result, tt.expected) } }) } }
添加或修改命令数据是最常见的贡献方式。
每个命令应包含以下字段:
- name: command-name # 必填: 命令名称
category: "类别/子类别" # 必填: 所属分类
install_required: true/false # 必填: 是否需要单独安装
description: "简短描述" # 必填: 功能简述
platforms: # 必填: 支持的平台
- linux
- darwin
- windows
usage: # 必填: 使用方式
- "command [选项] [参数]"
options: # 推荐: 常用选项
- flag: "-l"
description: "长格式显示"
examples: # 必填: 使用示例(至少2个)
- command: "command -l"
description: "示例说明"
output: "预期输出(可选)"
risks: # 推荐: 风险说明
- level: low/medium/high/critical
description: "风险描述"
notes: # 可选: 注意事项
- "注意事项1"
install_method: "安装方法" # 如果install_required为true则必填
version_check: "版本检查命令" # 推荐
related_commands: # 可选: 相关命令
- related-command
references: # 可选: 参考链接
- "https://example.com/docs"| 字段 | 说明 | 示例 |
|---|---|---|
| name | 命令名称 | ls、docker run |
| category | 分类路径 | 操作系统/通用Linux命令 |
| install_required | 是否需安装 | true / false |
| description | 简短描述 | 列出目录内容 |
| platforms | 支持平台 | linux, darwin, windows |
| usage | 使用方式 | ls [选项] [目录] |
| examples | 使用示例 | 至少提供2个实际示例 |
- 准确性: 所有信息必须准确无误
- 完整性: 必填字段必须填写
- 实用性: 提供实际有用的示例
- 风险标注: 危险命令必须标注风险
- 格式规范: 严格遵循YAML格式
提交前请运行数据验证工具:
go run ./cmd/validator -d ./data确保:
- ✅ YAML格式正确
- ✅ 所有必填字段存在
- ✅ 风险级别正确
- ✅ 无重复命令
- 命令信息准确无误
- 所有必填字段已填写
- 提供了至少2个实用示例
- 危险命令已标注风险
- YAML格式正确(无语法错误)
- 运行验证工具通过
- 文件编码为UTF-8(无BOM)
使用以下模板报告Bug:
### 问题描述
简要描述遇到的问题
### 复现步骤
1. 执行命令 `...`
2. 看到错误 `...`
3. ...
### 预期行为
描述您期望发生什么
### 实际行为
描述实际发生了什么
### 环境信息
- OS: [e.g. Ubuntu 22.04]
- Go版本: [e.g. 1.21.0]
- cmd4coder版本: [e.g. v1.0.0]
### 日志和截图
如果适用,添加相关日志或截图
### 附加信息
其他任何相关信息使用以下模板提出新功能:
### 功能描述
清晰描述您想要的功能
### 使用场景
为什么需要这个功能?它解决什么问题?
### 预期效果
描述功能应该如何工作
### 可能的实现方案
如果您有实现想法,请分享
### 替代方案
是否考虑过其他解决方案?
### 附加信息
其他任何相关信息或参考如有疑问,可以通过以下方式联系:
感谢所有为cmd4coder做出贡献的人!
通过贡献代码,您同意您的贡献将按照项目的MIT许可证进行许可。