Skip to content

Commit f22e4db

Browse files
sharpninjaCopilot
andcommitted
refactor: eliminate TodoPromptActionKind enum with delegate dispatch
Replace the TodoPromptActionKind enum and switch-based dispatch in TodoListViewModel with direct delegate parameters. Each caller now passes a static lambda for the specific prompt generation method, removing the indirection layer entirely. - Delete Commands/TodoCommands.cs (contained only the enum) - Refactor RunTodoPromptCommandAsync to accept (string action, Func delegate) - Remove unused McpServerManager.Core.Commands using Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 3adcceb commit f22e4db

2 files changed

Lines changed: 11 additions & 28 deletions

File tree

src/McpServerManager.Core/Commands/TodoCommands.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/McpServerManager.Core/ViewModels/TodoListViewModel.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using CommunityToolkit.Mvvm.Input;
1010
using McpServer.UI.Core.Messages;
1111
using McpServer.UI.Core.ViewModels;
12-
using McpServerManager.Core.Commands;
1312
using McpServerManager.Core.Models;
1413
using McpServerManager.Core.Services;
1514
using Microsoft.Extensions.Logging;
@@ -377,7 +376,8 @@ private async Task CopilotStatusAsync()
377376
if (SelectedEntry?.Item is not { } item)
378377
return;
379378

380-
await RunTodoPromptCommandAsync(item, TodoPromptActionKind.Status);
379+
await RunTodoPromptCommandAsync(item, "status",
380+
static (vm, ct) => vm.GenerateStatusPromptAsync(ct));
381381
}
382382

383383
[RelayCommand]
@@ -386,7 +386,8 @@ private async Task CopilotPlanAsync()
386386
if (SelectedEntry?.Item is not { } item)
387387
return;
388388

389-
await RunTodoPromptCommandAsync(item, TodoPromptActionKind.Plan);
389+
await RunTodoPromptCommandAsync(item, "plan",
390+
static (vm, ct) => vm.GeneratePlanPromptAsync(ct));
390391
}
391392

392393
[RelayCommand]
@@ -395,12 +396,15 @@ private async Task CopilotImplementAsync()
395396
if (SelectedEntry?.Item is not { } item)
396397
return;
397398

398-
await RunTodoPromptCommandAsync(item, TodoPromptActionKind.Implement);
399+
await RunTodoPromptCommandAsync(item, "implement",
400+
static (vm, ct) => vm.GenerateImplementPromptAsync(ct));
399401
}
400402

401-
private async Task RunTodoPromptCommandAsync(McpTodoFlatItem item, TodoPromptActionKind promptAction)
403+
private async Task RunTodoPromptCommandAsync(
404+
McpTodoFlatItem item,
405+
string action,
406+
Func<UiCoreTodoDetailViewModel, CancellationToken, Task> generateAsync)
402407
{
403-
var action = promptAction.ToString().ToLowerInvariant();
404408
ReplaceActiveCancellation();
405409

406410
IsCopilotRunning = true;
@@ -413,20 +417,7 @@ private async Task RunTodoPromptCommandAsync(McpTodoFlatItem item, TodoPromptAct
413417
var vm = CreateScratchDetailVm();
414418
vm.EditorId = item.Id;
415419

416-
switch (promptAction)
417-
{
418-
case TodoPromptActionKind.Status:
419-
await vm.GenerateStatusPromptAsync(_activeCts!.Token);
420-
break;
421-
case TodoPromptActionKind.Plan:
422-
await vm.GeneratePlanPromptAsync(_activeCts!.Token);
423-
break;
424-
case TodoPromptActionKind.Implement:
425-
await vm.GenerateImplementPromptAsync(_activeCts!.Token);
426-
break;
427-
default:
428-
throw new ArgumentOutOfRangeException(nameof(promptAction), promptAction, null);
429-
}
420+
await generateAsync(vm, _activeCts!.Token);
430421

431422
if (!string.IsNullOrWhiteSpace(vm.ErrorMessage))
432423
{

0 commit comments

Comments
 (0)