105 个发布版本
0.17.9 | 2024年5月18日 |
---|---|
0.17.8 | 2023年11月7日 |
0.17.7 | 2023年10月9日 |
0.17.5 | 2023年3月22日 |
0.1.11 | 2017年11月22日 |
#17 在 模板引擎 中排名
32,410 每月下载量
用于 74 个库 (26 直接)
230KB
4.5K SLoC
genco
genco 是一个具有空格感知的近似引用,用于生成美观的代码。
genco 的核心是 quote! 和 quote_in! 过程宏,这些宏简化了 标记流 的构建。
本项目解决了以下语言特定的关注点
-
结构化缩进 — 引用器依赖于直观的 空格检测 来结构化地排序间距和缩进。这使得 genco 能够以最小的努力生成美观、易读的代码。这也是在像 Python 这样的语言中生成正确行为的代码的必要条件,其中 缩进是有意义的。
-
语言定制 — 在 impl_lang! 宏的帮助下,支持新语言变得轻而易举。
为了在 空格检测 期间支持行更改,我们依赖于夜间的 proc_macro_span
功能。在稳定版本中,我们只能检测列更改。
直到这得到稳定 并且您想要完全功能化的空格检测,您必须使用 nightly
编译器构建和运行使用 genco 的项目。这对于像 python 这样的空格敏感语言来说非常重要。
您可以尝试一下
cargo run --example rust
与
cargo +nightly run --example rust
支持的语言
以下是在genco中内置支持的语言。
您的最喜欢的语言缺失吗? 打开一个问题!
您可以通过以下方式运行示例之一
cargo +nightly run --example rust
Rust 示例
以下是一个简单的程序,它通过自定义配置将Rust代码输出到标准输出。
use genco::prelude::*;
let hash_map = rust::import("std::collections", "HashMap");
let tokens: rust::Tokens = quote! {
fn main() {
let mut m = $hash_map::new();
m.insert(1u32, 2u32);
}
};
println!("{}", tokens.to_file_string()?);
这将生成
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert(1u32, 2u32);
}
依赖关系
~0.4–0.9MB
~21K SLoC