大家好,分享一个我们最近在做的 Rust crate:sigil-stitch。
项目地址:https://github.com/rust-codegen-group/sigil-stitch Crates.io:https://crates.io/crates/sigil-stitch
sigil-stitch 是一个面向多语言代码生成的 Rust 库。它想解决的不是“字符串模板怎么拼”,而是代码生成里更容易踩坑的几件事:
- 类型引用自动追踪 import,不需要手写 import,也会处理重名冲突
- 输出支持目标宽度,比如 80/100/120 columns 下自动换行
- 同一套 builder/spec 抽象可以生成 TypeScript、Rust、Go、Python、Java、Kotlin、Swift、C/C++、C#、Lua、Bash、Zsh 等语言
- 既可以用 builder API 程序化生成,也可以用
sigil_quote!直接写目标语言片段
一个 TypeScript 例子:
use sigil_stitch::prelude::*;
use sigil_stitch::lang::typescript::TypeScript;
let user_type = TypeName::importable_type("./models", "User");
let body = sigil_quote!(TypeScript {
const user: $T(user_type) = await getUser($S("id"));
if (!user) {
throw new Error($S("not found"));
}
return user;
}).unwrap();
let file = FileSpec::builder("user.ts")
.add_code(body)
.build()
.unwrap();
println!("{}", file.render(80).unwrap());
这里 $T(user_type) 不只是把类型名渲染成 User,还会把 import type { User } from './models' 收集到文件顶部。这个模型比较适合 SDK 生成器、API client/server stub、schema/model 生成器、DSL/编译器实验,以及各种需要稳定输出代码的工具。
现在版本是 0.6.8,欢迎大家试用,也想听听几个方向的反馈:
- builder/spec API 是否符合真实代码生成场景
sigil_quote!这种 inline 目标语言片段是否好用- 哪些语言的 import / formatting 规则最值得优先打磨
- 有没有现成的更多项目愿意尝试接入做一轮真实用例验证
Ext Link: https://github.com/rust-codegen-group/sigil-stitch
1
共 0 条评论, 1 页
评论区
写评论还没有评论