rename symbol

This commit is contained in:
Matt Parker
2025-10-29 19:42:13 +10:00
parent bfda5b08b8
commit da2de0ed9b
9 changed files with 146 additions and 3 deletions

View File

@@ -0,0 +1,37 @@
using Godot;
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;
}
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);
}
}