add property tooltip
This commit is contained in:
@@ -128,7 +128,7 @@ public partial class SharpIdeCodeEdit : CodeEdit
|
|||||||
{
|
{
|
||||||
IMethodSymbol methodSymbol => SymbolInfoComponents.GetMethodSymbolInfo(methodSymbol),
|
IMethodSymbol methodSymbol => SymbolInfoComponents.GetMethodSymbolInfo(methodSymbol),
|
||||||
INamedTypeSymbol namedTypeSymbol => new Control(),
|
INamedTypeSymbol namedTypeSymbol => new Control(),
|
||||||
IPropertySymbol propertySymbol => new Control(),
|
IPropertySymbol propertySymbol => SymbolInfoComponents.GetPropertySymbolInfo(propertySymbol),
|
||||||
IFieldSymbol fieldSymbol => SymbolInfoComponents.GetFieldSymbolInfo(fieldSymbol),
|
IFieldSymbol fieldSymbol => SymbolInfoComponents.GetFieldSymbolInfo(fieldSymbol),
|
||||||
IParameterSymbol parameterSymbol => new Control(),
|
IParameterSymbol parameterSymbol => new Control(),
|
||||||
_ => new Control()
|
_ => new Control()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public static partial class SymbolInfoComponents
|
|||||||
label.AddAttributes(methodSymbol);
|
label.AddAttributes(methodSymbol);
|
||||||
label.AddAccessibilityModifier(methodSymbol);
|
label.AddAccessibilityModifier(methodSymbol);
|
||||||
label.AddText(" ");
|
label.AddText(" ");
|
||||||
label.AddStaticModifier(methodSymbol);
|
label.AddMethodStaticModifier(methodSymbol);
|
||||||
label.AddVirtualModifier(methodSymbol);
|
label.AddVirtualModifier(methodSymbol);
|
||||||
label.AddAbstractModifier(methodSymbol);
|
label.AddAbstractModifier(methodSymbol);
|
||||||
label.AddOverrideModifier(methodSymbol);
|
label.AddOverrideModifier(methodSymbol);
|
||||||
@@ -58,7 +58,7 @@ public static partial class SymbolInfoComponents
|
|||||||
label.Pop();
|
label.Pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddStaticModifier(this RichTextLabel label, IMethodSymbol methodSymbol)
|
private static void AddMethodStaticModifier(this RichTextLabel label, IMethodSymbol methodSymbol)
|
||||||
{
|
{
|
||||||
if (methodSymbol.IsStatic || methodSymbol.ReducedFrom?.IsStatic is true)
|
if (methodSymbol.IsStatic || methodSymbol.ReducedFrom?.IsStatic is true)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public static partial class SymbolInfoComponents
|
|||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddStaticModifier(this RichTextLabel label, IFieldSymbol symbol)
|
private static void AddStaticModifier(this RichTextLabel label, ISymbol symbol)
|
||||||
{
|
{
|
||||||
if (symbol.IsStatic)
|
if (symbol.IsStatic)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
using Godot;
|
||||||
|
using Microsoft.CodeAnalysis;
|
||||||
|
|
||||||
|
namespace SharpIDE.Godot.Features.CodeEditor;
|
||||||
|
|
||||||
|
public partial class SymbolInfoComponents
|
||||||
|
{
|
||||||
|
public static Control GetPropertySymbolInfo(IPropertySymbol symbol)
|
||||||
|
{
|
||||||
|
var label = new RichTextLabel();
|
||||||
|
label.FitContent = true;
|
||||||
|
label.AutowrapMode = TextServer.AutowrapMode.Off;
|
||||||
|
label.SetAnchorsPreset(Control.LayoutPreset.FullRect);
|
||||||
|
label.PushColor(CachedColors.White);
|
||||||
|
label.PushFont(MonospaceFont);
|
||||||
|
label.AddAttributes(symbol);
|
||||||
|
label.AddAccessibilityModifier(symbol);
|
||||||
|
label.AddText(" ");
|
||||||
|
label.AddStaticModifier(symbol);
|
||||||
|
label.AddReadonlyModifier(symbol);
|
||||||
|
label.AddVirtualModifier(symbol);
|
||||||
|
label.AddAbstractModifier(symbol);
|
||||||
|
label.AddOverrideModifier(symbol);
|
||||||
|
label.AddPropertyTypeName(symbol);
|
||||||
|
label.AddPropertyName(symbol);
|
||||||
|
label.AddGetSetAccessors(symbol);
|
||||||
|
label.AddContainingNamespaceAndClass(symbol);
|
||||||
|
|
||||||
|
label.Pop();
|
||||||
|
label.Pop();
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddReadonlyModifier(this RichTextLabel label, IPropertySymbol symbol)
|
||||||
|
{
|
||||||
|
if (symbol.IsReadOnly)
|
||||||
|
{
|
||||||
|
label.PushColor(CachedColors.KeywordBlue);
|
||||||
|
label.AddText("readonly");
|
||||||
|
label.Pop();
|
||||||
|
label.AddText(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddPropertyTypeName(this RichTextLabel label, IPropertySymbol symbol)
|
||||||
|
{
|
||||||
|
label.PushColor(GetSymbolColourByType(symbol.Type));
|
||||||
|
label.AddText(symbol.Type.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat));
|
||||||
|
label.Pop();
|
||||||
|
label.AddText(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddPropertyName(this RichTextLabel label, IPropertySymbol symbol)
|
||||||
|
{
|
||||||
|
label.PushColor(CachedColors.White);
|
||||||
|
label.AddText(symbol.Name);
|
||||||
|
label.Pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddGetSetAccessors(this RichTextLabel label, IPropertySymbol symbol)
|
||||||
|
{
|
||||||
|
label.AddText(" { ");
|
||||||
|
|
||||||
|
if (symbol.GetMethod is not null)
|
||||||
|
{
|
||||||
|
label.PushColor(CachedColors.KeywordBlue);
|
||||||
|
label.AddText("get");
|
||||||
|
label.Pop();
|
||||||
|
label.PushColor(CachedColors.White);
|
||||||
|
label.AddText(";");
|
||||||
|
label.Pop();
|
||||||
|
label.AddText(" ");
|
||||||
|
}
|
||||||
|
if (symbol.SetMethod is {} setMethod)
|
||||||
|
{
|
||||||
|
if (setMethod.DeclaredAccessibility != symbol.DeclaredAccessibility)
|
||||||
|
{
|
||||||
|
label.PushColor(CachedColors.KeywordBlue);
|
||||||
|
label.AddText(setMethod.DeclaredAccessibility.ToString().ToLower());
|
||||||
|
label.Pop();
|
||||||
|
label.AddText(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setMethod.IsInitOnly)
|
||||||
|
{
|
||||||
|
label.PushColor(CachedColors.KeywordBlue);
|
||||||
|
label.AddText("init");
|
||||||
|
label.Pop();
|
||||||
|
label.PushColor(CachedColors.White);
|
||||||
|
label.AddText(";");
|
||||||
|
label.Pop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
label.PushColor(CachedColors.KeywordBlue);
|
||||||
|
label.AddText("set");
|
||||||
|
label.Pop();
|
||||||
|
label.PushColor(CachedColors.White);
|
||||||
|
label.AddText(";");
|
||||||
|
label.Pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
label.AddText(" ");
|
||||||
|
}
|
||||||
|
label.AddText("}");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user