SP2101: тело метода не должно содержать более 120 строк кода. Как я могу это подавить?

У меня есть метод, который обрабатывает множество типов файлов, например:

case ".jpg": 
    res = "image/jpeg"; 
    break;
case ".pdf": 
    res = "application/pdf"; 
    break;
case ".doc": 
    res = "application/msword"; 
    break;

..это несколько сотен строк. И я столкнулся с ошибкой StyleCop: SP2101: Method body must not contain more than 120 code lines

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

Изменить: я думаю, что это StyleCop+ ошибка, и ее нельзя решить с помощью программы FxCop для копирования подавления.


person DevDave    schedule 11.04.2012    source источник
comment
Похоже, это правило StyleCop +. См. ссылку. Не знаю, как бы вы это подавили, но, возможно, автор может помочь.   -  person Andrew Stephens    schedule 11.04.2012
comment
Зачем нужно подавлять предупреждение? Ваш босс видит это? Почему ты не можешь просто игнорировать это?   -  person Robert Harvey    schedule 11.04.2012
comment
Мы рассматриваем все предупреждения как ошибки, поэтому они не будут компилироваться без подавления. В ответах появилось много хороших альтернатив, и я запомню это, возможно, в будущем. Но код, который у меня уже есть, и подавление пока подойдут   -  person DevDave    schedule 12.04.2012
comment
Почему бы не использовать словарь с типом содержимого в качестве ключа и расширением файла в качестве значения. Тогда ваш код будет намного легче понять.   -  person Jonathan Parker    schedule 28.05.2013


Ответы (3)


Я автор StyleCop +.

Одно из правил, которое он добавляет к исходной функциональности StyleCop, - это действительно SP2101 (MethodMustNotContainMoreLinesThan), которое проверяет размер вашего метода.

Как и любое другое предупреждение StyleCop, это может быть:

  • отключен, в этом случае это означает, что он вам просто не нужен
  • подавлено для определенного места в коде (когда он вам все еще нужен, но не здесь)

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

Суть этого правила - в ремонтопригодности. Очень важно убедиться, что вы не попадаете в спагетти-код. StyleCop - это просто инструмент, дающий вам возможность контролировать это. StyleCop + предлагает еще несколько правил для проверки. Так что если вы хотите их использовать - вперед. Если нет - просто отключите. Это своего рода инструмент, который действительно нужно настроить перед использованием.

Дайте мне знать, если вам понадобится помощь с настройкой.

person Oleg Shuruev    schedule 11.04.2012
comment
Строка подавления для этого правила будет [SuppressMessage (StyleCopPlus.StyleCopPlusRules, SP2101: MethodMustNotContainMoreLinesThan, Justification = Некоторое обоснование)] - person Oleg Shuruev; 12.04.2012
comment
Спасибо, Олег, не понял, что могу настроить, надо будет посмотреть - person DevDave; 12.04.2012

Вы можете преобразовать это в Dictionary<string,string>:

var mimeTypesPerFileType = new Dictionary<string,string>();
mimeTypesPerFileType.Add(".jpg", "image/jpeg");
mimeTypesPerFileType.Add(".pdf", "application/pdf");
...

Это сократит количество строк в методе примерно на треть (хотя это может быть в отдельном методе / поле, поэтому вам не нужно каждый раз заново заполнять словарь).

Затем метод просто меняется на:

return mimeTypesPerFileType[fileType];

Обновлять:

Поскольку у вас около 400 нечетных случаев (около 1300 строк в методе), вам действительно следует загрузить эту карту из файла или базы данных. Это безусловно уменьшит количество строк.

person Oded    schedule 11.04.2012

Я не использую StyleCop, но я могу предложить изменить свой подход. Вы можете сохранить все эти пары значений в файле XML и т. Д. И использовать List(Of T) для их систематизации. Ваш метод можно свести к паре строк.

person J...    schedule 11.04.2012
comment
спасибо за ответы, хотя с 1300 строками я очень надеюсь, что смогу подавить это прямо сейчас! - person DevDave; 11.04.2012
comment
@Tyler: В таком случае я бы оставил нарушение, пока оно не было исправлено. Если вы подавите это сейчас, скорее всего, вы никогда этого не исправите. - person Austin Salonen; 11.04.2012
comment
На самом деле, написание сценария для построения отформатированного списка из того, что у вас уже есть, занимает пять минут. Еще одна пятиминутная работа - преобразовать это в трехстрочный метод. Почему бы не сделать это? - person J...; 11.04.2012
comment
Плюс часы / дни / недели регрессионного тестирования :) - person Jonathan Parker; 28.05.2013
comment
@JonathanParker - тестируем 1300 простых кейсов? Я думаю, что автоматический тест займет две минуты, чтобы написать и около одной секунды на выполнение. - person J...; 28.05.2013