Forge
csharpdeeb25a2
1#nullable enable
2using CascadeIDE.Services;
3
4namespace CascadeIDE.Features.Search.Application;
5
6/// <summary>Результат разбора строки палитры (ADR 0112 §1).</summary>
7internal abstract record CommandPaletteParsedQuery
8{
9 private CommandPaletteParsedQuery() { }
10
11 internal sealed record Melody(string TailNormalized) : CommandPaletteParsedQuery;
12
13 internal sealed record GoTo(GoToAllQuery Query) : CommandPaletteParsedQuery;
14
15 /// <summary>Свободный текст для fuzzy-поиска по каталогу <see cref="IdeCommandPaletteCatalog.All"/>.</summary>
16 internal sealed record Catalog(string TrimmedRaw) : CommandPaletteParsedQuery;
17}
18
19/// <summary>
20/// Порядок: сначала <c>c:</c> (IntentMelody), затем <c>f|t|m|x:</c>, иначе каталог — совместимо с историческим UX.
21/// </summary>
22internal static class CommandPaletteParsedQueryParser
23{
24 internal static CommandPaletteParsedQuery Parse(string? raw)
25 {
26 if (IntentMelodyAliases.TryGetTail(raw, out var melodyTail))
27 return new CommandPaletteParsedQuery.Melody(melodyTail);
28
29 if (GoToAllQueryParser.TryParse(raw) is { } goTo)
30 return new CommandPaletteParsedQuery.GoTo(goTo);
31
32 var catalog = raw?.Trim() ?? "";
33 return new CommandPaletteParsedQuery.Catalog(catalog);
34 }
35}
36
View only · write via MCP/CIDE