Как определить метод в fxcop

Я пытаюсь создать пользовательское правило fxcop, которое проверяет все методы в целевой сборке, имена которых НЕ начинаются с ЗАГЛАВНОЙ буквы. Я довольно успешно делаю это, но есть одна проблема. Правило также выдает ошибку для «методов делегирования», например. btnOk_Click, который мне не нужен, есть ли способ идентифицировать/фильтровать методы делегата в fxcop, используя какое-либо предопределенное свойство/метод?


person sagar    schedule 04.12.2012    source источник
comment
Вы имеете в виду обычные методы, для которых вы создаете делегаты   -  person SLaks    schedule 04.12.2012
comment
@SLaks: Проще говоря, методы, которые мы регистрируем для любого события, например, для события нажатия кнопки, у нас есть методы btnOk_Click, они также обрабатываются как метод в Fxcop, когда мы конвертируем член в метод внутри метода проверки.   -  person sagar    schedule 04.12.2012
comment
FxCop предназначен для статического анализа (обнаружения недостижимого кода и т.п.), в то время как вам нужно обеспечить соблюдение стандарта кодирования. Инструментом для этого является StyleCop stylecop.codeplex.com. Мой вам совет: установите его вместе с ReSharper (это полностью обеспечит превосходный стандарт кодирования для вас и вашей команды), а затем перестаньте говорить о стандартах кодирования до конца :)   -  person satnhak    schedule 05.12.2012
comment
Я попробую, но есть ли способ создать собственные правила в Resharper?   -  person sagar    schedule 14.12.2012


Ответы (1)


Идеей было бы вместо этого написать собственные правила кода с помощью инструмента NDepend (Отказ от ответственности: я являюсь одним из разработчиков инструмента).

NDepend специально разработан для облегчения редактирования правил пользовательского кода с помощью запроса LINQ. Вам нужен следующий Code Query LINQ (CQLinq):

// <Name>Method name MUST start with CAPITAL</Name>
warnif count > 0 
from m in Application.Assemblies.WithName("TargetAssemblyName").ChildMethods()
where 
  !m.IsSpecialName &&         // Remove getter and setter
  !m.IsGeneratedByCompiler && // Discard methods generated by compiler
  !m.ParentType.IsDelegate &&
  !m.NameLike("^btn") &&      // Use regex here to discard btnOk_Click like method
  !char.IsUpper(m.SimpleName[0])
select m

Просто напишите это правило кода в редакторе запросов NDepend в VS и получите немедленный ответ:

NDepend Custom Code Rule

Правило кода NDepend может выполняться/проверяться в реальном времени в VS или выполняться во время процесса сборки. и проверено в отчете.

person Patrick from NDepend team    schedule 05.12.2012
comment
Спасибо, Патрик. Мне это понравилось, но на данный момент у клиента нет этого инструмента, поэтому я продолжаю только настройку fxcop. Также есть несколько способов определить тип данных элемента управления, поэтому я вижу, что если это обычный метод или делегат... - person sagar; 14.12.2012