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); } } } }