Я пытаюсь заставить 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