From de3a950327219da35ffb0d83e3fbde1621c80d81 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Sun, 12 Oct 2025 12:15:47 +1000 Subject: [PATCH] add local tooltip --- .../Features/CodeEditor/SharpIdeCodeEdit.cs | 2 +- .../SymbolTooltips/LocalVariableTooltip.cs | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/SharpIDE.Godot/Features/CodeEditor/SymbolTooltips/LocalVariableTooltip.cs diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index ea09f27..4c97b8a 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -131,7 +131,7 @@ public partial class SharpIdeCodeEdit : CodeEdit IPropertySymbol propertySymbol => SymbolInfoComponents.GetPropertySymbolInfo(propertySymbol), IFieldSymbol fieldSymbol => SymbolInfoComponents.GetFieldSymbolInfo(fieldSymbol), IParameterSymbol parameterSymbol => SymbolInfoComponents.GetParameterSymbolInfo(parameterSymbol), - //ILocalSymbol localSymbol => SymbolInfoComponents.GetLocalSymbolInfo(localSymbol), + ILocalSymbol localSymbol => SymbolInfoComponents.GetLocalVariableSymbolInfo(localSymbol), _ => new Control() }; popupPanel.AddChild(symbolInfoNode); diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SymbolTooltips/LocalVariableTooltip.cs b/src/SharpIDE.Godot/Features/CodeEditor/SymbolTooltips/LocalVariableTooltip.cs new file mode 100644 index 0000000..f935c29 --- /dev/null +++ b/src/SharpIDE.Godot/Features/CodeEditor/SymbolTooltips/LocalVariableTooltip.cs @@ -0,0 +1,47 @@ +using Godot; +using Microsoft.CodeAnalysis; + +namespace SharpIDE.Godot.Features.CodeEditor; + +public static partial class SymbolInfoComponents +{ + public static Control GetLocalVariableSymbolInfo(ILocalSymbol 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.AddText("local variable "); + label.AddAccessibilityModifier(symbol); + label.AddStaticModifier(symbol); + label.AddVirtualModifier(symbol); + label.AddAbstractModifier(symbol); + label.AddOverrideModifier(symbol); + label.AddLocalVariableTypeName(symbol); + label.AddLocalVariableName(symbol); + label.Newline(); + label.Pop(); // font + label.AddDocs(symbol); + + label.Pop(); + return label; + } + + private static void AddLocalVariableTypeName(this RichTextLabel label, ILocalSymbol symbol) + { + label.PushColor(GetSymbolColourByType(symbol.Type)); + label.AddText(symbol.Type.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat)); + label.Pop(); + label.AddText(" "); + } + + private static void AddLocalVariableName(this RichTextLabel label, ILocalSymbol symbol) + { + label.PushColor(CachedColors.White); + label.AddText(symbol.Name); + label.Pop(); + } +} \ No newline at end of file