From 4f5456122a543ab5e03bd1bf90b5bd9c7a6c5fd6 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 16 Feb 2021 11:21:25 -0700 Subject: [PATCH] Add [DebuggerDisplay] attribute to typedef structs --- src/Microsoft.Windows.CsWin32/Generator.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Windows.CsWin32/Generator.cs b/src/Microsoft.Windows.CsWin32/Generator.cs index 42dfe60b..6e9b47f6 100644 --- a/src/Microsoft.Windows.CsWin32/Generator.cs +++ b/src/Microsoft.Windows.CsWin32/Generator.cs @@ -1341,6 +1341,13 @@ private static AttributeSyntax DebuggerBrowsable(DebuggerBrowsableState state) IdentifierName(Enum.GetName(typeof(DebuggerBrowsableState), state)!)))); } + private static AttributeSyntax DebuggerDisplay(string format) + { + return Attribute(IdentifierName("DebuggerDisplay")) + .AddArgumentListArguments( + AttributeArgument(LiteralExpression(SyntaxKind.StringLiteralExpression, Literal(format)))); + } + private static SyntaxToken SafeIdentifier(string name) => SafeIdentifierName(name).Identifier; private static IdentifierNameSyntax SafeIdentifierName(string name) => IdentifierName(CSharpKeywords.Contains(name) ? "@" + name : name); @@ -2081,7 +2088,8 @@ private StructDeclarationSyntax CreateTypeDefStruct(TypeDefinition typeDef) StructDeclarationSyntax result = StructDeclaration(name) .AddBaseListTypes(SimpleBaseType(GenericName(nameof(IEquatable)).AddTypeArgumentListArguments(IdentifierName(name)))) .WithMembers(members) - .WithModifiers(TokenList(Token(this.Visibility), Token(SyntaxKind.ReadOnlyKeyword), Token(SyntaxKind.PartialKeyword))); + .WithModifiers(TokenList(Token(this.Visibility), Token(SyntaxKind.ReadOnlyKeyword), Token(SyntaxKind.PartialKeyword))) + .AddAttributeLists(AttributeList().AddAttributes(DebuggerDisplay("{" + fieldName + "}"))); result = AddApiDocumentation(name, result); return result;