Как ограничить методы NDEPend, запрос на атрибут типа

StackOverflow https://stackoverflow.com/questions/2379045

  •  24-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь получить 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.«Может быть полезен. Вы также можете удалить определенные пространства имен из запроса (Вне пространства имен "...")

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top