2014-12-24 68 views
1

在我的C#XML註釋,我有很多這樣的警告:如何自動修復XML註釋警告?

CS1574 XML註釋已CREF屬性「天」,可能無法得到解決

<see>元素被用來代替<paramref>。一個容易的錯誤。

/// <summary> 
/// Add <see cref="days"/> days to <see cref="date"/>. 
/// </summary> 
public static double AddDays(double date, int days) 
{ 
    return DateTime.FromOADate(date).AddDays(days).ToOADate(); 
} 

我該如何修復它們? 200個文件大約有1000個,所以我不想親自去做。發現和替換不起作用,因爲這會至少破壞<see>的合法使用。

新的C#Roslyn代碼分析API有幫助嗎?我可以想象代碼可以找到這些警告,測試破碎的目標是否真的是參數的名稱,如果是,則編輯爲paramref。你怎麼看?

回答

1

您可以使用正則表達式進行查找和替換,該查找和替換隻有在see標籤中的cref與參數列表中的參數匹配時纔會匹配。

這裏是一個非常難看的正則表達式應該工作:

((?:///\s*\<summary\>\s*\n)(?:\s*?///.*\n)*?\s*///.*?\<)see\s+cref(?=(=\"(:?.*)\"\s*/\>.*\n(?:///.*\n)*\s*///\s*\</summary\>[\s\n]*.*\((?:[^\)]|\n)*\3\b(?:[^\)]|\n)*\)[\s\n]*\{)) 

然後用這個替換文本:

$1paramref name 

正則表達式開始捕捉得到的一切要替換的文本前,然後尋找摘要塊的開始。一旦找到彙總區塊,便會通過彙總區塊行並尋找see。如果它找到一個,它會捕獲see的cref。然後它開始向前看。它查找摘要塊的末尾,然後查找可選的空白行,然後查找另外一行看起來像方法定義的標題的行。 (任何序列後跟帶圓括號的參數列表,後跟{)在匹配的括號內,它會從see標籤(具有字邊界的\3\b backref)中查找cref。

如果匹配成功,替換文本寫出捕獲的序言文本,然後它將see cref切換爲paramref name。它不需要編寫其餘的文本,因爲我們使用了一個lookahead組來匹配參數名稱。

一些注意事項

  1. 你可能需要在同一源運行很多次
  2. 我的Visual Studio(2012)不與 替換文本捕獲參考做得很好,希望你的處理更好。

總的來說,像很多基於正則表達式的解決方案,您可以使用它來完成大部分工作,然後手工清理任何遺漏。