[英]Using Roslyn to replace identifiers in C#
我是 Roslyn 的新手,需要从哪里开始的正确方向。
我的任务是编写一个工具来自动更改 SyntaxTree 中变量/函数/类/等的标识符,以满足我们的通用命名标准。
例如:
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 进行语法转换的文档,但它看起来太复杂而无法启动。 我将不胜感激帮助指明方向。
谢谢!
PS我需要这样的东西:
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;
}
您不能仅使用字符串操作来实现重命名器。 您必须使用符号来理解每个语法节点的代码和符号含义,才能知道它是否需要重命名。
有一个重命名器类可以为您完成。
如果你想自己做一个练习,你需要遍历节点,然后获取符号,检查它是否确实是你想要更改的节点(例如,字段名称而不是using
语句的一部分...... ),然后找到所有 location\\references\\interface implementations 并更改它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.