=========================
Development Specification
=========================

.. code-block:: c

    int bus_count = 1;

Codeing Style
=============

* Public header 用 ``__XXX_H`` 形式
* 提倡在作用域开头统一声明变量，而不是即用即声明，方便释放的时候统一处理
* 缩进：四空格，无 Tab
* 折行：

  - 头文件中的函数签名可以不折行，其他地方的代码一律小于 80 char per line
  - 参数过长时，从超过长度的第一个参数开始折行，参数无需对齐
  - 太长的字符串可以不折行
  - ``gtk_widget_class_bind_template_child()`` 由于实在太长，可以不折行
  - 花括号不换行（除非在 ``case`` 中），右圆括号和左花括号之间没有空格（待定）

* 命名：

  - 鼓励局部变量和函数参数使用缩写，全局变量及函数名，类型名不鼓励缩写
  - 宏大写，数据类型，类名用大驼峰法，变量使用全小写 + 下划线
  - 文件名全小写，以下划线分隔

* 注释：

  - 按英文规范，句首第一个单词首字符大写，多句时使用标点符号，同样每行不得超过
    80 字符（汉字以两字符计），链接可以不折行

* Git commit log: 格式为 ``MODULE(TYPE): DESCRIPTION`` ，当前可用的模块(MODULE)
  有： ``All Core Sirc Sui Prefs Filter Decorator Lib I18n Data Plugin Build
  Script Doc...`` ，可用的提交类型(TYPE) 有： ``feat impl change fix improve
  cleanup refactor update release misc...``

* I18N：所有需要在界面上展示的格式化字符串中的控制字符均使用 numbered argument，
  即 ``%n$X`` 形式

* Change log: 应分为四类

  - Changed: 设计或功能上的改动，可能会带来兼容问题的一定要说明
  - Added: 新增的功能或者依赖
  - Removed: 移除的功能或者依赖
  - Imporved: 性能或功能或易用性上的改善以及 bug 修复

* 发布前须知

  - 集成测试 (TODO)
  - 更新翻译
  - 更新文档
  - 更新 change log
  - 更新项目中的版本号
  - 确认文档中的提供的安装脚本可用
  - 对最新的 commit 打 tag
  - 通知各个发行版的打包维护者

    - Arch Linux: @SilverRainZ
    - Gentoo: @xeirrr
    - ...
