コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }