#replace #primitive #search #structural #programs #edit #editor

synsert

用于编写Rust结构化搜索和替换程序的原始工具

2个版本

0.1.1 2024年7月12日
0.1.0 2023年10月5日

#188 in 过程宏

MIT/Apache

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