|
| 1 | +# 贡献指南 |
| 2 | + |
| 3 | +感谢你对《现代嵌入式 C++ 教程》的关注!我们欢迎任何形式的贡献,包括但不限于:修正错别字、改进代码示例、完善现有内容、添加新章节等。 |
| 4 | + |
| 5 | +## 快速开始 |
| 6 | + |
| 7 | +1. Fork 本仓库 |
| 8 | +2. 创建你的特性分支 (`git checkout -b feature/amazing-feature`) |
| 9 | +3. 提交更改 (`git commit -m '添加某功能'`) |
| 10 | +4. 推送到分支 (`git push origin feature/amazing-feature`) |
| 11 | +5. 创建 Pull Request |
| 12 | + |
| 13 | +## 文章规范 |
| 14 | + |
| 15 | +### 文章结构 |
| 16 | + |
| 17 | +每篇文章应遵循以下结构(详见 `.templates/article-template.md`): |
| 18 | + |
| 19 | +```markdown |
| 20 | +--- |
| 21 | +# [FRONTMATTER 元数据] |
| 22 | +--- |
| 23 | + |
| 24 | +# 标题 |
| 25 | + |
| 26 | +## 引言 |
| 27 | +## 核心概念 |
| 28 | +## 代码示例 |
| 29 | +## 实战应用 |
| 30 | +## 注意事项 |
| 31 | +## 小结 |
| 32 | +## 练习(可选) |
| 33 | +## 参考资源 |
| 34 | +``` |
| 35 | + |
| 36 | +### Frontmatter 元数据 |
| 37 | + |
| 38 | +每篇文章必须包含以下元数据: |
| 39 | + |
| 40 | +| 字段 | 必填 | 说明 | |
| 41 | +|------|------|------| |
| 42 | +| `title` | 是 | 文章标题 | |
| 43 | +| `description` | 是 | 一句话描述文章内容 | |
| 44 | +| `chapter` | 是 | 所属章节 (0-10) | |
| 45 | +| `order` | 是 | 在章节中的顺序 | |
| 46 | +| `tags` | 是 | 标签列表 | |
| 47 | +| `difficulty` | 否 | 难度:beginner/intermediate/advanced | |
| 48 | +| `reading_time_minutes` | 否 | 预计阅读时间(分钟) | |
| 49 | +| `prerequisites` | 否 | 前置知识 | |
| 50 | +| `related` | 否 | 相关文章 | |
| 51 | +| `cpp_standard` | 否 | 涉及的 C++ 标准 | |
| 52 | + |
| 53 | +### 标签规范 |
| 54 | + |
| 55 | +使用以下标签分类: |
| 56 | + |
| 57 | +**概念类**: |
| 58 | +- `RAII`、`移动语义`、`零开销抽象`、`编译期计算`、`类型安全` |
| 59 | + |
| 60 | +**语言特性**: |
| 61 | +- `constexpr`、`lambda`、`CRTP`、`concepts`、`coroutine` |
| 62 | + |
| 63 | +**模式**: |
| 64 | +- `对象池`、`状态机`、`工厂模式`、`策略模式` |
| 65 | + |
| 66 | +**容器**: |
| 67 | +- `array`、`span`、`vector`、`map` |
| 68 | + |
| 69 | +**智能指针**: |
| 70 | +- `unique_ptr`、`shared_ptr`、`weak_ptr`、`intrusive_ptr` |
| 71 | + |
| 72 | +### 写作风格 |
| 73 | + |
| 74 | +1. **语言**:使用清晰、简洁的中文 |
| 75 | +2. **术语**:首次出现的技术术语应附英文原文 |
| 76 | +3. **代码注释**:使用中文注释 |
| 77 | +4. **标题层级**:不超过 4 级(`####`) |
| 78 | +5. **篇幅**:每篇文章控制在 1500-3000 字 |
| 79 | + |
| 80 | +## 代码规范 |
| 81 | + |
| 82 | +### C++ 代码风格 |
| 83 | + |
| 84 | +1. 使用现代 C++ 风格(C++11 及以上) |
| 85 | +2. 优先使用 `auto`、范围 for 循环等现代特性 |
| 86 | +3. 遵循嵌入式最佳实践: |
| 87 | + - 避免动态内存分配(除非明确说明) |
| 88 | + - 注意代码体积和性能影响 |
| 89 | + - 标注适用的 C++ 标准 |
| 90 | + |
| 91 | +```cpp |
| 92 | +// 好的示例 |
| 93 | +// Platform: STM32F4 |
| 94 | +// Standard: C++17 |
| 95 | + |
| 96 | +#include <array> |
| 97 | + |
| 98 | +void process_data(const std::array<uint32_t, 10>& data) { |
| 99 | + for (const auto& value : data) { |
| 100 | + // 处理数据 |
| 101 | + } |
| 102 | +} |
| 103 | +``` |
| 104 | +
|
| 105 | +### 代码格式 |
| 106 | +
|
| 107 | +- 使用 4 空格缩进 |
| 108 | +- 大括号另起一行(Allman 风格) |
| 109 | +- 函数名使用 snake_case |
| 110 | +- 类名使用 PascalCase |
| 111 | +
|
| 112 | +## 添加新文章 |
| 113 | +
|
| 114 | +1. 复制 `.templates/article-template.md` 作为起点 |
| 115 | +2. 填写完整的 frontmatter |
| 116 | +3. 更新对应章节的 `index.md`,添加新文章链接 |
| 117 | +4. 确保代码示例可编译 |
| 118 | +
|
| 119 | +## 文件命名 |
| 120 | +
|
| 121 | +文章文件名应清晰描述内容: |
| 122 | +
|
| 123 | +``` |
| 124 | +tutorial/核心:现代嵌入式C++教程/Chapter6/ |
| 125 | +├── 1 RAII在外设管理的作用.md |
| 126 | +├── 2 unique_ptr.md |
| 127 | +└── 3 shared_ptr.md |
| 128 | +``` |
| 129 | +
|
| 130 | +## 发布前检查清单 |
| 131 | +
|
| 132 | +提交 PR 前,请确认: |
| 133 | +
|
| 134 | +- [ ] Frontmatter 元数据完整 |
| 135 | +- [ ] 代码示例可编译 |
| 136 | +- [ ] 无错别字 |
| 137 | +- [ ] 内部链接有效 |
| 138 | +- [ ] 标签使用规范 |
| 139 | +- [ ] 遵循文章模板结构 |
| 140 | +- [ ] 更新了章节索引(如适用) |
| 141 | +
|
| 142 | +## 本地预览 |
| 143 | +
|
| 144 | +在提交前,建议本地预览文档: |
| 145 | +
|
| 146 | +```bash |
| 147 | +# 安装依赖 |
| 148 | +pip install mkdocs-material mkdocs-awesome-pages-plugin mkdocs-git-revision-date-localized-plugin |
| 149 | +
|
| 150 | +# 启动本地服务器 |
| 151 | +mkdocs serve |
| 152 | +
|
| 153 | +# 访问 http://127.0.0.1:8000 |
| 154 | +``` |
| 155 | + |
| 156 | +## 代码审查流程 |
| 157 | + |
| 158 | +1. 所有 PR 需要至少一位维护者审核 |
| 159 | +2. CI 检查必须通过(markdown lint、链接检查) |
| 160 | +3. 审核通过后,维护者将合并代码 |
| 161 | + |
| 162 | +## 行为准则 |
| 163 | + |
| 164 | +- 尊重所有贡献者 |
| 165 | +- 建设性的反馈和讨论 |
| 166 | +- 专注于对项目最有利的事情 |
| 167 | + |
| 168 | +## 获取帮助 |
| 169 | + |
| 170 | +如有问题,请: |
| 171 | +- 提交 Issue |
| 172 | +- 查看 [GitHub Discussions](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP/discussions) |
| 173 | +- 发送邮件至:725610365@qq.com |
| 174 | + |
| 175 | +--- |
| 176 | + |
| 177 | +再次感谢你的贡献! |
0 commit comments