Skip to content

Latest commit

 

History

History
249 lines (195 loc) · 8.83 KB

File metadata and controls

249 lines (195 loc) · 8.83 KB

Claude Code 工作规则

Adhoc测试规则

在做adhoc测试时,不使用echo命令,也不使用 bin/gf -e,而是:

  1. 唯一方法:直接在 tests 目录下的现有测试用例文件中新增测试代码
  2. 禁止:在 /tmp 目录下新建临时文件来测试
  3. 使用 bin/gf tests/... 的方式执行测试

重要:所有测试代码都必须保存在版本控制的测试文件中,便于后续的回归测试和代码审查。

代码格式规范

  • 使用空格进行缩进,而不是制表符
  • 建议缩进宽度为2个空格

CLI 工具

gf doc - 文档浏览工具

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 - 代码格式化工具

gf fmt 用于自动格式化 Scheme 代码(调整缩进、换行等)。

# 格式化单个文件(原地修改)
bin/gf fmt goldfish/liii/os.scm

# 格式化整个目录(原地修改)
bin/gf fmt goldfish/

# 仅查看格式化结果(不修改文件)
bin/gf fmt --dry-run goldfish/liii/os.scm

gf fix - 括号修正工具

gf 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

创建代码合并请求的方法

  1. 使用 git push -u origin 分支名 推送代码
  2. 在 git push 的输出中会显示创建 PR 的链接,例如:
    remote: Create a pull request for '分支名' on Gitee by visiting:
    remote: https://gitee.com/XmacsLabs/goldfish/pull/new/XmacsLabs:分支名...XmacsLabs:main
    
  3. 点击或访问该链接即可创建合并请求

交流语言规范

  • 默认使用中文与 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 使用建议

define-case-class 通过宏实现,有显著的性能开销:

  • 方法调用需要通过字符串匹配和动态查找
  • 每次调用都有额外的运行时开销
  • 不适合高频调用的场景

使用建议

  • 适合手写代码和原型开发
  • 不推荐用于 AI 生成的代码(AI 可能会过度使用)
  • 不推荐用于生产环境部署(性能敏感场景)

对于性能敏感的场景,建议使用普通的函数和 record-type 替代。

分支命名规范

  • 分支名格式:$USER/x_y/descr
    • $USER:当前用户名
    • x_y:任务编号,如 201_10
    • descr:简短的任务描述,使用下划线连接
  • 示例:da/201_10/doc_update

提交信息格式

  • 使用单行格式:[x_y] 简短描述
    • !编号:在主干分支中,这是Gitee 自动生成的提交编号,如 !870,在合并过程中会保留
    • [x_y]:任务编号
    • 简短描述:简洁的任务描述
  • 示例:[201_10] 更新文档格式和内容

任务执行规则

  1. 方案讨论优先:对于任何非微小的代码改动,都必须先讨论实现方案和具体方法,经用户确认后再开始实施
  2. 测试驱动开发:采用测试驱动开发(TDD)方法,先撰写单元测试,与用户确认测试用例正确性,然后再开始实现功能
  3. 任务拆分引导:如果任务过于复杂或庞大,应该引导用户将任务拆分成更小、可管理的子任务
  4. 渐进式实施:优先采用小步快跑的方式,先实现核心功能,再逐步完善细节
  5. 保持沟通:在实施过程中,如有任何需要决策的点,都应该及时与用户沟通确认

代码提交规则

  1. 提交信息格式:代码提交信息使用单行即可,格式简洁明了
  2. 详细信息位置:更多详细信息放在 devel/任务编号.md 文件中,如 devel/200_15.md
  3. 提交信息示例:`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 平台特定修复

固定的任务编号:

  1. 200_0: 更新Goldfish Scheme的AUTHORS文件
  2. 200_1: 更新Goldfish Scheme的版本号
  3. 200_21: 从 s7.c 拆分出 s7_r7rs.h 和 s7_r7rs.c

devel/x_y.md 模板

# [x_y] 任务描述

## 任务相关的代码文件
- 文件路径1
- 文件路径2

## 如何测试
一般先构建,再lint,最后运行测试用例。

## 日期 任务描述
### What (可选)
简要描述任务目标和完成的工作。

1. 第一项具体工作
2. 第二项具体工作
3. 第三项具体工作

### Why (可选)
说明为什么需要这个任务,解决什么问题。

### How (可选)
描述实现思路,特别是对于有难度的任务。

## 日期 之前的提交和任务描述
对于有多次提交的任务,将最新的提交描述放在上面,旧的放在下面。

之前的任务描述内容...

文档撰写方法

  1. 标题格式

    • 使用 # [x_y] 任务描述 格式
    • x 表示主任务编号,y 表示子任务编号
  2. 任务相关的代码文件

    • 列出所有相关的代码文件路径
    • 包括实现文件和测试文件
  3. 如何测试

    • 提供完整的测试命令序列
    • 包括构建、代码检查和测试执行
    • 使用代码块格式
  4. 任务描述

    • 使用 ## 日期 任务描述 格式
    • What (可选): 使用 ### What 子标题和编号列表描述具体完成的工作
    • Why (可选): 使用 ### Why 说明任务背景和原因,如修复错误时可省略
    • How (可选): 使用 ### How 描述实现思路,特别是有难度的任务
    • 如果一个任务会被分解成很多小任务,其中很多重复的部分,那么只保留一个 what/why/how 即可
    • 保持简洁明了,突出重点
  5. 多次提交处理

    • 对于有多次提交的任务,将最新的提交描述放在文档顶部
    • 使用 ## 日期 之前的提交和任务描述 部分记录之前的提交历史
    • 按时间倒序排列,最新的在上,旧的在下
    • 便于快速了解当前任务状态和进展
  6. 内容要求

    • What 部分聚焦于 "做了什么" 和 "如何验证"
    • Why 部分说明任务背景、问题或需求
    • How 部分描述技术实现思路和难点
    • 避免过于详细的技术实现细节
    • 确保测试步骤可重现

示例参考