5个版本
0.1.4 | 2019年12月31日 |
---|---|
0.1.3 | 2019年12月31日 |
0.1.2 | 2019年12月31日 |
0.1.1 | 2019年12月31日 |
0.1.0 | 2019年12月31日 |
#8 在 #source-string
24KB
553 行
RefactoryString
一个使用原始索引修改字符串的库,灵感来源于Rich Harris的MagicString(见这里)。
假设你有一些源代码并且想修改它。如果你正在使用的源代码没有无损AST解析器和写入器,你就无法解析它、更新它,然后将其保存回。这就是RefactoryString发挥作用的地方;它允许你使用其原始索引修改文本内容。它也非常快。
例如,你可能想在以下代码中将变量名i
替换为new_var_name
:
let i = 1;
println!("{}", i + 5);
一个挑战是按照适当的顺序进行转换(因此你必须排队所有更改),并且每次添加新内容时都需要重新解析AST。使用RefactoryString
,你不必担心这个问题;只需在原始字符串的索引左侧或右侧进行overwrite
、追加或预加,然后序列化为字符串即可;
fn do_it() -> Result<(), refactory_string::Error> {
let example = String::from(r#"let i = 1;\nprintln!("{}", i + 5);"#);
let mut rs = RefactoryString::new(&example);
rs.overwrite(4, 5, "new_var_name")?;
rs.overwrite(27, 28, "new_var_name")?; // Using indices in the original content.
assert_eq!(&rs.to_string()?, r#"let new_var_name = 1;\nprintln!("{}", new_var_name + 5);"#);
Ok(())
}
文档
文档可以在这里找到,并且一直在改进。
待办事项
请参阅我们的问题列表这里。