Существуют ли какие-либо инструменты, которые могут сообщать о закомментированном коде .NET? - PullRequest
18 голосов
/ 12 апреля 2011

Кто-нибудь сталкивался с инструментом для сообщения закомментированного кода в приложении .NET? Я говорю о таких шаблонах, как:

//var foo = "This is dead";

И

/*
var foo = "This is dead";
*/

Это не будет найдено такими инструментами, как ReSharper или FxCop, которые ищут код без ссылок. Существуют очевидные следствия отличия закомментированного кода от закомментированного текста, но это не кажется слишком большой задачей.

Есть ли какой-нибудь существующий инструмент, который может подобрать это? Даже если это был просто отчет о происшествиях по файлу, а не полная интеграция с IDE.

Редактировать 1: Я также зарегистрировал это как запрос функции StyleCop . Похоже, хорошо подходит для инструмента.

Редактировать 2: Да, есть веская причина, почему я хотел бы сделать это, и это связано с качеством кода. Смотрите мой комментарий ниже.

Ответы [ 5 ]

5 голосов
/ 12 апреля 2011

Вы можете получить приблизительный ответ, используя регулярное выражение, которое распознает комментарии, которые заканчиваются на ";" или "}".

Более точную схему смотрите в следующем ответе: Инструмент для поиска закомментированного кода VHDL

1 голос
/ 17 февраля 2012

Для этого есть еще одна опция, Сонар . На самом деле это Java-ориентированное приложение, но есть плагин , который может обрабатывать код C #. В настоящее время он может сообщить о:

  1. Ошибки StyleCop
  2. Ошибки FxCop
  3. Жандармские ошибки
  4. Дублированный код
  5. Код комментария
  6. Результаты модульных испытаний
  7. Покрытие кода (с использованием NCover, OpenCover)

Требуется некоторое время для его сканирования, в основном из-за проверок дублирования (AFAIK использует сопоставление текста, а не синтаксические деревья C #), и если вы используете внутреннюю базу данных derby по умолчанию, она может дать сбой на больших базах кода. Тем не менее, он очень полезен для получаемых вами показателей базы кода и имеет функции моментальных снимков, которые позволяют увидеть, как все изменилось и (надеюсь) улучшилось со временем.

1 голос
/ 24 мая 2011

Я прошел эту дорогу по той же причине. Я более или менее сделал, как предложила Ира Бакстер (хотя я сосредоточился на variable_type variable = value и специально искал строки, состоящие из 0 или более пробелов в начале, за которыми следовал //, за которым следовал код (и для обработки / * * /, я написал препроцессор, который преобразовал его в //. Я настроил reg exp, чтобы сократить количество ложных срабатываний, а также провел ручную проверку, чтобы быть в безопасности, к счастью, было очень мало случаев, когда комментарий делал псевдокод, подобный вещам как предлагает Драхенштерн выше, YMMV. Я хотел бы найти инструмент, который мог бы сделать это, но некоторые ложные срабатывания из действительного, но, возможно, слишком подробного псевдокода будут действительно исключать, особенно если они используют методы грамотного программирования для сделать код «читабельным» как псевдокод.

(Я также делал это для кода VB6; с одной стороны, отсутствие; затрудняло правильное "легкое" reg exp, с другой стороны, в коде использовалось намного меньше классов, поэтому было проще для сопоставления с типами переменных, которые, как правило, отсутствуют в псевдокоде)

Другой вариант, который я посмотрел, но который не был доступен, заключался в просмотре журналов контроля версий для строк, которые были кодом в версии X, а затем // в той же строке в версии Y ... это, конечно, предполагает, что A) они вы используете контроль версий B) вы можете просмотреть его и C) они не написали код и не закомментировали его в одной и той же ревизии. (И становится немного хитрее, если они используют / * * / comments

0 голосов
/ 12 апреля 2011

С учетом того, что вы упомянули NDepends, он также может сообщить вам процент комментариев http://www.ndepend.com/Metrics.aspx#PercentageComment. Он определен для приложения, сборок, пространств имен, типов и методов.

0 голосов
/ 12 апреля 2011

StyleCop поймает первый паттерн.Он предлагает использовать //// в качестве комментария к коду, чтобы он игнорировал правило.

...