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