private void AnalyzeSymbol(SymbolAnalysisContext context)
 {
     if (context.Symbol is INamedTypeSymbol namedType)
     {
         foreach (var twinType in SymbolHelper.GetTwinTypes(namedType))
         {
             var ownMembers     = GetMembers(namedType);
             var twinMembers    = GetMembers(twinType.Type).Except(twinType.IgnoredMembers);
             var missingMembers = twinMembers.Except(ownMembers);
             if (missingMembers.IsEmpty == false)
             {
                 var propertiesString = string.Join("\r\n", missingMembers.Select(x => $"- {x}"));
                 var diagnostic       = Diagnostic.Create(Rule, context.Symbol.Locations[0], twinType.Type.ToDisplayString(), propertiesString);
                 context.ReportDiagnostic(diagnostic);
             }
         }
     }
 }
        private void AnalyzeSymbol(SymbolAnalysisContext context)
        {
            if (context.Symbol is INamedTypeSymbol namedType && (namedType.TypeKind == TypeKind.Class || namedType.TypeKind == TypeKind.Struct))
            {
                foreach (var twinType in SymbolHelper.GetTwinTypes(namedType))
                {
                    var missingMembers = twinType.GetMissingMembersFor(namedType);
                    if (missingMembers.Count > 0)
                    {
                        var propertiesString = string.Join("\r\n", missingMembers.Select(x => $"- {x.ExpectedName}"));
                        var properties       = new Dictionary <string, string>()
                        {
                            ["TwinType"] = twinType.Type.ToDisplayString()
                        };
                        var diagnostic = Diagnostic.Create(Rule, context.Symbol.Locations[0], properties.ToImmutableDictionary(), twinType.Type.ToDisplayString(), propertiesString);

                        context.ReportDiagnostic(diagnostic);
                    }
                }
            }
        }