发布(Publishing)
当你认为你的解析器已经达到稳定状态并可供用户使用时,你可以将其发布到多个注册中心。
强烈建议将 grammar 发布到以下平台:
- GitHub
- crates.io(Rust)
- npm(JavaScript)
- PyPI(Python)
这样可以使其他用户更容易发现并使用你的 grammar。 (Tree-sitter)
从开始到发布的完整流程
要发布一个新的 grammar(或发布第一个版本),应执行以下步骤:
1️⃣ 更新版本号
使用以下命令将版本号更新为目标版本:
tree-sitter version 1.0.0
例如,上述命令用于发布 1.0.0 版本。
2️⃣ 提交变更
确保当前工作目录是干净状态,然后提交:
git commit -am "Release 1.0.0"
(提交信息可自行决定)
3️⃣ 创建 Git Tag
git tag -- v1.0.0
4️⃣ 推送提交与标签
git push --tags origin main
假设:
- 当前分支为
main - 远程仓库名为
origin
5️⃣ (可选)自动发布
如果你的 grammar 已配置 GitHub 工作流(workflows):
发布流程将自动执行,包括:
- 重新生成 parser
- 发布到 GitHub
- 发布到 crates.io
- 发布到 npm
- 发布到 PyPI
前提是已正确配置各平台注册所需的访问令牌(tokens)。 (Tree-sitter)
遵循语义化版本(Semantic Versioning)
在发布 grammar 新版本时,必须遵循 语义化版本规范(SemVer)。
这可以确保:
- 使用者能够安全升级依赖
-
现有 Tree-sitter 集成代码继续正常工作,例如:
- queries
- 语法树遍历逻辑
- 节点类型判断
版本号规则
Major 版本(主版本)
当发生以下情况时递增:
- 对 grammar 的节点类型或结构进行了不兼容修改
Minor 版本(次版本)
当发生以下情况时递增:
- 新增节点类型或模式
- 同时保持向后兼容
Patch 版本(修订版本)
当发生以下情况时递增:
- 修复 bug
- 未改变 grammar 结构
0.y.z 版本阶段说明
对于 0.y.z(尚未达到 1.0)的 grammar:
语义化版本规则在技术上可以放宽。
但如果 grammar 已经被用户使用,建议采用更保守策略:
- 将 patch(z)版本变更 视为 minor 级变更
- 将 minor(y)版本变更 视为 major 级变更
这样可以在 1.0 之前阶段仍然保持对用户的稳定性。
遵循上述版本管理规范,可以确保下游用户在升级时不会因为 grammar 变化而导致已有 query 或解析逻辑失效。 (Tree-sitter)
