Files
SharpIDE/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit_RenameSymbol.cs
2025-10-29 19:45:49 +10:00

39 lines
1.6 KiB
C#

using Godot;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text;
using SharpIDE.Application.Features.Analysis;
namespace SharpIDE.Godot.Features.CodeEditor;
public partial class SharpIdeCodeEdit
{
private readonly PackedScene _renameSymbolDialogScene = ResourceLoader.Load<PackedScene>("uid://cfcgmyhahblw");
[Inject] private readonly IdeRenameService _ideRenameService = null!;
public async Task RenameSymbol()
{
var cursorPosition = GetCaretPosition();
var (roslynSymbol, linePositionSpan) = await _roslynAnalysis.LookupSymbol(_currentFile, new LinePosition(cursorPosition.line, cursorPosition.col));
if (roslynSymbol is null || linePositionSpan is null)
{
GD.Print("No symbol found at cursor position for renaming.");
return;
}
if (roslynSymbol.IsFromSource() is false) return;
var renameSymbolDialog = _renameSymbolDialogScene.Instantiate<RenameSymbolDialog>();
renameSymbolDialog.SymbolName = roslynSymbol.Name;
await this.InvokeAsync(() =>
{
AddChild(renameSymbolDialog);
renameSymbolDialog.PopupCentered();
});
var newName = await renameSymbolDialog.RenameTaskCompletionSource.Task;
renameSymbolDialog.QueueFree();
if (string.IsNullOrWhiteSpace(newName) || newName == roslynSymbol.Name)
{
GD.Print("Renaming cancelled or no change in name.");
return;
}
await _ideRenameService.ApplyRename(roslynSymbol, newName);
}
}