我是 Roslyn 的新手,需要从哪里开始的正确方向。
我的任务是编写一个工具来自动更改语法树中变量/函数/类/等的标识符,以满足我们通用的命名标准。
例如:
public class t_user {
public string m_name;
public int m_age;
}
t_user[] inactive_users;
需要改为:
public class CUser {
public string Name;
public int Age;
}
CUser[] inactiveUsers;
所以任务看起来像:获取所有声明,为每个声明生成新的唯一标识符,更改树中所有出现的地方。
找到一些关于使用 SyntaxRewriters 进行语法转换的文档,但它看起来太复杂而无法开始。 如果能帮助指明方向,我将不胜感激。
谢谢!
附言 我需要这样的东西:
SyntaxTree tree = CSharpSyntaxTree.ParseText ( File.ReadAllText(path) );
/* ...rename symbols... */
File.WriteAllText ( tree.ToString(), path );
具有重命名功能(刚开始)
static string renamer ( string id ){
if( id.StartsWith("m_") ){
return id.Substring(2,1).ToUpper()+id.Substring(3); // m_abc -> Abc
}
if( id.StartsWith("t_") ){
return "C"+id.Substring(2,1).ToUpper()+id.Substring(3); // t_abc -> CAbc
}
return id;
}
最佳答案
您不能仅通过字符串操作来实现重命名器。您必须使用符号来理解代码和每个语法节点的符号含义,以了解是否需要重命名。
有一个 renamer 类可以为您完成。
如果你想自己做一个练习,你需要遍历节点,然后获取符号,检查它是否确实是你想要更改的节点(例如,字段名称而不是 using
statement...),然后找到所有locations\references\interface implementations并更改它。
关于c# - 使用 Roslyn 替换 C# 中的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213164/