gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:54:15 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com