< 返回版块

adamcavendish 发表于 2026-06-26 14:46

Tags:code-generation,multi-language,codegen

大家好,分享一个我们最近在做的 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 页