Как я могу заставить NDepend не выполнять анализ, если новые вызовы используются для устаревшего типа?

У нас есть тип с именем OldThing, который мы хотим со временем устареть.

Нам нужен запрос/правило NDepend, которое говорит from this point on, don't add any more calls to 'OldThing'.

В настоящее время мы используем NDepend и имеем базовую сборку для проверки таких вещей, как don't make large methods even larger.

Итак, мы хотели бы использовать NDepend для отслеживания любых дополнительных вызовов, сделанных на OldThing. У меня есть следующий запрос CQL:

// <Name>Don't use OldThing going forwards</Name>

warnif count > 0 

let containsMethods = Methods.WithFullNameIn(
   "MyNamespace.OldType.get_Foo()",
   "MyNamespace.OldType.get_Bar()")

from m in Application.Methods.UsingAny(containsMethods) 
where m.IsUsedRecently()
select m

... проблема в том, что это не работает; он не находит никаких новых вызовов.

Есть ли лучший способ сделать это в NDepend (возможно, используя trend metrics)?


person Steve Dunn    schedule 16.06.2016    source источник


Ответы (1)


Вам не нужен where m.IsUsedRecently(), это только для вызовов сторонних методов.

Затем вам нужно дважды проверить, что выражение let соответствует правильным устаревшим методам (вы также можете сопоставить их все сразу, используя ObsoleteAttribute).

Наконец, вы должны сделать это правило критическим, и оно должно работать :)

person Patrick from NDepend team    schedule 17.06.2016
comment
Спасибо @Patrick. Теперь он сообщает об использовании в измененных файлах, но я хотел бы, чтобы он сообщал только о «дополнительных» использованиях. Например, коллега открыл файл и изменил его (но не добавил никаких дополнительных вызовов этих методов), но теперь сборка сломана из-за 5 использований этих методов. - person Steve Dunn; 20.06.2016
comment
NDepend может сказать, вызывает ли метод другой метод, но не сообщает, что метод вызывает N раз другой метод. В этом контексте вы хотите знать, какой новый или реорганизованный метод вызывает устаревший метод? (и не назвал это в базовой линии) - person Patrick from NDepend team; 20.06.2016
comment
Было бы неплохо, если бы была функция, которая могла бы сравнивать «количество» от одной сборки к другой. Затем я мог бы добавить новый запрос «тренд» для каждой сборки, а затем посмотреть, увеличилось ли количество. - person Steve Dunn; 20.06.2016
comment