Skip to content

贡献指南

感谢你对 SuperSpec 的关注!我们欢迎各种形式的贡献。

贡献方式

1. 报告问题

如果你发现了 Bug 或有功能建议:

  1. 先搜索 现有 Issues,避免重复
  2. 创建新 Issue,使用合适的模板
  3. 提供尽可能详细的信息

Bug 报告应包含:

  • SuperSpec 版本
  • Node.js 版本
  • 操作系统
  • 复现步骤
  • 期望行为 vs 实际行为

2. 参与讨论

3. 改进文档

文档贡献非常有价值:

  • 修正错误和拼写
  • 改进示例代码
  • 添加更多用例说明
  • 翻译文档

4. 提交代码

修复 Bug 或添加新功能。

开发环境设置

前置条件

  • Node.js 18+
  • pnpm 8+
  • Git

克隆仓库

bash
git clone https://github.com/asasugar/SuperSpec.git
cd SuperSpec

安装依赖

bash
pnpm install

构建项目

bash
pnpm build

本地链接

bash
# 在 SuperSpec 目录
pnpm dev

项目结构

SuperSpec/
├── packages/
│   └── cli/              # CLI 工具主包
│       ├── src/
│       │   ├── commands/ # 命令实现
│       │   ├── utils/    # 工具函数
│       │   └── index.ts  # 入口
│       └── templates/    # 模板文件
│           ├── en/       # 英文模板
│           └── zh/       # 中文模板
├── docs/                 # 文档站点
└── examples/             # 示例项目

贡献流程

1. Fork 仓库

点击 GitHub 上的 Fork 按钮。

2. 创建分支

bash
git checkout -b feature/my-feature
# 或
git checkout -b hotfix/my-fix

分支命名规范:

  • feature/xxx - 新功能
  • hotfix/xxx - Bug 修复
  • docs/xxx - 文档更新
  • refactor/xxx - 重构

3. 开发

进行你的修改,确保:

  • 遵循代码风格
  • 添加必要的测试
  • 更新相关文档

4. 提交

bash
git add .
git commit -m "feat: add new feature"

提交消息规范:

<type>(<scope>): <subject>

<body>

<footer>

类型 (type):

  • feat - 新功能
  • fix - Bug 修复
  • docs - 文档
  • style - 格式调整
  • refactor - 重构
  • test - 测试
  • chore - 构建/工具

示例:

feat(cli): add sync command

Add the sync command to save git changes to context.md
for Vibe Coding support.

Closes #123

5. 推送

bash
git push origin feature/my-feature

6. 创建 Pull Request

  1. 前往你的 Fork 仓库
  2. 点击 "New Pull Request"
  3. 选择目标分支
  4. 填写 PR 描述

PR 描述应包含:

  • 变更说明
  • 关联的 Issue
  • 测试方法
  • 截图(如有 UI 变更)

代码风格

TypeScript

  • 使用 ESLint 配置
  • 使用 Biome 格式化
  • 严格的 TypeScript 类型
bash
# 检查代码风格,并自动修复
pnpm check

命名规范

  • 文件名:kebab-case(my-command.ts
  • 类名:PascalCase(MyCommand
  • 函数/变量:camelCase(myFunction
  • 常量:UPPER_SNAKE_CASE(MAX_LINE_COUNT

注释

  • 公共 API 必须有 JSDoc
  • 复杂逻辑添加行内注释
  • 使用英文注释
typescript
/**
 * Creates a new change with the specified name.
 * @param name - The name of the change
 * @param options - Creation options
 * @returns The created change object
 */
export function createChange(name: string, options: CreateOptions): Change {
  // Validate name format
  if (!isValidName(name)) {
    throw new Error('Invalid change name');
  }
  // ...
}

发布流程

维护者负责发布。使用 Changesets 管理版本:

手动发布

bash
# 添加 changeset
pnpm changeset

# 版本更新
pnpm changeset version

# 发布
pnpm changeset publish

changeset-release skill 一键发布

bash
你: /changeset-release

行为准则

核心原则:

  • 尊重他人
  • 建设性沟通
  • 包容多样性

获得帮助

感谢你的贡献!

基于 MIT 许可发布