2个版本
0.1.1 | 2024年7月12日 |
---|---|
0.1.0 | 2023年10月5日 |
#188 in 过程宏
21KB
231 代码行
使用[syn
]编程编辑文件的原始工具。
syn
是Rust的既定标准解析器。其语法树易于使用,但它是有损的 - 如果你解析一个文件,使用syn编辑它,然后反解析它,你会丢失所有的注释和空白(例如)。
Rust Analyzer的语法crate有一个无损失语法树,它为IDE辅助功能提供动力,但它很难使用。
Editor
允许你使用 syn
的语法树来编写你的结构化搜索和替换工具或IDE辅助功能。
let source_code = "const NUM: usize = 1;"; // get the source text
// create an AST and a helper struct from the same source code
let (mut editor, ast) = synsert::Editor::new_with_ast::<syn::ItemConst>(source_code).unwrap();
let edited = editor
.append(ast.ident, "_YAKS")
.replace(ast.expr, "9001")
.finish();
assert_eq!(edited, "const NUM_YAKS: usize = 9001;");
请参阅示例,以深入了解使用 syn::visit::Visit
的案例。
依赖关系
~4–11MB
~129K SLoC