拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Tree-sitter 语法发布指南:从版本号到 crates.io / npm / PyPI 的全流程实践

开发工具【免费下载链接】tree-sitterAn incremental parsing system for programming tools项目地址https://gitcode.com/gh_mirrors/tr/tree-sitter点击查看免费下载本文基于仓库文档 docs/src/creating-parsers/6-publishing.md 展开面向已经完成语法Grammar开发并准备交付给下游用户的 Tree-sitter 语法作者。你将掌握如何用tree-sitter version一键同步各语言绑定的版本号、如何按语义化版本规则规划发布节奏以及从打 tag 到推送、再到借助 CI 工作流自动发布到 GitHub、crates.io、npm 与 PyPI 的完整实操路径。发布前的准备把语法送到用户所在的生态Tree-sitter 语法的消费者遍布不同技术栈Rust 开发者从 crates.io 拉取、JavaScript/TypeScript 开发者通过 npm 安装、Python 开发者依赖 PyPI而 C/C 及其他语言用户则可能直接从 GitHub 源码构建。因此官方文档明确建议当你的解析器达到可供消费者使用的稳定状态后强烈推荐同时发布到 GitHub、crates.ioRust、npmJavaScript和 PyPIPython这样能最大程度降低他人发现与使用你语法的门槛。如果你的语法托管在 GitHub 上还可以利用官方提供的**可复用工作流reusable workflows**来自动化发布过程。这套 GitHub Actions 会在 CI 中自动完成重新生成与发布前提是你为各个注册表正确配置了所需的令牌token。官方文档给出了真实示例Python 语法仓库tree-sitter-python的.github/workflows/publish.yml就是这套工作流的落地范例。这意味着你本地只需要执行“改版本号 → 提交 → 打 tag → 推送”剩下的发布动作全部交给 CI 完成。端到端发布流程五步完成一次发布官方文档给出了从零到一的完整发布清单这也是每次发版都应遵循的标准动作升级版本号用tree-sitter version把版本号设置到目标值。例如发布1.0.0时运行tree-sitter version 1.0.0该命令会同步更新仓库内所有涉及版本号的文件详见下一节。提交变更确保工作目录干净后提交例如git commit -am Release 1.0.0打标签为提交打上语义化版本标签git tag -- v1.0.0推送提交与标签假设你在main分支、远端名为origingit push --tags origin main可选自动发布如果你已经配置了 GitHub 发布工作流本次推送触发 CI 后语法会被自动发布到 GitHub、crates.io、npm 和 PyPI无需任何手动上传操作。这套流程的关键在于标签tag与版本号必须严格对应因为后续的语义化版本比较、依赖解析以及 CI 触发都以 tag 为锚点。深入tree-sitter version一个命令同步全部绑定tree-sitter version是发布流程的核心命令其完整说明见 docs/src/cli/version.md底层实现位于 crates/cli/src/version.rs。它的职责是把语法版本号在多个语言绑定之间保持一致——手动同步这些文件繁琐且极易出错该命令正是为此而生。会更新哪些文件命令运行时会遍历以下文件存在才更新不存在则跳过文件说明tree-sitter.json语法的统一描述文件版本号的权威来源Cargo.toml/Cargo.lockRustcrates.io绑定package.json/package-lock.jsonJavaScriptnpm绑定MakefileC 绑定的 make 构建版本号VERSION变量CMakeLists.txtCMake 构建配置中的VERSIONpyproject.tomlPythonPyPI绑定build.zig.zonZig 构建绑定从源码结构看该命令同样支持 Zig 包管理三种调用形态# 1. 打印当前版本不修改任何文件 tree-sitter version # 2. 直接指定目标版本等价于发布别名 tree-sitter version 1.0.0 # 别名publish # 3. 基于当前版本自动递增 tree-sitter version --bump patch tree-sitter version --bump minor tree-sitter version --bump major其中--bump的递增逻辑在 version.rs 中实现遵循标准语义化版本规则patch只增加补丁号minor增加次版本号并将补丁号清零major增加主版本号并将次版本号与补丁号一并清零。需要注意的细节版本号权威来源tree-sitter version直接读取当前目录下tree-sitter.json中的metadata.version作为基准参见 loader.rs 中TreeSitterJSON的结构定义再向各绑定文件扩散。外部工具依赖更新Cargo.toml/Cargo.lock需要本机安装cargoupdate_cargo_lock会调用cargo generate-lockfile --offline更新package-lock.json需要本机安装npm会调用npm install --package-lock-only。缺少对应工具时该文件会静默跳过其余文件照常更新。降版本会警告如果新版本号低于当前版本命令会输出警告提示“正在将版本从 X 回退到 Y”避免误操作。指定语法路径语法不在当前目录时可用-p/--grammar-path PATH指定包含语法的目录。多语法仓库若tree-sitter.json中声明了多个 grammargrammars数组长度大于 1Makefile 的版本更新会定位到common/common.mak而非根目录Makefile说明该命令对 monorepo 形态的多语法仓库同样有支持。各语言绑定的版本号都长什么样tree-sitter version之所以能同步这么多文件是因为tree-sitter init生成的模板见 crates/cli/src/templates为每种绑定都预留了统一的版本号占位符npm 绑定templates/package.jsonversion: PARSER_VERSION发布到 npm 的包名为tree-sitter-PARSER_NAME并声明了node-addon-api、node-gyp-build等构建依赖。crates.io 绑定templates/_cargo.tomlversion PARSER_VERSION同时包含tree-sitter-language、cc等依赖与categories/keywords元数据。PyPI 绑定templates/pyproject.tomlversion PARSER_VERSION要求requires-python 3.10并配置了 cibuildwheel 以产出多平台 wheel。C 绑定templates/makefileVERSION : PARSER_VERSION同时用于生成.pc文件与动态库的 SONAME 版本。仓库中还包含pom.xmlJava/Maven、binding.gyp、root.zigZig、setup.py等模板覆盖了更广泛的分发渠道。由此可见tree-sitter version的价值在于一次修改全生态一致这正是多语言语法库能够长期健康维护的基础设施保障。语义化版本下游用户能否安全升级的分水岭发布语法的核心纪律是严格遵循语义化版本Semantic Versioning。这保证消费者可以预测性地升级依赖同时让既有集成——包括查询queries、树遍历代码、节点类型检查——在升级后仍然按预期工作。官方文档给出的规则非常明确主版本号major当语法的节点类型或结构发生不兼容变更时递增。例如移除/重命名某个节点类型、改变子节点顺序都会破坏下游对语法树的既有假设。次版本号minor新增节点类型或模式且保持向后兼容时递增。新增的节点不会破坏旧查询因此属于兼容性变更。补丁版本号patch修复 bug 且不改变语法结构时递增。这类变更对下游完全透明。0.y.z 阶段的特殊策略对于处于0.y.z零版本阶段的语法语义化版本的规则在技术上有所放宽——理论上 0.x 期间任何 minor 变更都可视为不兼容。但官方文档特别提醒如果你的语法已经有用户建议以更保守的态度对待版本变更把补丁版本z的变更视为次版本minor变更来对待把次版本y的变更视为主版本major变更来对待。这样在 pre-1.0 阶段依然能为既有用户维持稳定性确保下游用户升级时不会因版本号“显得无害”而导致查询意外失效。换句话说版本号不只描述差异还承载着对兼容性的承诺越早建立严格的发版纪律生态内的信任就越牢固。发布后的验证发布完成后建议做以下收尾确认检查 tag 是否与tree-sitter version输出的版本号一致git tag --list确认 CI 工作流被正确触发并在 GitHub、crates.io、npm、PyPI 各注册表检查产物是否已就位从各注册表安装一遍新版本跑通语法测试tree-sitter test与高亮/标签查询测试确认下游集成的查询与节点类型断言未被破坏。至此你的语法便完成了从本地仓库到多生态分发渠道的正式交付。后续迭代中只需遵循“语义化版本决定改动类型、tree-sitter version统一版本、tag 触发 CI 自动发布”这一固定节奏即可持续、稳定地维护你的语法包。参考文档与源码本文主体文档docs/src/creating-parsers/6-publishing.mdtree-sitter version命令文档docs/src/cli/version.md版本同步命令实现crates/cli/src/version.rstree-sitter.json结构定义crates/loader/src/loader.rs各语言绑定模板crates/cli/src/templates赞分享开发工具【免费下载链接】tree-sitterAn incremental parsing system for programming tools项目地址https://gitcode.com/gh_mirrors/tr/tree-sitter点击查看免费下载相关推荐wgpu 发布流程实战指南从版本号到 crates.io 的大版本与小版本发布全流程wgpu 发布流程实战指南从版本号到 crates.io 的大版本与小版本发布全流程 本篇指南基于 docs/release checklist.md htt图形学3D渲染a2ui 多语言生态发布全流程指南从 pub.dev、npm 到 PyPI 的版本发布实战a2ui 多语言生态发布全流程指南从 pub.dev、npm 到 PyPI 的版本发布实战 a2ui 是一个跨语言、跨渲染框架的 Agent UI 协议项目人工智能AI AgentAI 应用前端UI组件OmniRoute 发布检查清单实践指南从版本号到 npm 制品的安全发布流程OmniRoute 发布检查清单实践指南从版本号到 npm 制品的安全发布流程 本指南围绕 OmniRoute 官方发布检查清单英文原版见 docs/opsLLM 网关人工智能API网关后端前端桌面应用上一篇推荐一款高效通知神器nvim-notify下一篇终极数据科学学习指南从零基础到专业人才的完整路线图 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门