尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

为Tokei贡献代码:从零添加一种新语言定义的完整实战教程

发布时间:2026/9/19 18:26:09

资讯中心
01
ARTICLE

为Tokei贡献代码:从零添加一种新语言定义的完整实战教程

为Tokei贡献代码:从零添加一种新语言定义的完整实战教程
为Tokei贡献代码从零添加一种新语言定义的完整实战教程【免费下载链接】tokeiCount your code, quickly.项目地址: https://gitcode.com/gh_mirrors/to/tokeiTokei 是一款用 Rust 编写的快速代码统计工具能秒级统计项目中每种语言的代码行数、注释行数与空行数。想让它多识别一种语言好消息是Tokei 的语言定义全部集中在一个 JSON 文件里你不需要会写 Rust只需按固定格式添加一段配置和一个测试文件即可完成贡献。本文将带你完整走一遍「添加新语言」的全流程理解语言定义机制 → 编写配置 → 添加测试文件 → 本地验证 → 提交。先了解Tokei 的语言定义机制Tokei 支持 150 种语言这些语言的识别规则并不是手写 Rust 代码而是由构建系统自动生成的唯一事实来源languages.json约 2100 行每种语言一段 JSON 配置代码生成构建脚本 build.rs 在每次编译时读取该文件通过模板 src/language/language_type.tera.rs 自动生成LanguageType枚举及所有识别逻辑测试生成tests/data/ 目录下的每个示例文件也会被自动变成一个准确性测试由 tests/accuracy.rs 驱动执行。也就是说你只需修改两个地方在languages.json里加一段配置在tests/data/里加一个测试文件其余工作全部由构建系统自动完成。官方的贡献指南在 CONTRIBUTING.md强烈建议先读一遍。贡献前准备三步完成环境搭建安装 Rust 工具链需要最新 stable 版本克隆仓库到本地git clone https://gitcode.com/gh_mirrors/to/tokei cd tokei运行一次构建确认环境正常首次构建会触发语言代码生成cargo build构建成功后运行cargo run -- -l可以列出当前支持的全部语言及其扩展名这就是你贡献后的目标清单。编写新语言定义languages.json 完整字段指南以添加Wren扩展名.wren单行注释//字符串支持双引号与单引号为例。第 1 步检查是否已存在编辑前先搜索确认没有重复定义grep -i wren languages.json同时确认该语言的文件扩展名没有被其他语言占用例如moon已属于 MoonScript避免冲突。第 2 步在 languages.json 中添加语言条目languages.json根节点是languages对象按字母序找到合适位置插入。条目结构如下Wren: { line_comment: [//], quotes: [[\\\, \\\], [, ]], extensions: [wren] }各字段含义速查字段作用说明键名如Wren语言内部标识必须符合 Rust 枚举命名风格首字母大写、无空格name界面显示名可选键名不适合展示时使用如Json→JSONline_comment单行注释符号字符串数组一种语言可有多个multi_line_comments多行注释[[/*, */]]这样的成对数组quotes字符串引号成对数组如[[\\\, \\\]]extensions文件扩展名不带点如wrenfilenames无扩展名的固定文件名全小写如justfile会覆盖扩展名判定shebangs/envshebang 识别用于无扩展名脚本文件nested是否允许嵌套多行注释布尔值如 Agda 为true 拿不准写法时直接参考 languages.json 里同结构的现有语言条目照葫芦画瓢即可。第 3 步添加语言测试文件必做在 tests/data/ 下新建wren.wren要求文件要覆盖该语言所有注释变体和引号写法第一行用该语言自己的注释语法写明人工核对的统计结果格式固定为数字 lines 数字 code 数字 comments 数字 blanks。以wren.wren为例// 6 lines 3 code 1 comments 2 blanks var greeting Hello, Wren! // 单行注释在字符串外 var name World其中第一行的数字需与实际内容严格一致——构建系统会自动解析这行并与真实统计结果比对见 build.rs 中generate_tests_batch的实现。官方给出的最佳样例可参考 tests/data/rust.rs。本地验证运行测试确认统计准确在仓库根目录执行cargo test构建系统会自动扫描tests/data/生成针对wren.wren的测试并运行输出类似tests/data/wren.wren LINES MATCH tests/data/wren.wren CODE MATCH tests/data/wren.wren COMMENTS MATCH tests/data/wren.wren BLANKS MATCH四项全部 MATCH 即代表配置正确。此外还可以做端到端验证cargo run -- tests/data/wren.wren确认输出表格里出现了Wren一行且cargo run -- -l的语言列表中能看到Wren (wren)。常见坑与避坑清单 ⚠️键名必须是合法的 Rust 枚举风格不能用JSON、C这类写法显示名请交给可选的name字段处理测试文件必须恰好被识别为 1 种语言若扩展名与其他语言冲突测试会直接 panic 报 wrong languages detectedfilenames必须全小写虽然实际文件常带大写字母如CMakeLists.txt配置中一律写小写且文件名匹配优先于扩展名第一行统计数字要人工核对先让 tokei 跑一遍得到统计值再与自己的预期对比确认无误后填入注释注意 JSON 转义双引号在字符串里要写成\\\写错会导致整个构建失败报错信息会指向languages.json解析阶段保持字母序条目按字母序排列方便维护者 review 和定位。提交贡献从分支到 PR新建功能分支例如git checkout -b add-wren提交改动应只包含languages.json与新增的测试文件两处推送并发起 Pull RequestPR 描述中简要说明语言名称、扩展名、测试覆盖情况。CI 会在多种平台上运行cargo test与全特性构建见 ci/test.bash只要本地cargo test通过CI 基本没有额外风险。小结回顾整个流程为 Tokei 添加一种新语言其实只有三个核心动作在 languages.json 按格式添加一段 JSON 配置在 tests/data/ 添加带统计注释的测试文件用cargo test验证四项统计全部匹配。Tokei 的设计让语言定义与统计引擎彻底解耦这正是它能在社区协作下快速扩展到 150 种语言的原因。挑一种你常用但尚未支持的语言动手试试吧【免费下载链接】tokeiCount your code, quickly.项目地址: https://gitcode.com/gh_mirrors/to/tokei创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。