NDepend запрос, чтобы рассмотреть getter и setter для свойства как один единственный метод
Я следил за ссылкой. Могу ли я найти количество методов без количества геттеров через CQL? и исключил свойства из одного из моих запросов NDepend.
Одно из наших правил кодирования также должно гарантировать, что количество свойств в классе (включая авто-свойства) не должно превышать 10. (Чтобы соответствовать другому руководству, для класса может быть определено не более 20 методов.)
Проблема даже в том случае, если у нас есть 10 свойств в классе, которые находятся в пределах определенных пределов, количество методов отображается как 20. Я понимаю, что это потому, что get_ и set_ для одного свойства считаются двумя разными методы. Но есть ли какой-либо способ, посредством которого мы можем изменить запрос NDepend, чтобы методы get_ и set_ для свойства учитывались как один метод?
благодаря
Вот правила CQLinq, которые предупреждают, что типы имеют более 10 свойств и перечисляют свойства через getter или (эксклюзивный) сеттер. Проницательность заключается в использовании таблицы Lookup
где геттеры и/или сеттеры индексируются именем свойства, выведенным из имен getter/setter:
// <Name>A class should not have more than 10 properties</Name>
warnif count > 0
from t in Application.Types
let accessers = t.Methods.Where(m => m.IsPropertyGetter || m.IsPropertySetter)
where accessers.Count() > 0 // Optimization!
// Here we build a lookup that associate for each property name, the getter, the setter, or both.
// The property name is getter and/or setter simple names, without "get_" or "set_" prefixes (4 chars).
let propertiesLookup = accessers.ToLookup(a => a.SimpleName.Substring(4, a.SimpleName.Length -4))
where propertiesLookup.Count() > 10
let properties = propertiesLookup.Select(p => p.First())
select new { t, properties }
Это правило также отображает свойства для каждого совпадающего класса.
У нас есть спрос на наш User Voice для создания интерфейса NDepend.CodeModel.IProperty, который упростит такое правило, не стесняйтесь голосовать за это!