Я пытаюсь заставить NDepend идентифицировать длинные методы, используя модифицированную версию стандартного запроса «Слишком большие методы».
Я не хочу сообщать о длинных методах, над которыми у разработчиков мало контроля, поэтому я отфильтровываю сгенерированный код, используя атрибут DebuggerNonUserCode
и InitializeComponent()
.
К сожалению, я все еще получаю несколько ложных срабатываний, поскольку также сообщаются методы в сгенерированных типах. Проблема в том, что хотя у самого типа есть атрибут DebuggerNonUserCode
, а у методов его нет, поэтому они включаются в вывод, несмотря на то, что они сгенерированы.
Я ищу что-то вроде соединения между типами и методами: дайте мне все типы, у которых нет атрибута DebuggerNonUserCode
, и выполните запрос для них, но я не могу понять, как выразить это в CQL.
Для некоторых сборок я могу просто фильтровать по полному имени, но, к сожалению, некоторые из наших сборок смешивают типы, созданные разработчиком, и сгенерированные типы. К сожалению, в этом случае нельзя использовать IsGeneratedByCompiler
.
Мой запрос
WARN IF Count > 0 IN SELECT METHODS WHERE
NbLinesOfCode > 30 AND
!HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
!NameIs "InitializeComponent()"
ORDER BY NbLinesOfCode DESC