繁体   English   中英

使用 Roslyn 替换 C# 中的标识符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM