static void Analyze(SyntaxNodeAnalysisContext context) { var model = context.SemanticModel; var typeDeclaration = context.Node as TypeDeclarationSyntax; if (typeDeclaration == null) { return; } var declaredSymbol = model.GetDeclaredSymbol(typeDeclaration); if (declaredSymbol == null) { return; } // Analysing Target is only [ZeroFormattable] class, allows ShortName if (declaredSymbol.GetAttributes().FindAttributeShortName(ZeroFormattableAttributeShortName) == null) { return; } var reportContext = new DiagnosticsReportContext(context); // Start RootType VerifyType(reportContext, typeDeclaration.GetLocation(), declaredSymbol, new HashSet <ITypeSymbol>(), null); reportContext.ReportAll(); }
static void Analyze(SyntaxNodeAnalysisContext context) { var model = context.SemanticModel; var typeDeclaration = context.Node as TypeDeclarationSyntax; if (typeDeclaration == null) { return; } var declaredSymbol = model.GetDeclaredSymbol(typeDeclaration); if (declaredSymbol == null) { return; } var isUnion = declaredSymbol.GetAttributes().FindAttributeShortName(UnionAttributeShortName) != null; var zeroFormattableAttribute = declaredSymbol.GetAttributes().FindAttributeShortName(ZeroFormattableAttributeShortName); if (!isUnion && zeroFormattableAttribute == null) { return; } var reportContext = new DiagnosticsReportContext(context); if (isUnion) { VerifyUnion(reportContext, typeDeclaration.GetLocation(), declaredSymbol); } if (zeroFormattableAttribute != null) { var explicitFormatter = zeroFormattableAttribute.NamedArguments.Where( x => x.Key == ZeroFormattableFormatterProperty); if (explicitFormatter.Any()) { if (explicitFormatter.First().Value.Type.BaseType.Name != FormatterTypeName) { reportContext.Add(Diagnostic.Create(ExplicitFormatterMustInheritFormatter, typeDeclaration.GetLocation(), typeDeclaration.GetLocation(), explicitFormatter.First().Value.Type)); } return; } VerifyType(reportContext, typeDeclaration.GetLocation(), declaredSymbol, new HashSet <ITypeSymbol>(), null); } reportContext.ReportAll(); }
static void Analyze(SyntaxNodeAnalysisContext context) { var model = context.SemanticModel; var typeDeclaration = context.Node as TypeDeclarationSyntax; if (typeDeclaration == null) { return; } var declaredSymbol = model.GetDeclaredSymbol(typeDeclaration); if (declaredSymbol == null) { return; } var isUnion = declaredSymbol.GetAttributes().FindAttributeShortName(UnionAttributeShortName) != null; var isZeroFormattable = declaredSymbol.GetAttributes().FindAttributeShortName(ZeroFormattableAttributeShortName) != null; if (!isUnion && !isZeroFormattable) { return; } var reportContext = new DiagnosticsReportContext(context); if (isUnion) { VerifyUnion(reportContext, typeDeclaration.GetLocation(), declaredSymbol); } if (isZeroFormattable) { VerifyType(reportContext, typeDeclaration.GetLocation(), declaredSymbol, new HashSet <ITypeSymbol>(), null); } reportContext.ReportAll(); }