Forge
csharpdeeb25a2
1using System.Text.RegularExpressions;
2using CascadeIDE.Contracts;
3using CascadeIDE.Services;
4
5namespace CascadeIDE.Features.Shell.Application;
6
7/// <summary>Построение паттерна ripgrep для префиксов Go-to палитры (<c>x:</c>/<c>t:</c>/<c>m:</c>).</summary>
8[PresentationProjection("goto-palette-ripgrep-pattern")]
9public static class GoToPaletteRipgrepPatternBuilder
10{
11 public static (string Pattern, bool FixedString, string? Glob) Build(GoToAllQuery q)
12 {
13 var term = q.Term.Trim();
14 return q.Prefix switch
15 {
16 'x' => (term, true, null),
17 't' => TypeNameSearchPattern(term),
18 'm' => MemberNameSearchPattern(term),
19 _ => (term, true, null),
20 };
21 }
22
23 private static (string Pattern, bool FixedString, string? Glob) TypeNameSearchPattern(string term)
24 {
25 var esc = Regex.Escape(term);
26 var pattern = $@"(class|interface|enum|record|struct)\s+\S*{esc}\S*";
27 return (pattern, false, "*.cs");
28 }
29
30 private static (string Pattern, bool FixedString, string? Glob) MemberNameSearchPattern(string term)
31 {
32 var esc = Regex.Escape(term);
33 var pattern = $@"\b{esc}\b\s*\(";
34 return (pattern, false, "*.cs");
35 }
36}
37
View only · write via MCP/CIDE