Я пытаюсь создать пользовательское правило fxcop, которое проверяет все методы в целевой сборке, имена которых НЕ начинаются с ЗАГЛАВНОЙ буквы. Я довольно успешно делаю это, но есть одна проблема. Правило также выдает ошибку для «методов делегирования», например. btnOk_Click, который мне не нужен, есть ли способ идентифицировать/фильтровать методы делегата в fxcop, используя какое-либо предопределенное свойство/метод?
Как определить метод в fxcop
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 может выполняться/проверяться в реальном времени в VS или выполняться во время процесса сборки. и проверено в отчете.
person
Patrick from NDepend team
schedule
05.12.2012
Спасибо, Патрик. Мне это понравилось, но на данный момент у клиента нет этого инструмента, поэтому я продолжаю только настройку fxcop. Также есть несколько способов определить тип данных элемента управления, поэтому я вижу, что если это обычный метод или делегат...
- person sagar; 14.12.2012