CONTRIBUTING.md 6.2 KB

贡献指南

感谢你考虑为 IJS 项目做出贡献!

行为准则

参与本项目即表示你同意遵守我们的行为准则。请保持友好、尊重和包容。

如何贡献

报告 Bug

如果你发现了 Bug,请创建一个 Issue 并包含以下信息:

  1. 清晰的标题:简要描述问题
  2. 重现步骤:详细说明如何重现问题
  3. 预期行为:描述你期望发生什么
  4. 实际行为:描述实际发生了什么
  5. 环境信息:
    • Android 版本
    • 设备型号
    • 应用版本
  6. 截图:如果可能,提供截图
  7. 日志:如果有错误日志,请附上

建议新功能

如果你有新功能的想法:

  1. 先检查是否已有类似的 Issue
  2. 创建一个新的 Issue,标记为 "enhancement"
  3. 详细描述:
    • 功能的用途
    • 为什么需要这个功能
    • 如何实现(如果有想法)
    • 使用示例

提交代码

开发流程

  1. Fork 仓库

    # 在 GitHub 上点击 Fork 按钮
    
  2. 克隆你的 Fork

    git clone https://github.com/your-username/ijs.git
    cd ijs
    
  3. 创建分支

    git checkout -b feature/your-feature-name
    # 或
    git checkout -b fix/your-bug-fix
    
  4. 进行更改

    • 遵循代码风格指南
    • 添加必要的注释
    • 更新文档(如果需要)
  5. 测试你的更改

    ./gradlew test
    ./gradlew connectedAndroidTest
    
  6. 提交更改

    git add .
    git commit -m "feat: add amazing feature"
    
  7. 推送到你的 Fork

    git push origin feature/your-feature-name
    
  8. 创建 Pull Request

    • 在 GitHub 上打开 Pull Request
    • 填写 PR 模板
    • 等待审核

提交信息规范

使用 Conventional Commits 格式:

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

<body>

<footer>

类型(type):

  • feat: 新功能
  • fix: Bug 修复
  • docs: 文档更新
  • style: 代码格式(不影响代码运行)
  • refactor: 重构
  • perf: 性能优化
  • test: 测试相关
  • chore: 构建过程或辅助工具的变动

示例:

feat(plot): add parametric plot support

Add ParametricPlot function to draw parametric equations.
Supports custom parameter ranges and point density.

Closes #123

代码风格

Java 代码

  • 使用 4 个空格缩进
  • 类名使用 PascalCase
  • 方法名和变量名使用 camelCase
  • 常量使用 UPPER_SNAKE_CASE
  • 添加 JavaDoc 注释

    /**
    * 计算函数的导数
    * 
    * @param expression 函数表达式
    * @param variable 变量名
    * @return 导数表达式
    */
    public String differentiate(String expression, String variable) {
    // 实现代码
    }
    

JavaScript 代码

  • 使用 4 个空格缩进
  • 使用 ES6+ 语法
  • 变量名使用 camelCase
  • 常量使用 UPPER_SNAKE_CASE
  • 添加 JSDoc 注释

    /**
    * 绘制函数图像
    * @param {string} func - 函数表达式
    * @param {string} variable - 变量名
    * @param {number} xMin - x 最小值
    * @param {number} xMax - x 最大值
    */
    plotFunction(func, variable, xMin, xMax) {
    // 实现代码
    }
    

Kotlin 代码

文档

  • 更新 README.md(如果添加了新功能)
  • 更新 CHANGELOG.md
  • 添加代码注释
  • 更新帮助文档(如果需要)

测试

  • 为新功能添加单元测试
  • 确保所有测试通过
  • 测试不同的 Android 版本
  • 测试不同的屏幕尺寸

开发环境设置

必需工具

  • Android Studio (最新稳定版)
  • JDK 11 或更高版本
  • Git

设置步骤

  1. 安装 Android Studio

  2. 克隆仓库

    git clone https://github.com/your-username/ijs.git
    cd ijs
    
  3. 打开项目

    • 在 Android Studio 中打开项目
    • 等待 Gradle 同步完成
  4. 运行应用

    • 连接 Android 设备或启动模拟器
    • 点击 "Run" 按钮

项目结构

ijs/
├── app/
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/com/nonvioce/ijs/
│   │   │   │   ├── MainActivity.java      # 主活动
│   │   │   │   ├── SymjaEngine.java       # Symja 引擎封装
│   │   │   │   └── PluginManager.java     # 插件管理器
│   │   │   ├── assets/
│   │   │   │   ├── console.html           # 控制台 HTML
│   │   │   │   ├── console.css            # 控制台样式
│   │   │   │   └── console.js             # 控制台逻辑
│   │   │   └── res/                       # Android 资源
│   │   ├── androidTest/                   # Android 测试
│   │   └── test/                          # 单元测试
│   └── build.gradle.kts                   # 应用构建配置
├── gradle/                                # Gradle 配置
├── README.md                              # 项目说明
├── CHANGELOG.md                           # 更新日志
└── CONTRIBUTING.md                        # 贡献指南

插件开发

如果你想开发插件:

  1. 参考 app/src/main/assets/console.html 中的插件开发文档
  2. 查看示例插件代码
  3. 测试你的插件
  4. 分享你的插件(可选)

插件结构

{
  "id": "unique_plugin_id",
  "name": "插件名称",
  "description": "插件描述",
  "icon": "📐",
  "command": "cmd",
  "inputs": [
    {
      "name": "input_name",
      "label": "输入标签",
      "type": "number",
      "defaultValue": "0",
      "placeholder": "提示文本"
    }
  ],
  "jsCode": "function calculate(inputs, Symja) { ... }"
}

发布流程

(仅限维护者)

  1. 更新版本号
  2. 更新 CHANGELOG.md
  3. 创建 Git 标签
  4. 构建发布版本
  5. 发布到 GitHub Releases

获取帮助

如果你需要帮助:

  1. 查看 README.md
  2. 搜索现有的 Issues
  3. 创建新的 Issue
  4. 加入讨论区

许可证

通过贡献代码,你同意你的贡献将在 GPL-3.0 许可证下发布。


再次感谢你的贡献!🎉