NDepend запрос, чтобы рассмотреть getter и setter для свойства как один единственный метод

62
7

Я следил за ссылкой. Могу ли я найти количество методов без количества геттеров через CQL? и исключил свойства из одного из моих запросов NDepend.

Одно из наших правил кодирования также должно гарантировать, что количество свойств в классе (включая авто-свойства) не должно превышать 10. (Чтобы соответствовать другому руководству, для класса может быть определено не более 20 методов.)

Проблема даже в том случае, если у нас есть 10 свойств в классе, которые находятся в пределах определенных пределов, количество методов отображается как 20. Я понимаю, что это потому, что get_ и set_ для одного свойства считаются двумя разными методы. Но есть ли какой-либо способ, посредством которого мы можем изменить запрос NDepend, чтобы методы get_ и set_ для свойства учитывались как один метод?

благодаря

спросил(а) 2021-01-19T14:29:46+03:00 2 месяца, 3 недели назад
1
Решение
105

Вот правила 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 }

Это правило также отображает свойства для каждого совпадающего класса.

NDepend CQLinq Rule

У нас есть спрос на наш User Voice для создания интерфейса NDepend.CodeModel.IProperty, который упростит такое правило, не стесняйтесь голосовать за это!

ответил(а) 2021-01-19T14:29:46+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема