2 releases
0.1.1 | Jul 12, 2024 |
---|---|
0.1.0 | Oct 5, 2023 |
#258 in Procedural macros
21KB
231 lines
A primitive for programatically editing files using [syn
].
syn
is the de-facto standard for parsing Rust. Its syntax tree is easy to
use, but it is lossy - if you parse a file, edit it with syn, and unparse
it, you'll lose all your comments and spacing (for example).
Rust Analyzer's syntax crate has a lossless syntax tree, which powers IDE assists, but it's far more difficult to use.
Editor
allows you to use syn
's syntax tree to write your Structured
Search and Replace tools, or IDE assists.
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;");
See the examples for a more in-depth case using a syn::visit::Visit
or
Dependencies
~5–12MB
~140K SLoC