|
| 1 | +_中文_ | [English](CONTRIBUTING.md) |
| 2 | + |
| 3 | +# 如何参与贡献 |
| 4 | + |
| 5 | +**♥** 首先,非常感谢您愿意花时间阅读本指南、并了解如何为 Simple Robot 做出贡献! **♥** |
| 6 | + |
| 7 | +> [!note] |
| 8 | +> 本指南大部分内容与 [核心库](https://github.com/simple-robot/simpler-robot) |
| 9 | +> 的 **贡献指南** 类似。 |
| 10 | +
|
| 11 | +## 变得友好 |
| 12 | + |
| 13 | +不论是在提交反馈、提交贡献还是社区讨论,我们都应做到友好地对待一切。 |
| 14 | +不使用过激言语,不对他人进行人身攻击或言语骚扰,不歧视任何地区/国家/种族/性别,不违反公序良俗与法律道德。 |
| 15 | + |
| 16 | +## 我发现了 Bug |
| 17 | +### Issues |
| 18 | + |
| 19 | +如果您在KOOK组件库或官方维护的组件库中发现了一个 bug,那么首先您可以前往 |
| 20 | +[Issues](https://github.com/simple-robot/simbot-component-kook/issues/) |
| 21 | +中选择合适的分类并提交与此 bug 相关的详细信息 (包括使用的库版本、错误日志等); |
| 22 | + |
| 23 | +在反馈时,我们建议您使用 Markdown 语法[^about write] 来提高反馈内容的可读性与观感,这也可以帮助参与者快速阅读与定位问题所在。 |
| 24 | + |
| 25 | +[^about write]: [关于在 GitHub 上编写和设置格式](https://docs.github.com/zh/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/about-writing-and-formatting-on-github) |
| 26 | + |
| 27 | +### Pull Request |
| 28 | + |
| 29 | +如果您有兴趣与能力为我们贡献此 bug 的修复, |
| 30 | +那么欢迎您通过 [Pull Request](https://github.com/simple-robot/simbot-component-kook/pulls) 提交您的变更。 |
| 31 | +当您提交代码变更时,需要了解如下几点: |
| 32 | + |
| 33 | +**代码贡献** |
| 34 | + |
| 35 | +您可以在 [代码贡献](#代码贡献) 小节阅读到更多有关代码贡献的细节。 |
| 36 | + |
| 37 | +**参与者** |
| 38 | + |
| 39 | +包括核心库与官方组件库在内,它们都会在项目中存在配置参与者的地方。 |
| 40 | +本指南以KOOK组件库为例,在 `buildSrc/src/main/kotlin/P.kt` 中的如下代码内添加有关您的信息: |
| 41 | + |
| 42 | +```Kotlin |
| 43 | +override val developers: List<Developer> = developers { |
| 44 | + developer { |
| 45 | + ... |
| 46 | + } |
| 47 | + ... |
| 48 | + |
| 49 | + 此处添加您的信息 |
| 50 | +} |
| 51 | +``` |
| 52 | + |
| 53 | +## 讨论区贡献 |
| 54 | + |
| 55 | +在 [讨论区][讨论区] 留下你的疑问或回答, |
| 56 | +为其他来者留下一盏指路的明灯~ |
| 57 | + |
| 58 | +## 代码贡献 |
| 59 | +### 注释风格 |
| 60 | + |
| 61 | +KOOK组件库对源代码的注释有着一些约定。 |
| 62 | + |
| 63 | +* 要对所有访问级别为 `public`、`protected` 的内容 (包括类/接口、函数、属性等) |
| 64 | + 使用**中文**或**易懂的英文**编写较为细致的文档注释[^KDoc]。 |
| 65 | + 适当地添加文档 tag (例如 `@param`、`@throws`),不过如果在文档正文中已经提及那么也可省略。 |
| 66 | + |
| 67 | +* 内部访问级别 (例如 `private`、`internal`) 的内容,如果十分简单也可以不用编写完全细致的**文档注释**, |
| 68 | + 但应适当添加一些有助于其他开发者阅读与理解的解释性注释。 |
| 69 | + |
| 70 | +* 被重写的抽象函数,如果其含义没有变化,那么可以省略文档注释。 |
| 71 | + |
| 72 | +* 对于类和接口类型,如果是新增的内容,尽可能添加您的作者信息 (`@author`) 和版本信息 (`@since`)。 |
| 73 | + 不要添加非标准的 tag (比如 `@Date`、`@HelloWorld`)。 |
| 74 | + |
| 75 | +[^KDoc]: [Document Kotlin code: KDoc](https://kotlinlang.org/docs/kotlin-doc.html) |
| 76 | + |
| 77 | +### 代码风格 |
| 78 | + |
| 79 | +KOOK组件库对整体的代码风格有着一些约定。 |
| 80 | + |
| 81 | +这些代码风格的大部分规则被作为配置文件保存在了 `.editorconfig` 中,部分IDE (例如 IDEA) 应当可以自动识别加载、或手动加载它。 |
| 82 | +这些风格与 |
| 83 | +[Kotlin Coding conventions](https://kotlinlang.org/docs/coding-conventions.html) |
| 84 | +中的大部分描述很类似,你也可以以它为参考。 |
| 85 | + |
| 86 | +下面会再列举一些常见的风格约定。 |
| 87 | + |
| 88 | +* 中缀表达式 (例如 `infix` 或数字运算符 `+` 、`-` 等) 前后应当包含一个空格。例如应该是 `a += b` 而不是 `a+=b`。 |
| 89 | + |
| 90 | +* 变量的名称与类型之间,`:` 之后应该有一个空格。例如应该是 `a: Int` 而不是 `a:Int`。 |
| 91 | + |
| 92 | +* 函数的参数 (包括函数的定义与调用时的入参) 在同一行时,分隔的 `,` 后应当有一个空格。 |
| 93 | + 例如应该是 `foo(1, 2)` 而不是 `foo(1,2)`; 应该是 `function name(a: Int, b: Int)` 而不是 `function name(a: Int,b: Int)` |
| 94 | + |
| 95 | +* 定义的函数参数较多、需要换行时,各参数应各自占一行且头部对齐,且不与 `(` 和 `)` 在同一行;如果参数需要添加注解,每个注解应该各自占一行,例如: |
| 96 | + ```Kotlin |
| 97 | + function name( |
| 98 | + p1: Int, |
| 99 | + @Anno2 |
| 100 | + @Anno1 |
| 101 | + p2: String |
| 102 | + ) |
| 103 | + ``` |
| 104 | + |
| 105 | +### KMP |
| 106 | + |
| 107 | +KOOK组件库绝大多数模块都是支持 [KMP](https://kotlinlang.org/docs/multiplatform.html) 的。 |
| 108 | + |
| 109 | +### 二进制兼容 |
| 110 | + |
| 111 | +在版本迭代中应提供更好的兼容性保证。因此当一个 API 被废弃或需要被修改时,应保证修改后的内容对旧版本的二进制兼容, |
| 112 | +并添加适当的废弃说明与警告。 |
| 113 | + |
| 114 | +新增的实验性内容也应当标记合适的 Opt 注解与适当的提示来向开发者发出警告。 |
| 115 | + |
| 116 | +### 友好 API |
| 117 | + |
| 118 | +KOOK组件库对外提供的公开API中,都应该是 Java 友好、或有配套的 Java 友好 API,尤其指可挂起函数 `suspend fun`。 |
| 119 | +大部分挂起函数的 Java 友好 API 通过编译器插件 |
| 120 | +[Kotlin Suspend Transform compiler plugin](https://github.com/ForteScarlet/kotlin-suspend-transform-compiler-plugin) 实现, |
| 121 | +可参阅手册中的 |
| 122 | +[Java友好](https://simbot.forte.love/java-friendly.html) 章节 |
| 123 | +和 |
| 124 | +[组件开发 - 编译器插件](https://simbot.forte.love/component-dev-compiler-plugin.html) |
| 125 | +章节。 |
| 126 | + |
| 127 | +## 文档贡献 |
| 128 | +### API文档 |
| 129 | + |
| 130 | +API文档是使用 [Dokka](https://github.com/Kotlin/dokka) 根据源码的文档注释生成的。你可以在小节 [注释风格](#注释风格) |
| 131 | +中了解更多。 |
| 132 | + |
| 133 | +### 手册贡献 |
| 134 | + |
| 135 | +KOOK组件库手册使用 [Writerside](https://www.jetbrains.com/help/writerside) 编写, |
| 136 | +你可以在目录 `Writerside` 中找到它的内容。 |
| 137 | + |
| 138 | +## 社区贡献 |
| 139 | +### 应用作品 |
| 140 | + |
| 141 | +基于 simbot 开发的应用项目,并为项目标记 `simbot` tag,为社区生态添注活力! |
| 142 | + |
| 143 | +### 组件库/插件库/其他 |
| 144 | + |
| 145 | +基于 simbot 开发组件库/插件库,并为项目标记 `simbot` tag,为社区生态添注活力! |
| 146 | +你可以: |
| 147 | +- 前往手册的 [组件库开发](https://simbot.forte.love/component-dev.html) 了解更多开发组件库的细节! |
| 148 | +- 前往 [讨论区][讨论区] 向其他人或开发团队寻求协助! |
| 149 | +- 前往 [组织首页][组织首页] 添加其中的 **社群**,并寻求协助! |
| 150 | + |
| 151 | +[组织首页]: https://github.com/simple-robot |
| 152 | +[讨论区]: https://github.com/orgs/simple-robot/discussions |
0 commit comments