Есть ли способ получить компилятор, когда кто-то пишет «новый MyClass()» и MyClass Inherit из EntityBase. Мне нравится останавливать разработчиков писать это. Могу ли я сделать это с помощью проекта CodeIssue.CodeIssue project with roslyn
0
A
ответ
3
Абсолютно!
Это именно та политика, которую CodeIssues предназначены для обработки. Вы должны иметь возможность написать CodeIssue, который проверяет узлы ObjectCreationSyntax
. Код для проверки наследования выглядит примерно так (не рядом с компилятором в данный момент, так это из памяти):
var entityBaseType = document.Project.GetCompilation(cancellationToken).GetTypeByMetadataName("FullyQualifiedTypeName.EntityBase");
var typeInfo = document.GetSemanticModel(cancellationToken).GetTypeInfo(node);
if (typeInfo.Type.BaseType.Equals(entityBaseType))
{
return new CodeIssue(...);
}
return null;
Спасибо большое, но у меня есть проблема, выясняя, как проверить ObjectCreationSyntax. Там так мало примеров. – user1199595
Ознакомьтесь с прохождением «Работа с семантикой», который поставляется с Roslyn CTP. В нем есть несколько примеров использования SemanticModel для ответа на эти вопросы. –
Куда уходит класс CodeIssue? похоже, они изменили имя. – Maslow