簡體   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