Method attributes

This commit is contained in:
Matt Parker
2025-10-11 16:10:15 +10:00
parent 76fc508f51
commit e031bdfc42

View File

@@ -17,10 +17,8 @@ public static class SymbolInfoComponents
label.SetAnchorsPreset(Control.LayoutPreset.FullRect);
label.PushColor(CachedColors.White);
label.PushFont(MonospaceFont);
label.PushColor(CachedColors.KeywordBlue);
// TODO: Attributes
label.AddText(methodSymbol.DeclaredAccessibility.GetAccessibilityString());
label.Pop();
label.AddMethodAttributes(methodSymbol);
label.AddAccessibilityModifier(methodSymbol);
label.AddText(" ");
label.AddStaticModifier(methodSymbol);
label.AddVirtualModifier(methodSymbol);
@@ -54,6 +52,13 @@ public static class SymbolInfoComponents
Accessibility.ProtectedAndInternal => "private protected",
_ => "unknown"
};
private static void AddAccessibilityModifier(this RichTextLabel label, IMethodSymbol methodSymbol)
{
label.PushColor(CachedColors.KeywordBlue);
label.AddText(methodSymbol.DeclaredAccessibility.GetAccessibilityString());
label.Pop();
}
private static void AddStaticModifier(this RichTextLabel label, IMethodSymbol methodSymbol)
{
@@ -99,6 +104,16 @@ public static class SymbolInfoComponents
}
}
private static void AddMethodAttributes(this RichTextLabel label, IMethodSymbol methodSymbol)
{
var attributes = methodSymbol.GetAttributes();
if (attributes.Length is 0) return;
foreach (var (index, attribute) in attributes.Index())
{
label.AddAttribute(attribute, true);
}
}
private static void AddMethodReturnType(this RichTextLabel label, IMethodSymbol methodSymbol)
{
if (methodSymbol.ReturnsVoid)
@@ -160,14 +175,7 @@ public static class SymbolInfoComponents
{
foreach (var (attrIndex, attribute) in attributes.Index())
{
label.AddText("[");
label.PushColor(CachedColors.ClassGreen);
var displayString = attribute.AttributeClass?.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat);
if (displayString?.EndsWith("Attribute") is true) displayString = displayString[..^9]; // remove last 9 chars
label.AddText(displayString ?? "unknown");
label.Pop();
label.AddText("]");
label.AddText(" ");
label.AddAttribute(attribute, false);
}
}
if (parameterSymbol.RefKind != RefKind.None) // ref, in, out
@@ -296,6 +304,19 @@ public static class SymbolInfoComponents
}
}
}
private static void AddAttribute(this RichTextLabel label, AttributeData attribute, bool newLines)
{
label.AddText("[");
label.PushColor(CachedColors.ClassGreen);
var displayString = attribute.AttributeClass?.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat);
if (displayString?.EndsWith("Attribute") is true) displayString = displayString[..^9]; // remove last 9 chars
label.AddText(displayString ?? "unknown");
label.Pop();
label.AddText("]");
if (newLines) label.Newline();
else label.AddText(" ");
}
// TODO: parse these types better?
private static (string, Color) GetForMetadataName(string metadataName)