Как ограничить методы NDEPend, запрос на атрибут типа
Вопрос
Я пытаюсь получить NDEPend, чтобы определить длинные методы, используя модифицированную версию стандартных «методов слишком большого» запроса.
Я не хочу сообщать о длинных методах, которые разработчики мало контролируют, поэтому я отфильтровал сгенерированный код с помощью DebuggerNonUserCode
атрибут и InitializeComponent()
.
К сожалению, я все еще получаю несколько ложных срабатываний, поскольку методы в сгенерированных типах также сообщаются. Проблема в том, что в то время как сам тип имеет DebuggerNonUserCode
Атрибут, методы нет, поэтому они включены в выходные данные, несмотря на то, что они генерируются.
Я ищу что-то вроде соединения между типами и методами: дайте мне все типы, которые не имеют DebuggerNonUserCode
Атрибут и запустите запрос на тех, но я не могу выяснить, как выразить это в CQL.
Для некоторых из сборников я могу просто фильтровать на полном имени, но, к сожалению, некоторые из наших собраний Mix разработчика сделаны и сгенерированные типы. К сожалению IsGeneratedByCompiler
не может быть использован либо в этом случае.
Мой запрос
WARN IF Count > 0 IN SELECT METHODS WHERE
NbLinesOfCode > 30 AND
!HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
!NameIs "InitializeComponent()"
ORDER BY NbLinesOfCode DESC
Решение
Брайан, благодаря Кодовое правило по запросу LINQ (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 также предлагает способ определить, что такое Просто-мой код. Отказ Эта функция описывает здесь. Отказ В основном вам нужно определить набор 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. запрос по умолчанию Образование сгенерированных и дизайнерских методов от JustMyCode
Другие советы
Мне очень нравится ndepend, но это все еще самая большая недолго о том, что пространство имен / тип / метод не может быть подключена к одному запросу. Эта функция сделает CQL действительно мощным веществом.
Кроме того чекиIsgeneratedbycompiler.' а также 'Isinframeworks mbly.«Может быть полезен. Вы также можете удалить определенные пространства имен из запроса (Вне пространства имен "...")