【typst-rs】typest-cli Typst 命令行依赖关系输出模块(deps.rs)

张开发
2026/4/11 14:58:22 15 分钟阅读

分享文章

【typst-rs】typest-cli Typst 命令行依赖关系输出模块(deps.rs)
Rust 代码解析这段代码实现了一个用于输出编译依赖关系的模块支持三种不同的输出格式。模块功能概述该模块负责将构建系统中的文件依赖关系以不同格式输出主要用于增量编译的依赖追踪构建系统的规则生成工具链间的数据交换主要数据结构枚举类型DepsFormat: 定义支持的格式Json、Zero、MakeOutput: 定义输出目标文件路径或标准输出核心函数详解1.write_deps- 公共入口函数pubfnwrite_deps(world:mutSystemWorld,dest:Output,format:DepsFormat,outputs:Option[Output],)-io::Result()功能根据指定的格式分发到对应的实现函数参数说明world: 系统世界对象包含编译上下文dest: 输出目标文件或stdoutformat: 输出格式类型outputs: 可选的输出文件列表Make格式必需2.write_deps_json- JSON格式输出fnwrite_deps_json(world:mutSystemWorld,dest:Output,outputs:Option[Output],)-io::Result()输出示例{inputs:[src/main.rs,src/lib.rs],outputs:[target/debug/app]}特性要求路径为有效的UTF-8编码自动过滤stdout输出目标使用serde_json进行序列化3.write_deps_zero- Zero格式输出fnwrite_deps_zero(world:mutSystemWorld,dest:Output)-io::Result()输出格式每个依赖路径后跟一个空字符(\0)作为分隔符不要求UTF-8编码保留原始字节应用场景配合xargs -0等工具使用避免路径中的空格问题4.write_deps_make- Makefile格式输出fnwrite_deps_make(world:mutSystemWorld,dest:Output,outputs:[Output],)-io::Result()输出示例output1 output2: input1 input2 input3特性对特殊字符进行转义处理要求输出必须是文件路径不能是stdout非UTF-8路径会被静默跳过5.munge- Make格式转义函数fnmunge(s:str)-String转义规则基于GCC实现字符转义处理说明$$$美元符号双写:\:冒号转义#\#井号转义空格/制表符添加反斜杠根据前导反斜杠数量计算\计数累积用于处理连续反斜杠特殊处理连续反斜杠后跟空格时需要添加N1个反斜杠来正确表示N个反斜杠后跟空格6.relative_dependencies- 路径相对化fnrelative_dependencies(world:mutSystemWorld,)-io::ResultimplIteratorItemPathBuf功能将绝对路径转换为相对于当前目录的路径处理逻辑获取项目根目录和当前工作目录计算根目录的相对路径对所有依赖路径进行前缀替换错误处理策略格式非UTF-8路径处理非法输出处理JSON返回错误过滤stdoutZero直接写入字节不适用Make静默跳过返回错误设计模式与最佳实践策略模式根据格式选择不同的处理策略迭代器模式使用impl Iterator返回惰性求值的依赖列表资源管理使用io::Result进行统一的错误处理兼容性设计Make格式遵循GCC标准确保与现有工具链兼容使用场景构建系统集成为Make、Ninja等生成依赖规则IDE支持JSON格式便于工具解析和展示脚本处理Zero格式便于shell脚本处理增量编译追踪文件变化只重新编译必要的部分性能考虑Zero格式避免了编码转换开销使用with_capacity预分配字符串空间迭代器惰性求值避免不必要的内存分配Make格式使用缓冲区批量写入减少I/O操作

更多文章