Как ограничить запрос методов NDepend на атрибуте типа

Я пытаюсь заставить 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
7
задан Patrick from NDepend team 5 June 2012 в 17:00
поделиться

2 ответа

Брайан, благодаря Code Rule over LINQ Query (CQLinq) исходный код правила кода, о котором вы спрашиваете:

warnif count > 0
from m in Application.Methods where
  m.NbLinesOfCode > 30 &&
 !m.ParentType.HasAttribute( "System.Diagnostics.DebuggerNonUserCodeAttribute") &&
  m.Name != "InitializeComponent()"
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }

Синтаксис CQLinq также предлагает способ определить, что является Just-My-Code. Эта возможность описана здесь. По сути, вам нужно определить набор JustMyCode через запросы с префиксом notmycode. Тогда правило, о котором вы спрашиваете, можно легко переписать:

warnif count > 0
from m in JustMyCode.Methods where
   m.NbLinesOfCode > 30
orderby m.NbLinesOfCode descending    
select new { m, m.NbLinesOfCode }

Набор JustMyCode, определенный один раз для всех, может быть повторно использован для любого правила кода. Дополнительно вы можете посмотреть на notmycode запрос по умолчанию Discard generated and designer Methods from JustMyCode

2
ответ дан 7 December 2019 в 18:42
поделиться

Мне очень нравится NDepend, но это все же самый большой недостаток, что пространство имен / type / информация о методе не может быть объединена в один запрос. Эта функция сделает CQL действительно мощным инструментом.

Помимо этого, могут быть полезны проверки « IsGeneratedByCompiler » и « IsInFrameworkAssembly ». Вы также можете удалить определенные пространства имен из запроса ( OUT OF NAMESPACES "..." )

0
ответ дан 7 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: