为 xl3 做贡献
xl3 是 XTL 规范 的 TypeScript 参考实现。本文档同时涵盖对实现和规范的贡献路径。
在 0.x 阶段,项目由单一作者维护。欢迎贡献,但规范变更的门槛较高——XTL 的目标是成为一个稳定、语言中立的标准。
变更如何进入项目请参见 GOVERNANCE.md;1.0 发布的阻塞项请参见 ROADMAP.md。
快速开始
git clone https://github.com/xl3-lang/xl3.git
cd xl3
npm install
npm test
三类贡献
1. 实现 bug(本仓库,src/)
参考实现与规范不一致的 bug 始终欢迎。步骤:
- 开一个议题,附最小复现(template.xlsx + data.xlsx + 实际输出 vs 期望输出)。
- 如果你有修复,提一个 PR,并在
src/__tests__/中加一个回归测试。
如果情形是"实现与规范一致,但规范本身是错的",参见第 (3) 类。
2. 规范问题与澄清(spec/)
规范是规范性的。如果你发现行为定义不清:
- 开一个打了
spec标签的议题。 - 如果答案很小(错别字、澄清),欢迎直接发 PR。
- 如果答案需要设计决策,维护者会在
spec/decisions/中起草一份 ADR。
3. 一致性测试用例(conformance/fixtures/)
一致性语料是 XTL 的可执行定义。这里的测试用例的寿命超过任何单一实现。编写之前请阅读 conformance/AUTHORING.md。
核心准则:期望输出从规范编写而来,不从 JS 实现的运行结果生成。 一个只是记录 JS 实现行为的 fixture,会把这个实现冻结为事实上的规范——这正是 XTL 想要避免的。
4. 移植到其他语言
欢迎其他语言的实现,在 IMPLEMENTATIONS.md 中跟踪。要把一个移植列上去:
- 对照规范实现,而不是对照 JS 实现。
- 按
conformance/runner-protocol.md跑你的实现通过一致性语料。 - 提一个 PR,在
IMPLEMENTATIONS.md中加一行。
编码规范(TypeScript 实现)
- TypeScript 严格模式开启;PR 必须通过类型检查(
npm run typecheck)。 - 测试位于
src/__tests__/。用npm test运行。 - 新功能需要测试。bug 修复需要回归测试。
- 除非必要,不要新增运行时依赖。当前依赖:
exceljs、jszip。
提交信息
如果适用,请使用 Conventional Commits:
feat:—— 实现中的新功能fix:—— 实现中的 bug 修复spec:——spec/下规范文本的修改conformance:—— 测试用例语料或 runner 协议的修改docs:—— README、CONTRIBUTING 等chore:—— 工具链、CI、依赖test:—— 仅修改实现中的测试
不兼容变更加 !(例如 feat!: rename count to rowcount)。