#source-string #source #string #magic #refactoring #refactory

no-std refactory_string

一个使用原始索引修改字符串的库。对源代码转换很有用。

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

Apache-2.0

24KB
553

RefactoryString

一个使用原始索引修改字符串的库,灵感来源于Rich Harris的MagicString(见这里)。

Crates.io Downloads GitHub Workflow Status docs.rs rustc ^1.38.0

Buy Me A Coffee


假设你有一些源代码并且想修改它。如果你正在使用的源代码没有无损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(())
}

文档

文档可以在这里找到,并且一直在改进。

待办事项

请参阅我们的问题列表这里

无运行时依赖