在做adhoc测试时,不使用echo命令,也不使用 bin/gf -e,而是:
- 唯一方法:直接在
tests目录下的现有测试用例文件中新增测试代码 - 禁止:在 /tmp 目录下新建临时文件来测试
- 使用 bin/gf tests/... 的方式执行测试
重要:所有测试代码都必须保存在版本控制的测试文件中,便于后续的回归测试和代码审查。
- 使用空格进行缩进,而不是制表符
- 建议缩进宽度为2个空格
gf doc 用于浏览 Goldfish Scheme 库的文档和测试用例。
# 查看某个库的文档
bin/gf doc scheme/base
# 查看某个函数的文档
bin/gf doc substring
# 查看指定库下某个函数的文档
bin/gf doc scheme/base "substring"
# 重建函数索引(在新增或修改测试文件后执行)
bin/gf doc --build-json文档来源是 tests/ 目录下的 *-test.scm 测试文件。为函数添加文档时,只需在对应库的路径下创建 函数名-test.scm 测试文件,然后执行 bin/gf doc --build-json 更新索引。
gf fmt 用于自动格式化 Scheme 代码(调整缩进、换行等)。
# 格式化单个文件(原地修改)
bin/gf fmt goldfish/liii/os.scm
# 格式化整个目录(原地修改)
bin/gf fmt goldfish/
# 仅查看格式化结果(不修改文件)
bin/gf fmt --dry-run goldfish/liii/os.scmgf fix 用于根据缩进自动修正 Scheme 代码的括号。
# 修正单个文件(原地修改)
bin/gf fix goldfish/liii/os.scm
# 修正整个目录(原地修改)
bin/gf fix goldfish/
# 仅查看修正结果(不修改文件)
bin/gf fix --dry-run goldfish/liii/os.scm在提交代码前,应使用以下步骤确保代码格式正确:
# 1. 构建
xmake b goldfish
# 2. 格式化代码
bin/gf fmt goldfish/liii/xxx.scm
bin/gf fmt tests/goldfish/liii/xxx-test.scm
# 3. 运行测试
bin/gf tests/goldfish/liii/xxx-test.scm- 使用
git push -u origin 分支名推送代码 - 在 git push 的输出中会显示创建 PR 的链接,例如:
remote: Create a pull request for '分支名' on Gitee by visiting: remote: https://gitee.com/XmacsLabs/goldfish/pull/new/XmacsLabs:分支名...XmacsLabs:main - 点击或访问该链接即可创建合并请求
- 默认使用中文与 Claude 进行交流
- 如用户输入其他语言(如英文),可临时使用该语言进行交流
测试文件(位于 tests/ 目录下的 .scm 文件)的协议声明方式:
- 测试文件的协议仍旧是 Apache License 2.0,与项目其他文件保持一致
- 文件头部不放置协议文本:为节省上下文 token,测试文件头部直接从
(import ...)开始 - 代码实现文件(
goldfish/目录下)仍需保留完整的 Apache 协议头
示例:
;; 测试文件直接从 import 开始(无协议头),但协议仍是 Apache
(import (liii check)
(liii string))
;; 实现文件保留完整协议头
;;
;; Copyright (C) 2024 The Goldfish Scheme Authors
;;
;; Licensed under the Apache License, Version 2.0 ...define-case-class 通过宏实现,有显著的性能开销:
- 方法调用需要通过字符串匹配和动态查找
- 每次调用都有额外的运行时开销
- 不适合高频调用的场景
使用建议:
- 适合手写代码和原型开发
- 不推荐用于 AI 生成的代码(AI 可能会过度使用)
- 不推荐用于生产环境部署(性能敏感场景)
对于性能敏感的场景,建议使用普通的函数和 record-type 替代。
- 分支名格式:
$USER/x_y/descr$USER:当前用户名x_y:任务编号,如201_10descr:简短的任务描述,使用下划线连接
- 示例:
da/201_10/doc_update
- 使用单行格式:
[x_y] 简短描述!编号:在主干分支中,这是Gitee 自动生成的提交编号,如!870,在合并过程中会保留[x_y]:任务编号简短描述:简洁的任务描述
- 示例:
[201_10] 更新文档格式和内容
- 方案讨论优先:对于任何非微小的代码改动,都必须先讨论实现方案和具体方法,经用户确认后再开始实施
- 测试驱动开发:采用测试驱动开发(TDD)方法,先撰写单元测试,与用户确认测试用例正确性,然后再开始实现功能
- 任务拆分引导:如果任务过于复杂或庞大,应该引导用户将任务拆分成更小、可管理的子任务
- 渐进式实施:优先采用小步快跑的方式,先实现核心功能,再逐步完善细节
- 保持沟通:在实施过程中,如有任何需要决策的点,都应该及时与用户沟通确认
- 提交信息格式:代码提交信息使用单行即可,格式简洁明了
- 详细信息位置:更多详细信息放在
devel/任务编号.md文件中,如devel/200_15.md - 提交信息示例:`git commit -m "将多行注释后置处理迁移到 pretty-print.scm"
开发文档全部放在 devel/ 目录下面。每一个任务以devel/x_y.md方式编号,一个任务可能会对应多个代码合并请求,以及主干分支的多次提交。
| 项目编号 | 描述 | 备注 |
|---|---|---|
| 16 | 代码格式化 | |
| 200 | 基础设施,包含CI/CD/xmake构建定义 | |
| 201 | 文档和测试 | |
| 202 | 性能优化 | |
| 203 | (liii trie) | iota 等函数性能优化 |
| 204 | goldfish CLI/REPL | |
| 205 | (liii coroutine) | |
| 206 | (liii os) / (liii time) | 操作系统和时间相关功能 |
| 207 | (liii sort) | |
| 208 | (liii unicode) | UTF-8/UTF-16 编码转换 |
| 209 | (liii oop) | 面向对象编程 |
| 210 | S7内置的函数 | S7 Scheme 内置功能文档和测试 |
| 211 | (liii timeit) | 性能测试工具 |
| 212 | Windows 构建 | Windows 平台特定修复 |
固定的任务编号:
200_0: 更新Goldfish Scheme的AUTHORS文件200_1: 更新Goldfish Scheme的版本号200_21: 从 s7.c 拆分出 s7_r7rs.h 和 s7_r7rs.c
# [x_y] 任务描述
## 任务相关的代码文件
- 文件路径1
- 文件路径2
## 如何测试
一般先构建,再lint,最后运行测试用例。
## 日期 任务描述
### What (可选)
简要描述任务目标和完成的工作。
1. 第一项具体工作
2. 第二项具体工作
3. 第三项具体工作
### Why (可选)
说明为什么需要这个任务,解决什么问题。
### How (可选)
描述实现思路,特别是对于有难度的任务。
## 日期 之前的提交和任务描述
对于有多次提交的任务,将最新的提交描述放在上面,旧的放在下面。
之前的任务描述内容...-
标题格式:
- 使用
# [x_y] 任务描述格式 - x 表示主任务编号,y 表示子任务编号
- 使用
-
任务相关的代码文件:
- 列出所有相关的代码文件路径
- 包括实现文件和测试文件
-
如何测试:
- 提供完整的测试命令序列
- 包括构建、代码检查和测试执行
- 使用代码块格式
-
任务描述:
- 使用
## 日期 任务描述格式 - What (可选): 使用
### What子标题和编号列表描述具体完成的工作 - Why (可选): 使用
### Why说明任务背景和原因,如修复错误时可省略 - How (可选): 使用
### How描述实现思路,特别是有难度的任务 - 如果一个任务会被分解成很多小任务,其中很多重复的部分,那么只保留一个 what/why/how 即可
- 保持简洁明了,突出重点
- 使用
-
多次提交处理:
- 对于有多次提交的任务,将最新的提交描述放在文档顶部
- 使用
## 日期 之前的提交和任务描述部分记录之前的提交历史 - 按时间倒序排列,最新的在上,旧的在下
- 便于快速了解当前任务状态和进展
-
内容要求:
- What 部分聚焦于 "做了什么" 和 "如何验证"
- Why 部分说明任务背景、问题或需求
- How 部分描述技术实现思路和难点
- 避免过于详细的技术实现细节
- 确保测试步骤可重现
devel/208_1.md- unicode 模块实现devel/208_2.md- u8-string-length 文档和测试devel/208_3.md- u8-substring 文档和测试devel/208_4.md- string->utf8 文档和测试