2014-12-24 1 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(); 
} 

Как я могу исправить их все? Там около 1000 из 200 файлов, поэтому я не хочу делать это вручную. Функция find-and-replace не будет работать, поскольку это приведет к поломке, по крайней мере, столько же легитимных применений <see>.

Помог ли новый API анализа кода C# Roslyn? Я мог представить код, который находит эти предупреждения, тесты, если сломанная цель действительно является именем параметра, и если это делает редактирование paramref. Как вы думаете?

ответ

1

Вы можете выполнить поиск и замену с помощью регулярного выражения, которое будет соответствовать только в том случае, если cref в теге see соответствует параметру в списке параметров.

Вот очень некрасиво регулярное выражение, которое должно работать:

((?:///\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. Затем он начинает смотреть вперед. Он ищет конец сводного блока, затем дополнительные пустые строки, затем он ищет еще одну строку, которая выглядит как заголовок определения метода. (Любая последовательность, за которой следует список аргументов в скобках, а затем {). Внутри совпадающих круглых скобок он ищет крест из тега see (backref со словом).

Если матч прошел успешно, текст замены записывает захваченный текст пролога, затем он переключает see cref на paramref name. Не нужно писать остальную часть текста, потому что мы использовали группу lookahead для соответствия имени параметра.

Некоторые предостережений

  1. Вы, вероятно, нужно запустить много раз за тот же источник
  2. My Visual Studio (2012) не очень хорошо со ссылкой захвата в замена текста, надеюсь, ваш справится с этим лучше.

В целом, как много решений на основе регулярных выражений, вы можете использовать его для выполнения большинства работ, а затем вручную очищать любые промахи.